Jump to content

Multiple servers SoulPlay Kraken


Jake
 Share

Recommended Posts

Releasing this as a free script, since it doesn't use instanced rooms (don't ask me to add them...). With minimal tweaks, you could make it withdraw vote tickets and use the instance room. Start it anywhere with Trident of the Seas, and your choice of magic armor. It auto refills the staff when it runs out of charge, with coins either in your inventory, or from your pouch. Uses super restores, so make sure you have a lot of them in your bank.

Post bugs if any. I'll try to get it on SDN in the future.

compiled : https://ufile.io/z1xksdsh

source : 

Spoiler

import xobot.bot.Context;
import xobot.client.callback.listeners.MessageListener;
import xobot.client.callback.listeners.PaintListener;
import xobot.client.events.MessageEvent;
import xobot.script.ActiveScript;
import xobot.script.Manifest;
import xobot.script.methods.*;
import xobot.script.methods.input.KeyBoard;
import xobot.script.methods.tabs.Equipment;
import xobot.script.methods.tabs.Inventory;
import xobot.script.methods.tabs.Prayer;
import xobot.script.methods.tabs.Skills;
import xobot.script.util.Time;
import xobot.script.util.Timer;
import xobot.script.wrappers.interactive.GameObject;
import xobot.script.wrappers.interactive.GroundItem;
import xobot.script.wrappers.interactive.Item;
import xobot.script.wrappers.interactive.NPC;

import java.awt.*;
import java.util.HashSet;

/**
 * Created by HP xw8400
 * Author: Jacob
 * Date: 4/24/2019.
 */

@Manifest(authors = {"Jake"}, name = "Kraken Killer", version = 1.0)

public class Kraken extends ActiveScript implements PaintListener, MessageListener {

    private final int TENT_POOL = 8729;
    private final int KRAKEN_POOL = 8732;
    private final int KRAKEN = 8980;

    private final int DEPLETED_STAFF = 30016;
    private final int STAFF = 30014;
    private final int COINS = 995;

    private int kills = 0;
    private boolean depleted = false;

    private Timer timer;

    private final HashSet<Integer> loots = new HashSet<Integer>() {{
        // staff // coins // elite effigy // tentacle
        add(DEPLETED_STAFF); add(COINS); add(18778); add(12004);
    }};


    @Override
    public boolean onStart() {
        timer = new Timer();
        return true;
    }

    @Override
    public int loop() {
        final GameObject bridge = GameObjects.getNearest(5456);
        if (bridge == null) {
            if (Inventory.Contains(3024)) {
                Game.teleport("kraken");
                Time.sleep(6000);
            } else if (Bank.isOpen()) {
                Bank.depositAll();
                if (Time.sleep(Inventory::isEmpty, 5000)) {
                    Bank.withdraw(3024, 26);
                    Time.sleep(() -> Inventory.Contains(3024), 4000);
                }
            } else {
                final GameObject bank = GameObjects.getNearest(26972);
                if (bank != null) {
                    bank.interact("open");
                    Time.sleep(Bank::isOpen, 8000);
                } else {
                    Game.teleport("edgeville");
                    Time.sleep(6000);
                }
            }
        } else if (bridge.isReachable()) {
            
            final Item vial = Inventory.getItem(229);
            if (vial != null) {
                vial.interact("drop");
                Time.sleep(750);
            }

            final Item staff = Inventory.getItem(STAFF);
            if (staff != null) {
                staff.interact("wear");
                Time.sleep(500);
                depleted = false;
            }

            if (depleted) {
                if (Inventory.isFull()) {
                    dropRestore();
                }
                final Item equip = Equipment.getItem(3);
                if (equip != null) {
                    equip.interact("remove");
                    Time.sleep(500);
                } else {
                    final Item depleted = Inventory.getItem(DEPLETED_STAFF);
                    if (depleted != null) {
                        final Item coins = Inventory.getItem(COINS);
                        if (coins != null) {
                            coins.interact("use");
                            Time.sleep(500);
                            depleted.interact("use with");
                            Time.sleep(1200);
                        } else {
                            withdrawFromPouch(2500000);
                        }
                    }
                }
            } else {
                Prayer.Prayers.PROTECT_FROM_MAGIC.Activate();

                if (Skills.PRAYER.getCurrentLevel() < 20) {
                    final Item potion = Inventory.getItem(3030, 3028, 3026, 3024);
                    if (potion != null) {
                        potion.interact("drink");
                        Time.sleep(() -> Skills.PRAYER.getCurrentLevel() > 20, 3000);
                    } else {
                        Game.teleport("edgeville");
                        return 5500;
                    }
                }

                final GroundItem loot = GroundItems.getNearest(item -> {
                    return item.isReachable() && loots.contains(item.getItem().getID());
                });
                if (loot != null) {
                    if (Inventory.isFull()) {
                        dropRestore();
                    }
                    final int count = Inventory.getRealCount();
                    loot.interact("take");
                    Time.sleep(() -> Inventory.getRealCount() > count, 7000);
                }

                final NPC kraken = NPCs.getNearest(KRAKEN);
                if (kraken != null) {
                    if (Players.getMyPlayer().getInteractingIndex() != kraken.getIndex() && !kraken.isDead()) {
                        kraken.interact("attack");
                        Time.sleep(() -> Players.getMyPlayer().getInteractingIndex() == kraken.getIndex(), 3000);
                    }
                } else {
                    final NPC[] pools = NPCs.getAll(npc -> !npc.isInCombat() && npc.getId() == TENT_POOL);
                    if (pools.length > 0) {
                        for (int i = 0; i < pools.length; i++) {
                            if (pools[i].isInCombat() || Projectiles.getTargeting(pools[i]).length > 0) {
                                continue;
                            }
                            pools[i].interact("disturb");
                            if (i == pools.length - 1) {
                                Time.sleep(pools[i]::isInCombat, 4000);
                            } else {
                                Time.sleep(2000);
                            }
                        }
                    } else {
                        final NPC krakenPool = NPCs.getNearest(KRAKEN_POOL);
                        if (krakenPool != null && NPCs.getAll().length > 1) {
                            krakenPool.interact("disturb");
                            Time.sleep(() -> krakenPool.getId() != KRAKEN_POOL, 4000);
                        }
                    }
                }
            }
        } else {
            final GameObject crevice = GameObjects.getNearest(537);
            if (crevice != null) {
                crevice.interact("enter");
                Time.sleep(() -> !crevice.isReachable(), 4000);
            }
        }

        return 100;
    }

    private void dropRestore() {
        final Item potion = Inventory.getItem(3030, 3028, 3026, 3024);
        if (potion != null) {
            potion.interact("drop");
            Time.sleep(() -> !Inventory.isFull(), 3000);
        }
    }

    private boolean withdrawFromPouch(int quantity) {
        Item coins = Inventory.getItem(COINS);
        if (coins == null || coins.getStack() < quantity) {
            Packets.sendAction(4001, 0, 0, 26962);
            if (Time.sleep(() -> Context.client.getInputState() == 5, 3000)) {
                String input = String.valueOf(quantity);
                Context.client.setInputText(input);
                if (Context.client.getInputText().equals(input)) {
                    KeyBoard.pressEnter();
                    return Time.sleep(() -> {
                        final Item coin = Inventory.getItem(COINS);
                        return coin != null && coin.getStack() >= quantity;
                    }, 3000);
                }
            }
        }
        return true;
    }

    @Override
    public void repaint(Graphics graphics) {
        double conversion = 3600.0 / (timer.getElapsed() / 1000.0);
        graphics.setColor(Color.YELLOW);
        graphics.drawString("Time: " + timer.toElapsedString(), 5, 290);
        graphics.drawString("Kills: " + kills + " / " + Math.round(kills * conversion), 5, 310);
    }

    @Override
    public void MessageRecieved(MessageEvent message) {
        if (message.getType() == 0) {
            if (message.getMessage().contains("has run out of")) {
                depleted = true;
            } else if (message.getMessage().contains("KRAKEN kill")) {
                kills++;
            }
        }
    }
}

 

 

Link to comment
Share on other sites

  • 1 month later...

Added to Ikov. Have tons of Prayer potion(4), Magic Potion(4), and Sharks in bank. Have Tons of blood barrage runes already in inventory, and make sure Blood barrage is autocasted. It uses augury, so make sure you have 77 prayer and have unlocked it from dung. You won't get many kills if you don't use Chaotic staff and arcane stream. Mystics armor works fine. It's also way better to wear a range top than a mage one. This is the gear I have been using. http://prntscr.com/nu0qsm. Also make sure you are on old teleport system for ikov.

Post here or bug me in discord if something doesn't work. Don't worry about dying (you'll only die if you dc), because you'll spawn in edge bank with all your items. 

 

e:it also requires 87 slayer 

Link to comment
Share on other sites

Everything is working pretty well with this setup - 2a6cb9d71f3a5a4bc8b253396ddc8364.png 

I have noticed it sometimes does not pray on a trip resulting in a failed trip, but otherwise it is working pretty nicely :)
actually it could have been me pausing the script and it running out of prayer points when checking gear stats, seems to be ok atm with 20kills. edit: I just witnessed it not pray when babysitting on the 21st run, just eats tps out then runs again.

Edited by L R K Y
Link to comment
Share on other sites

58 minutes ago, L R K Y said:

Everything is working pretty well with this setup - 2a6cb9d71f3a5a4bc8b253396ddc8364.png 

I have noticed it sometimes does not pray on a trip resulting in a failed trip, but otherwise it is working pretty nicely :)
actually it could have been me pausing the script and it running out of prayer points when checking gear stats, seems to be ok atm with 20kills. edit: I just witnessed it not pray when babysitting on the 21st run, just eats tps out then runs again.

Why Karil's? Does it hit thru prayer now? 

Link to comment
Share on other sites

Possible to add few extra lootings to the list? Saw that it doesnt even loot key halves, rune bars(noted), raw sharks(noted), raw monkfish(noted), ancient effigies, oak planks (noted). Sure there are more to make big buck if you bot 24/7

Edited by Sohan
Link to comment
Share on other sites

On 1.6.2019 at 5:51 AM, coffee693 said:

if possible can you add steel titan support with special? really speeds up kills

Just wanted to drop by and and ask if its possible to add such feature as well. Can double or triple up kills per hour.

Link to comment
Share on other sites

  • Neo locked this topic
Guest
This topic is now closed to further replies.
 Share

×
×
  • Create New...