Jump to content

itumi

Members
  • Posts

    16
  • Joined

  • Last visited

  • Feedback

    0%

Posts posted by itumi

  1. Made this script out of bits and pieces, kills chompys and does NOT pluck them, got my 1000kc with it and have not used it since, im sure it has some bugs in it.

    Instructions:

    • Start in Kandarin (South west of castle wars, near the swamp).
    • Have any amount of ogre bellows in inventory.
    • Have ogre bow or ogre comp bow and arrows equipped.

    NB: roast me on my shitty code

    NB2: Kill counter does not work properly

    Code:

    Spoiler
    import org.osbot.rs07.api.ui.Message;
    import org.osbot.rs07.script.Script;
    import org.osbot.rs07.script.ScriptManifest;
    import java.awt.*;
    import java.util.concurrent.TimeUnit;
    import org.osbot.rs07.api.map.Area;
    import org.osbot.rs07.utility.ConditionalSleep;
    import org.osbot.rs07.api.model.NPC;
    import org.osbot.rs07.api.model.RS2Object;
    import org.osbot.rs07.api.Chatbox;
    
    @ScriptManifest(name = "ChompyHunter", author = "itumi", version = 1.0, info = "", logo = "")
    
    public class ChompyHunter extends Script {
    
    // NPCS
        int npcSwampToad = 1473;
        int npcChompyBirdAlive = 1475;
        int npcChompyBirdDead = 1476;
    
    // OBJECTS
        int objSwampBubbles = 684;
        int objBloatedToad = 1474;
    
    // ITEMS
        int itemOgreBellowsZero = 2871;
        int itemOgreBellowsThree = 2872;
        int itemOgreBellowsTwo = 2873;
        int itemOgreBellowsOne = 2874;
        int itemBloatedToad = 2875;
        int itemOgreArrow = 2866;
        int itemOgreBow = 2883;
        int onToad = 0;
        int cantReach = 0;
        int killCount = 0;
        
    // AREA
        Area areaChompyArea = new Area(2392, 3048, 2402, 3039);
    
    // TIMER
        private long timeBegan;
        private long timeRan;
        private enum State {
            FILL_BELLOWS, CATCH_TOAD, PLACE_TOAD, KILL_CHOMPY, IDLE
        };
        
        private State getState() {
            /* KILL CHOMPY */
            if (npcs.closest(npcChompyBirdAlive) != null){
                return State.KILL_CHOMPY;
            }
            /* PLACE TOAD */
            else if(getInventory().contains(itemBloatedToad) &&
                    !myPlayer().isAnimating() &&
                    !myPlayer().isMoving()){
                return State.PLACE_TOAD;
            }
            /* CATCH TOAD */
            else if(!getInventory().contains(itemBloatedToad) &&
                    !myPlayer().isAnimating() &&
                    !myPlayer().isMoving() &&
                    bellowsEmpty() != true) {
                return State.CATCH_TOAD;
            }
            /* FILL BELLOWS */
            else if(bellowsEmpty() &&
                    !myPlayer().isAnimating() &&
                    !myPlayer().isMoving()) {
                return State.FILL_BELLOWS;
            }
            return State.IDLE;
        }
        
        @Override
        public void onStart() {
            timeBegan = System.currentTimeMillis();
            getWalking().webWalk(areaChompyArea);
        }
    
        @Override
        public void onExit() {
            //Code here will execute after the script ends
        }
        
        @Override
        public int onLoop() throws InterruptedException {
            switch(getState()){
                case KILL_CHOMPY:
                    killChompy();
                    break;
                case PLACE_TOAD:
                    placeToad();
                    break;
                case CATCH_TOAD:
                    catchToad();
                    break;
                case FILL_BELLOWS:
                    fillBellows();
                    break;
                default:
                    break;
            }
            return 100;
        }
    
        public void killChompy() throws InterruptedException {
            if (myPlayer().getInteracting() == null) {
                NPC chompy = getNpcs().closest(npc -> npc.getName().equalsIgnoreCase("chompy bird") && npc.getHealthPercent() > 0 && npc.isAttackable() && getMap().canReach(npc));
                if (random(1, 2) == 1) {
                    camera.toEntity(npcs.closest(npcChompyBirdAlive));
                }
                sleep(random(80, 950));
                if (chompy != null) {
                    if (npcs.closest(npcChompyBirdAlive) != null) {
                        log("Killing Chompy.");
                        npcs.closest(npcChompyBirdAlive).interact("Attack");
                        ++killCount;
                    }
                    new ConditionalSleep(5000, 100) {
                        @Override
                        public boolean condition() throws InterruptedException {
                            return myPlayer().getInteracting() != null;
                        }
                    }.sleep();
                }
            } else {
                new ConditionalSleep(1000, 20) {
                    @Override
                    public boolean condition() throws InterruptedException {
                        return myPlayer().getInteracting() == null;
                    }
                }.sleep();
            }
    
        }
    
        @Override
        public void onMessage(Message m) throws InterruptedException {
            if (m.getMessage().contains("There is a bloated toad already placed at this location.")) {
                onToad = 1;
            } else {
                onToad = 0;
            }
            if (m.getMessage().contains("I can't reach that!")) {
                cantReach = 1;
            } else {
                cantReach = 0;
            }
        }
    
        public void placeToad() throws InterruptedException {
            if(onToad == 1) {
                log("Standing on bloated toad, moving.");
                walking.walk(areaChompyArea.getRandomPosition());
                onToad = 0;
            } else {
                log("Dropping toad.");
                inventory.interact("Drop", itemBloatedToad);
                sleep(random(3000, 4000));
            }
    
            new ConditionalSleep(4000) {
                @Override
                public boolean condition() throws InterruptedException {
                    return (!getInventory().contains(itemBloatedToad));
                }
            }.sleep();
    
        }
    
        public void catchToad() throws InterruptedException {
            if(! npcs.closest(npcSwampToad).isVisible()) {
                camera.toEntity(npcs.closest(npcSwampToad));
            }
    
            if(!myPlayer().isAnimating())  {
                log("Inflating toad.");
                npcs.closest(npcSwampToad).interact("Inflate");
                sleep(random(550, 1050));
            }
    
            new ConditionalSleep(4000) {
    
                @Override
                public boolean condition() throws InterruptedException {
                    return (getInventory().contains(itemBloatedToad) || !myPlayer().isMoving());
                }
    
            }.sleep();
    
        }
    
        public void fillBellows() {
            if(! objects.closest(objSwampBubbles).isVisible()) {
                camera.toEntity(objects.closest(objSwampBubbles));
            }
    
            if(cantReach == 1) {
                log("Cant reach swamp, moving.");
                walking.walk(areaChompyArea.getRandomPosition());
                cantReach = 0;
            } else {
                log("Filling Bellows.");
                objects.closest(objSwampBubbles).interact("Suck");
            }
    
            new ConditionalSleep(4000) {
    
                @Override
                public boolean condition() throws InterruptedException {
                    return (!bellowsEmpty());
                }
    
            }.sleep();
    
        }
    
        public boolean bellowsEmpty() {
            if(!getInventory().contains(itemOgreBellowsThree) || !getInventory().contains(itemOgreBellowsTwo) || !getInventory().contains(itemOgreBellowsOne)) {
                return getInventory().contains(itemOgreBellowsZero);
            } else {
                return getInventory().contains(itemOgreBellowsThree) || !getInventory().contains(itemOgreBellowsTwo) || !getInventory().contains(itemOgreBellowsOne);
            }
        }
        
        public int getOgreBellowsId() {
            if(getInventory().contains(itemOgreBellowsThree)) {
                return itemOgreBellowsThree;
            } else if (getInventory().contains(itemOgreBellowsTwo)) {
                return itemOgreBellowsTwo;
            } else if (getInventory().contains(itemOgreBellowsOne)) {
                return itemOgreBellowsOne;
            } else if (getInventory().contains(itemOgreBellowsZero)) {
                return itemOgreBellowsZero;
            } else {
                log("Inventory contains no Ogre Bellows");
                return 0;
            }
        }
    
        @Override
    
        public void onPaint(Graphics2D g) {
    
            Graphics2D gr = g;
    
            timeRan = System.currentTimeMillis() - this.timeBegan;
    
            g.drawString("Time: " + ft(timeRan), 10, 300);
    
            g.drawString("State: " + getState().toString().replace('_', ' '), 10, 315);
    
            g.drawString("Kill Count: " + killCount, 10, 330);
    
        }
        
        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;
    
        }
    
    
    
    }

     

    ChompyHunter.jar

  2. Spoiler
    import java.awt.*;
    import java.util.ArrayList;
    import java.util.List;
    
    import org.osbot.rs07.api.model.RS2Object;
    import org.osbot.rs07.api.Objects;
    import org.osbot.rs07.api.map.Area;
    import org.osbot.rs07.api.map.Position;
    import org.osbot.rs07.api.model.NPC;
    import org.osbot.rs07.api.model.Player;
    import org.osbot.rs07.api.ui.Skill;
    import org.osbot.rs07.api.ui.Tab;
    import org.osbot.rs07.script.Script;
    import org.osbot.rs07.script.ScriptManifest;
    import org.osbot.rs07.api.ui.RS2Widget;
    
    @ScriptManifest(author = "itumi", info = "Nightmare Zone", name = "NMZ", version = 1.2, logo = "")
    public class NMZ extends Script
    {
    
        private final Color BACKGROUND_COLOUR = new Color(0, 0, 0, 80);
    
        private final Color BACKGROUND_OUTLINE_CLOUR = new Color(0, 0, 0, 80);
    
        private final Color MAIN_TEXT_COLOUR = new Color(102, 188, 255);
    
        private final BasicStroke stroke1 = new BasicStroke(1);
    
        private final Font font1 = new Font(Font.SANS_SERIF, 0, 12);
    
        private final int X = -134;
    
        private final int Y = 85;
    
        private final int BOX_ARC_AMOUNT = 8;
    
        private final String[] absorption_POTIONS = {"Absorption (1)", "Absorption (2)", "Absorption (3)", "Absorption (4)"};
    
        private final String[] OVERLOAD_POTIONS = {"Overload (1)", "Overload (2)", "Overload (3)", "Overload (4)"};
    
        private long timeScriptStarted = System.currentTimeMillis();
    
        private String status = "";
    
        private ArrayList<String> skillsExperienceStart = new ArrayList<String>();
    
        private ArrayList<String> skillsExperienceGained = new ArrayList<String>();
    
        private long timeToDrinkOverload;
    
        private int absorptionDosesToDrink;
    
        private long timeCanCake;
    
        @Override
        public void onStart()
        {
            setStatus("Script started.");
            for (Skill data : Skill.values())
            {
                skillsExperienceStart.add(data.name() + ":" + skills.getExperience(data));
            }
    
        }
    
        @Override
        public int onLoop() throws InterruptedException
        {
    
            if (skills.getDynamic(Skill.HITPOINTS) == 0)
            {
                setStatus("Player is 0 hp.");
            }
            if (areaHasPlayers())
            {
                setStatus("Area has players, stop script");
                stop();
            }
            updateExperienceGained();
            overload();
            absorption();
            antiBan();
            cake();
            findBoost();
    
            return random(500, 1000);
        }
    
        private void cake()
        {
            if (System.currentTimeMillis() < timeCanCake)
            {
                return;
            }
            if (System.currentTimeMillis() < timeToDrinkOverload)
            {
                return;
            }
            if (skills.getDynamic(Skill.STRENGTH) > skills.getStatic(Skill.STRENGTH))
            {
                if (skills.getDynamic(Skill.HITPOINTS) > 2)
                {
                    setStatus("Eat");
                    inventory.interact(random(1, 15) == 1 ? "Guzzle" : "Eat", "Dwarven rock cake");
                    moveMouse(3);
                }
                else if (skills.getDynamic(Skill.HITPOINTS) == 2)
                {
                    long delay = random(61000, 170000);
                    if (random(1, 7) == 1)
                    {
                        delay = random(170000, 360000);
                    }
                    if (random(1, 6) == 1)
                    {
                        // Do not guzzle.
                    }
                    else
                    {
                        setStatus("Eat");
                        inventory.interact("Guzzle", "Dwarven rock cake");
                    }
                    moveMouse(3);
                    timeCanCake = System.currentTimeMillis() + delay;
                }
            }
    
        }
    
        private void moveMouse(int i) {
            // TODO Auto-generated method stub
    
        }
    
        private void antiBan() throws InterruptedException
        {
            if (random(1, 200) == 1)
            {
                setStatus("Anti-ban: Random mouse");
                moveMouse(1);
            }
            if (random(1, 300) == 1)
            {
                moveMouse(2);
                if (skills.getCombat().getSpecialPercentage() >= 55)
                {
                    skills.getCombat().toggleSpecialAttack(true);
                    setStatus("Anti-ban: Special attack");
                }
            }
            if (random(1, 300) == 1)
            {
                int random = random(1, 50);
                if (random <= 5)
                {
                    absorptionDosesToDrink = random(1, 2);
                    setStatus("Anti-ban: Drink absorption");
                    sleep(random(2000, 10000));
                    skills.getMouse().moveOutsideScreen();
    
                }
                else if (random <= 25)
                {
                    attackRandomTarget();
    
                }
                else if (random <= 30)
                {
                    getWalking().walk(new Position((myPlayer().getX() - 10) + random(0, 10), (myPlayer().getY() - 10) + random(0, 10), myPlayer().getHeight()));
                    setStatus("Anti-ban: Walk");
                    sleep(random(2000, 10000));
                    skills.getMouse().moveOutsideScreen();
                }
                else if (random <= 40)
                {
                    random = random(1, 10);
                    if (random <= 4)
                    {
                        setStatus("Anti-ban: Friends tab");
                        getTabs().open(Tab.FRIENDS);
                        sleep(random(3000, 10000));
                        getTabs().open(Tab.INVENTORY);
                    }
                    else if (random <= 7)
                    {
                        setStatus("Anti-ban: Attack tab");
                        getTabs().open(Tab.ATTACK);
                        sleep(random(3000, 7000));
                        getTabs().open(Tab.INVENTORY);
                    }
                    else if (random <= 10)
                    {
                        setStatus("Anti-ban: Skills tab");
                        getTabs().open(Tab.SKILLS);
                        sleep(random(4000, 12000));
                        getTabs().open(Tab.INVENTORY);
                    }
                    sleep(random(2000, 10000));
                    skills.getMouse().moveOutsideScreen();
                }
    
                else if (random <= 50)
                {
                    if (System.currentTimeMillis() < timeCanCake)
                    {
                        attackRandomTarget();
                        return;
                    }
                    if (skills.getDynamic(Skill.HITPOINTS) > 1)
                    {
                        setStatus("Anti-ban: Eat cake");
                        inventory.interact(random(1, 2) == 1 ? "Guzzle" : "Eat", "Dwarven rock cake");
                    }
                    sleep(random(2000, 10000));
                    skills.getMouse().moveOutsideScreen();
                }
    
            }
    
        }
    
        private void findBoost() throws InterruptedException
        {
            RS2Object zapper = getObjects().closestThatContains("Zapper");
            if (zapper != null) {
                setStatus("Found Zapper");
                sleep(random(2000, 10000));
                zapper.interact("Activate");
                sleep(random(2000, 10000));
            }
            RS2Object recurrent_damage = getObjects().closestThatContains("Recurrent damage");
            if (recurrent_damage != null) {
                setStatus("Found Recurrent damage");
                sleep(random(2000, 10000));
                recurrent_damage.interact("Activate");
                sleep(random(2000, 10000));
            }
        }
    
        private void attackRandomTarget() throws InterruptedException
        {
            List<NPC> allNpcs = npcs.getAll();
            for (NPC npc : allNpcs) {
                if (npc == null) {
                    continue;
                }
                if (!npc.exists()) {
                    continue;
                }
                if (!npc.isVisible()) {
                    continue;
                }
                if (random(1, 2) == 1) {
                    continue;
                }
                npc.interact("Attack");
                setStatus("Anti-ban: Switch target");
                sleep(random(2000, 10000));
                skills.getMouse().moveOutsideScreen();
                break;
            }
    
        }
    
        private void absorption()
        {
            if (absorptionDosesToDrink > 0)
            {
                setStatus("Drinking absorption");
                inventory.interact("Drink", absorption_POTIONS);
                moveMouse(10);
                absorptionDosesToDrink--;
                if (absorptionDosesToDrink == 0)
                {
                    timeCanCake = System.currentTimeMillis() + random(500, 7000);
                }
            }
        }
    
        private void overload() throws InterruptedException
        {
            if (skills.getDynamic(Skill.HITPOINTS) < 51)
            {
                return;
            }
            if (timeToDrinkOverload == 0)
            {
                if (skills.getDynamic(Skill.STRENGTH) == skills.getStatic(Skill.STRENGTH))
                {
                    setStatus("Will overload shortly");
                    long delay = random(2000, 20000);
    
                    if (random(1, 6) == 1)
                    {
                        delay = random(20000, 120000);
                        setStatus("Will overload longly");
                    }
                    timeToDrinkOverload = System.currentTimeMillis() + delay;
                }
                return;
            }
            if (System.currentTimeMillis() > timeToDrinkOverload)
            {
                setStatus("Drinking overload");
                timeCanCake = System.currentTimeMillis() + random(10000, 25000);
                inventory.interact("Drink", OVERLOAD_POTIONS);
                timeToDrinkOverload = 0;
                moveMouse(3);
                sleep(random(1000, 8000));
                absorptionDosesToDrink = random(2, 7);
            }
    
        }
    
    
        @Override
        public void onExit()
        {
            setStatus("Script ended.");
        }
    
    
        @Override
        public void onPaint(Graphics2D g)
        {
            int ySize = skillsExperienceGained.size() * 16;
            g.setColor(BACKGROUND_COLOUR);
            g.fillRoundRect(143 + X, 8 + Y, 211, 40 + ySize, BOX_ARC_AMOUNT, BOX_ARC_AMOUNT);
            g.setColor(BACKGROUND_OUTLINE_CLOUR);
            g.setStroke(stroke1);
            g.drawRoundRect(143 + X, 8 + Y, 211, 40 + ySize, BOX_ARC_AMOUNT, BOX_ARC_AMOUNT);
            g.setFont(font1);
            g.setColor(MAIN_TEXT_COLOUR);
    
            g.drawString("Duration: " + getRuntime(), 147 + X, 24 + Y);
            g.drawString("Last action: " + status, 147 + X, 40 + Y);
            for (int index = 0; index < skillsExperienceGained.size(); index++)
            {
                g.drawString(skillsExperienceGained.get(index), 147 + X, 40 + Y + ((index + 1) * 16));
            }
            drawMouse(g);
        }
    
        private void setStatus(String status)
        {
            log("Status: " + status);
            this.status = status;
        }
    
        /**
         * Get time since script started.
         */
        private String getRuntime()
        {
            long seconds = (System.currentTimeMillis() - timeScriptStarted) / 1000;
            if (seconds < 60)
            {
                return seconds + "s";
            }
            else if (seconds < 3600)
            {
                int remainder = (int) (seconds / 60);
                if (60 * remainder < seconds)
                {
                    remainder = (int) (seconds - (60 * remainder));
                }
                else
                {
                    remainder = 0;
                }
                return (seconds / 60) + "m " + remainder + "s";
            }
            else
            {
                int remainderMinutes = (int) seconds / 3600;
                int seconds1 = 0;
                if (3600 * remainderMinutes < seconds)
                {
                    remainderMinutes = (int) (seconds - (3600 * remainderMinutes));
                    seconds1 = remainderMinutes;
                    remainderMinutes /= 60;
    
                    int remainder = (int) (seconds1 / 60);
                    if (60 * remainder < seconds1)
                    {
                        remainder = (int) (seconds1 - (60 * remainder));
                    }
                    else
                    {
                        remainder = 0;
                    }
                    seconds1 = remainder;
                }
                else
                {
                    remainderMinutes = 0;
                }
                return (seconds / 3600) + "h " + remainderMinutes + "m " + seconds1 + "s";
            }
        }
    
        /**
         * @return
         * 	The number in thousands with k at the end.
         */
        private String getFormattedRunescapeNumber(int amount)
        {
            if (amount >= 1000)
            {
                return (amount / 1000) + "k";
            }
            else
            {
                return amount + "";
            }
        }
    
        private void updateExperienceGained()
        {
            int index = 0;
            skillsExperienceGained.clear();
            for (Skill data : Skill.values())
            {
                int currentXp = skills.getExperience(data);
                String[] parse = skillsExperienceStart.get(index).split(":");
                int startXp = Integer.parseInt(parse[1]);
                if (currentXp > startXp)
                {
                    int totalXp = currentXp - startXp;
                    skillsExperienceGained.add(capitalize(parse[0]) + " xp: " + getFormattedRunescapeNumber(totalXp) + " (" + getFormattedRunescapeNumber(getExperienceperHour(totalXp)) + "/h)");
                }
                index++;
            }
        }
    
        public int getExperienceperHour(int totalExperienceGained)
        {
            int minutes = (int) ((System.currentTimeMillis() - timeScriptStarted) / 60000);
            int beforeSeconds = 0;
            double multiplier = 1.0;
            if (minutes < 60)
            {
                beforeSeconds = (int) ((System.currentTimeMillis() - timeScriptStarted) / 1000);
                multiplier = 3600.0 / (double) beforeSeconds;
                minutes = 60;
            }
    
            double convert = (double) minutes;
            convert = convert / 60.0;
            return (int) ((totalExperienceGained / convert) * multiplier);
        }
    
        /**
         * Capitalize the first letter and other letters that before it is a space.
         * @param s
         * @return
         */
        public static String capitalize(String s)
        {
            s = s.toLowerCase();
            for (int i = 0; i < s.length(); i++)
            {
                if (i == 0)
                {
                    s = String.format("%s%s", Character.toUpperCase(s.charAt(0)), s.substring(1));
                }
                if (!Character.isLetterOrDigit(s.charAt(i)))
                {
                    if (i + 1 < s.length())
                    {
                        s = String.format("%s%s%s", s.subSequence(0, i + 1), Character.toUpperCase(s.charAt(i + 1)), s.substring(i + 2));
                    }
                }
            }
            return s;
        }
    
        public boolean areaHasPlayers()
        {
            Area area = myPlayer().getArea(10);//create your own area
            int amount = 0;
    
            for (Player player : players.getAll())
            {
                if (player != null && !player.getName().equalsIgnoreCase(myPlayer().getName()))
                {
                    if (area.contains(player))
                    {
                        amount++;
                    }
                }
            }
            return amount > 0;
        }
    
        public void drawMouse(Graphics g)
        {
            ((Graphics2D) g).setRenderingHints(new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON));
    
            Point p = mouse.getPosition();
    
            Graphics2D spinG = (Graphics2D) g.create();
            Graphics2D spinGRev = (Graphics2D) g.create();
    
            spinG.setColor(new Color(255, 255, 255));
            spinGRev.setColor(Color.cyan);
    
            spinG.rotate(System.currentTimeMillis() % 2000d / 2000d * (360d) * 2 * Math.PI / 180.0, p.x, p.y);
            spinGRev.rotate(System.currentTimeMillis() % 2000d / 2000d * (-360d) * 2 * Math.PI / 180.0, p.x, p.y);
    
            final int outerSize = 20;
            final int innerSize = 12;
    
            spinG.setStroke(new BasicStroke(1.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
            spinGRev.setStroke(new BasicStroke(1.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
            spinG.drawArc(p.x - (outerSize / 2), p.y - (outerSize / 2), outerSize, outerSize, 100, 75);
            spinG.drawArc(p.x - (outerSize / 2), p.y - (outerSize / 2), outerSize, outerSize, -100, 75);
            spinGRev.drawArc(p.x - (innerSize / 2), p.y - (innerSize / 2), innerSize, innerSize, 100, 75);
            spinGRev.drawArc(p.x - (innerSize / 2), p.y - (innerSize / 2), innerSize, innerSize, -100, 75);
        }
    
    }

     

    Fixed the code again, added recurrent damage and zapper pick up function.

    Spoiler
    import java.awt.*;
    import java.util.ArrayList;
    import java.util.List;
    
    import org.osbot.rs07.api.model.RS2Object;
    import org.osbot.rs07.api.Objects;
    import org.osbot.rs07.api.map.Area;
    import org.osbot.rs07.api.map.Position;
    import org.osbot.rs07.api.model.NPC;
    import org.osbot.rs07.api.model.Player;
    import org.osbot.rs07.api.ui.Skill;
    import org.osbot.rs07.api.ui.Tab;
    import org.osbot.rs07.script.Script;
    import org.osbot.rs07.script.ScriptManifest;
    import org.osbot.rs07.api.ui.RS2Widget;
    
    @ScriptManifest(author = "itumi", info = "Nightmare Zone", name = "NMZ", version = 1.2, logo = "")
    public class NMZ extends Script
    {
    
        private final Color BACKGROUND_COLOUR = new Color(0, 0, 0, 80);
    
        private final Color BACKGROUND_OUTLINE_CLOUR = new Color(0, 0, 0, 80);
    
        private final Color MAIN_TEXT_COLOUR = new Color(102, 188, 255);
    
        private final BasicStroke stroke1 = new BasicStroke(1);
    
        private final Font font1 = new Font(Font.SANS_SERIF, 0, 12);
    
        private final int X = -134;
    
        private final int Y = 85;
    
        private final int BOX_ARC_AMOUNT = 8;
    
        private final String[] absorption_POTIONS = {"Absorption (1)", "Absorption (2)", "Absorption (3)", "Absorption (4)"};
    
        private final String[] OVERLOAD_POTIONS = {"Overload (1)", "Overload (2)", "Overload (3)", "Overload (4)"};
    
        private long timeScriptStarted = System.currentTimeMillis();
    
        private String status = "";
    
        private ArrayList<String> skillsExperienceStart = new ArrayList<String>();
    
        private ArrayList<String> skillsExperienceGained = new ArrayList<String>();
    
        private long timeToDrinkOverload;
    
        private int absorptionDosesToDrink;
    
        private long timeCanCake;
    
        @Override
        public void onStart()
        {
            setStatus("Script started.");
            for (Skill data : Skill.values())
            {
                skillsExperienceStart.add(data.name() + ":" + skills.getExperience(data));
            }
    
        }
    
        @Override
        public int onLoop() throws InterruptedException
        {
    
            if (skills.getDynamic(Skill.HITPOINTS) == 0)
            {
                setStatus("Player is 0 hp.");
            }
            if (areaHasPlayers())
            {
                setStatus("Area has players, stop script");
                stop();
            }
            updateExperienceGained();
            overload();
            absorption();
            antiBan();
            cake();
            findBoost();
    
            return random(500, 1000);
        }
    
        private void cake()
        {
            if (System.currentTimeMillis() < timeCanCake)
            {
                return;
            }
            if (System.currentTimeMillis() < timeToDrinkOverload)
            {
                return;
            }
            if (skills.getDynamic(Skill.STRENGTH) > skills.getStatic(Skill.STRENGTH))
            {
                if (skills.getDynamic(Skill.HITPOINTS) > 2)
                {
                    setStatus("Eat");
                    inventory.interact(random(1, 15) == 1 ? "Guzzle" : "Eat", "Dwarven rock cake");
                    moveMouse(3);
                }
                else if (skills.getDynamic(Skill.HITPOINTS) == 2)
                {
                    long delay = random(61000, 170000);
                    if (random(1, 7) == 1)
                    {
                        delay = random(170000, 360000);
                    }
                    if (random(1, 6) == 1)
                    {
                        // Do not guzzle.
                    }
                    else
                    {
                        setStatus("Eat");
                        inventory.interact("Guzzle", "Dwarven rock cake");
                    }
                    moveMouse(3);
                    timeCanCake = System.currentTimeMillis() + delay;
                }
            }
    
        }
    
        private void moveMouse(int i) {
            // TODO Auto-generated method stub
    
        }
    
        private void antiBan() throws InterruptedException
        {
            if (random(1, 200) == 1)
            {
                setStatus("Anti-ban: Random mouse");
                moveMouse(1);
            }
            if (random(1, 300) == 1)
            {
                moveMouse(2);
                if (skills.getCombat().getSpecialPercentage() >= 55)
                {
                    skills.getCombat().toggleSpecialAttack(true);
                    setStatus("Anti-ban: Special attack");
                }
            }
            if (random(1, 300) == 1)
            {
                int random = random(1, 50);
                if (random <= 5)
                {
                    absorptionDosesToDrink = random(1, 2);
                    setStatus("Anti-ban: Drink absorption");
                    sleep(random(2000, 10000));
                    skills.getMouse().moveOutsideScreen();
    
                }
                else if (random <= 25)
                {
                    attackRandomTarget();
    
                }
                else if (random <= 30)
                {
                    getWalking().walk(new Position((myPlayer().getX() - 10) + random(0, 10), (myPlayer().getY() - 10) + random(0, 10), myPlayer().getHeight()));
                    setStatus("Anti-ban: Walk");
                    sleep(random(2000, 10000));
                    skills.getMouse().moveOutsideScreen();
                }
                else if (random <= 40)
                {
                    random = random(1, 10);
                    if (random <= 4)
                    {
                        setStatus("Anti-ban: Friends tab");
                        getTabs().open(Tab.FRIENDS);
                        sleep(random(3000, 10000));
                        getTabs().open(Tab.INVENTORY);
                    }
                    else if (random <= 7)
                    {
                        setStatus("Anti-ban: Attack tab");
                        getTabs().open(Tab.ATTACK);
                        sleep(random(3000, 7000));
                        getTabs().open(Tab.INVENTORY);
                    }
                    else if (random <= 10)
                    {
                        setStatus("Anti-ban: Skills tab");
                        getTabs().open(Tab.SKILLS);
                        sleep(random(4000, 12000));
                        getTabs().open(Tab.INVENTORY);
                    }
                    sleep(random(2000, 10000));
                    skills.getMouse().moveOutsideScreen();
                }
    
                else if (random <= 50)
                {
                    if (System.currentTimeMillis() < timeCanCake)
                    {
                        attackRandomTarget();
                        return;
                    }
                    if (skills.getDynamic(Skill.HITPOINTS) > 1)
                    {
                        setStatus("Anti-ban: Eat cake");
                        inventory.interact(random(1, 2) == 1 ? "Guzzle" : "Eat", "Dwarven rock cake");
                    }
                    sleep(random(2000, 10000));
                    skills.getMouse().moveOutsideScreen();
                }
    
            }
    
        }
    
        private void findBoost() throws InterruptedException
        {
            RS2Object zapper = getObjects().closestThatContains("Zapper");
            if (zapper != null) {
                setStatus("Found Zapper");
                sleep(random(2000, 10000));
                zapper.interact("Activate");
                sleep(random(2000, 10000));
            }
            RS2Object recurrent_damage = getObjects().closestThatContains("Recurrent damage");
            if (recurrent_damage != null) {
                setStatus("Found Recurrent damage");
                sleep(random(2000, 10000));
                recurrent_damage.interact("Activate");
                sleep(random(2000, 10000));
            }
        }
    
        private void attackRandomTarget() throws InterruptedException
        {
            List<NPC> allNpcs = npcs.getAll();
            for (NPC npc : allNpcs) {
                if (npc == null) {
                    continue;
                }
                if (!npc.exists()) {
                    continue;
                }
                if (!npc.isVisible()) {
                    continue;
                }
                if (random(1, 2) == 1) {
                    continue;
                }
                npc.interact("Attack");
                setStatus("Anti-ban: Switch target");
                sleep(random(2000, 10000));
                skills.getMouse().moveOutsideScreen();
                break;
            }
    
        }
    
        private void absorption()
        {
            if (absorptionDosesToDrink > 0)
            {
                setStatus("Drinking absorption");
                inventory.interact("Drink", absorption_POTIONS);
                moveMouse(10);
                absorptionDosesToDrink--;
                if (absorptionDosesToDrink == 0)
                {
                    timeCanCake = System.currentTimeMillis() + random(500, 7000);
                }
            }
        }
    
        private void overload() throws InterruptedException
        {
            if (skills.getDynamic(Skill.HITPOINTS) < 51)
            {
                return;
            }
            if (timeToDrinkOverload == 0)
            {
                if (skills.getDynamic(Skill.STRENGTH) == skills.getStatic(Skill.STRENGTH))
                {
                    setStatus("Will overload shortly");
                    long delay = random(2000, 20000);
    
                    if (random(1, 6) == 1)
                    {
                        delay = random(20000, 120000);
                        setStatus("Will overload longly");
                    }
                    timeToDrinkOverload = System.currentTimeMillis() + delay;
                }
                return;
            }
            if (System.currentTimeMillis() > timeToDrinkOverload)
            {
                setStatus("Drinking overload");
                timeCanCake = System.currentTimeMillis() + random(10000, 25000);
                inventory.interact("Drink", OVERLOAD_POTIONS);
                timeToDrinkOverload = 0;
                moveMouse(3);
                sleep(random(1000, 8000));
                absorptionDosesToDrink = random(2, 7);
            }
    
        }
    
    
        @Override
        public void onExit()
        {
            setStatus("Script ended.");
        }
    
    
        @Override
        public void onPaint(Graphics2D g)
        {
            int ySize = skillsExperienceGained.size() * 16;
            g.setColor(BACKGROUND_COLOUR);
            g.fillRoundRect(143 + X, 8 + Y, 211, 40 + ySize, BOX_ARC_AMOUNT, BOX_ARC_AMOUNT);
            g.setColor(BACKGROUND_OUTLINE_CLOUR);
            g.setStroke(stroke1);
            g.drawRoundRect(143 + X, 8 + Y, 211, 40 + ySize, BOX_ARC_AMOUNT, BOX_ARC_AMOUNT);
            g.setFont(font1);
            g.setColor(MAIN_TEXT_COLOUR);
    
            g.drawString("Duration: " + getRuntime(), 147 + X, 24 + Y);
            g.drawString("Last action: " + status, 147 + X, 40 + Y);
            for (int index = 0; index < skillsExperienceGained.size(); index++)
            {
                g.drawString(skillsExperienceGained.get(index), 147 + X, 40 + Y + ((index + 1) * 16));
            }
            drawMouse(g);
        }
    
        private void setStatus(String status)
        {
            log("Status: " + status);
            this.status = status;
        }
    
        /**
         * Get time since script started.
         */
        private String getRuntime()
        {
            long seconds = (System.currentTimeMillis() - timeScriptStarted) / 1000;
            if (seconds < 60)
            {
                return seconds + "s";
            }
            else if (seconds < 3600)
            {
                int remainder = (int) (seconds / 60);
                if (60 * remainder < seconds)
                {
                    remainder = (int) (seconds - (60 * remainder));
                }
                else
                {
                    remainder = 0;
                }
                return (seconds / 60) + "m " + remainder + "s";
            }
            else
            {
                int remainderMinutes = (int) seconds / 3600;
                int seconds1 = 0;
                if (3600 * remainderMinutes < seconds)
                {
                    remainderMinutes = (int) (seconds - (3600 * remainderMinutes));
                    seconds1 = remainderMinutes;
                    remainderMinutes /= 60;
    
                    int remainder = (int) (seconds1 / 60);
                    if (60 * remainder < seconds1)
                    {
                        remainder = (int) (seconds1 - (60 * remainder));
                    }
                    else
                    {
                        remainder = 0;
                    }
                    seconds1 = remainder;
                }
                else
                {
                    remainderMinutes = 0;
                }
                return (seconds / 3600) + "h " + remainderMinutes + "m " + seconds1 + "s";
            }
        }
    
        /**
         * @return
         * 	The number in thousands with k at the end.
         */
        private String getFormattedRunescapeNumber(int amount)
        {
            if (amount >= 1000)
            {
                return (amount / 1000) + "k";
            }
            else
            {
                return amount + "";
            }
        }
    
        private void updateExperienceGained()
        {
            int index = 0;
            skillsExperienceGained.clear();
            for (Skill data : Skill.values())
            {
                int currentXp = skills.getExperience(data);
                String[] parse = skillsExperienceStart.get(index).split(":");
                int startXp = Integer.parseInt(parse[1]);
                if (currentXp > startXp)
                {
                    int totalXp = currentXp - startXp;
                    skillsExperienceGained.add(capitalize(parse[0]) + " xp: " + getFormattedRunescapeNumber(totalXp) + " (" + getFormattedRunescapeNumber(getExperienceperHour(totalXp)) + "/h)");
                }
                index++;
            }
        }
    
        public int getExperienceperHour(int totalExperienceGained)
        {
            int minutes = (int) ((System.currentTimeMillis() - timeScriptStarted) / 60000);
            int beforeSeconds = 0;
            double multiplier = 1.0;
            if (minutes < 60)
            {
                beforeSeconds = (int) ((System.currentTimeMillis() - timeScriptStarted) / 1000);
                multiplier = 3600.0 / (double) beforeSeconds;
                minutes = 60;
            }
    
            double convert = (double) minutes;
            convert = convert / 60.0;
            return (int) ((totalExperienceGained / convert) * multiplier);
        }
    
        /**
         * Capitalize the first letter and other letters that before it is a space.
         * @param s
         * @return
         */
        public static String capitalize(String s)
        {
            s = s.toLowerCase();
            for (int i = 0; i < s.length(); i++)
            {
                if (i == 0)
                {
                    s = String.format("%s%s", Character.toUpperCase(s.charAt(0)), s.substring(1));
                }
                if (!Character.isLetterOrDigit(s.charAt(i)))
                {
                    if (i + 1 < s.length())
                    {
                        s = String.format("%s%s%s", s.subSequence(0, i + 1), Character.toUpperCase(s.charAt(i + 1)), s.substring(i + 2));
                    }
                }
            }
            return s;
        }
    
        public boolean areaHasPlayers()
        {
            Area area = myPlayer().getArea(10);//create your own area
            int amount = 0;
    
            for (Player player : players.getAll())
            {
                if (player != null && !player.getName().equalsIgnoreCase(myPlayer().getName()))
                {
                    if (area.contains(player))
                    {
                        amount++;
                    }
                }
            }
            return amount > 0;
        }
    
        public void drawMouse(Graphics g)
        {
            ((Graphics2D) g).setRenderingHints(new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON));
    
            Point p = mouse.getPosition();
    
            Graphics2D spinG = (Graphics2D) g.create();
            Graphics2D spinGRev = (Graphics2D) g.create();
    
            spinG.setColor(new Color(255, 255, 255));
            spinGRev.setColor(Color.cyan);
    
            spinG.rotate(System.currentTimeMillis() % 2000d / 2000d * (360d) * 2 * Math.PI / 180.0, p.x, p.y);
            spinGRev.rotate(System.currentTimeMillis() % 2000d / 2000d * (-360d) * 2 * Math.PI / 180.0, p.x, p.y);
    
            final int outerSize = 20;
            final int innerSize = 12;
    
            spinG.setStroke(new BasicStroke(1.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
            spinGRev.setStroke(new BasicStroke(1.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
            spinG.drawArc(p.x - (outerSize / 2), p.y - (outerSize / 2), outerSize, outerSize, 100, 75);
            spinG.drawArc(p.x - (outerSize / 2), p.y - (outerSize / 2), outerSize, outerSize, -100, 75);
            spinGRev.drawArc(p.x - (innerSize / 2), p.y - (innerSize / 2), innerSize, innerSize, 100, 75);
            spinGRev.drawArc(p.x - (innerSize / 2), p.y - (innerSize / 2), innerSize, innerSize, -100, 75);
        }
    
    }

     

     

  3. usually i do not complain, especially about khal scripts (i have bought multiple and enjoy khal scripts very much).

    BUT, i have to complain about this script, in mirror mode it constantly misses like 3-4 plants (i use the lowest ping server and 17 plant mode).

    I think this script needs a rehaul , maybe 16 plant mode and a bit quicker reaction times to not miss the plants.

×
×
  • Create New...