Package org.rsbot.script.randoms

Source Code of org.rsbot.script.randoms.Prison$Balloons

package org.rsbot.script.randoms;

import org.rsbot.script.Random;
import org.rsbot.script.ScriptManifest;
import org.rsbot.script.methods.Bank;
import org.rsbot.script.util.Filter;
import org.rsbot.script.wrappers.RSModel;
import org.rsbot.script.wrappers.RSNPC;
import org.rsbot.script.wrappers.RSObject;
import org.rsbot.script.wrappers.RSTile;

/*
* Written by Iscream(Feb 4, 2010)
* Updated by Iscream(Feb 17, 2010)
* Updated by zzSleepzz(Mar 1, 2010 to remove false positives)
* Updated by Iscream(Apr 15, 2010)
* Updated by Iscream(Apr 23, 2010)
* Updated by NoEffex(Nov 25, 2010 to convert to model checking)
* Updated by Swipe && IronHide (Sept, 8, 2011)
*/
@ScriptManifest(authors = {"Iscream, Swipe"}, name = "PrisonPete", version = 1.6)
public class Prison extends Random {

  private static final int PRISON_MATE = 3118, LEVER_ID = 10817,
      DOOR_KEY = 6966;

  private int unlocked, state = 0;
  private RSNPC balloonToPop;
  private RSNPC PrisonPete;
  private boolean talkedtopete = false;
  private boolean hasKey = false;
  private boolean taskDone = false;

  private static class Balloons {
    static final short[] FAT = {0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,
        2, 2, 3, 3, 4, 4, 5, 6, 6, 7, 7, 2, 2, 8, 8, 5, 5, 9, 9, 10,
        11, 11, 15, 16, 17, 13, 14, 20, 20, 20, 20, 20, 21, 21, 21, 22,
        22, 23, 23, 24, 24, 24, 25, 25, 26, 26, 26, 27, 28, 29, 29, 30,
        30, 31, 32, 33, 33, 36, 36, 36, 36, 36, 37, 37, 37, 38, 38, 39,
        39, 40, 40, 41, 42, 45, 45, 45, 45, 45, 46, 46, 46, 46, 46, 46,
        46, 46, 47, 47, 48, 48, 49, 49, 50, 51, 51, 52, 52, 47, 47, 53,
        53, 50, 50, 54, 54, 55, 22, 22, 59, 60, 61, 57, 58, 64, 64, 64,
        64, 64, 65, 65, 65, 65, 65, 65, 65, 65, 66, 66, 67, 67, 68, 68,
        43, 69, 69, 70, 70, 66, 66, 71, 71, 43, 43, 72, 72, 73, 74, 74,
        78, 79, 80, 76, 77, 83, 83, 83, 83, 83, 84, 84, 84, 85, 85, 86,
        86, 87, 87, 89, 90, 92, 92, 92, 92, 93, 93, 94, 94, 95, 5, 98,
        98, 98, 98, 98, 99, 99, 99, 22, 22, 100, 100, 101, 101, 101,
        102, 102, 103, 103, 103, 104, 105, 106, 106, 107, 107, 108,
        109, 110, 110, 113, 113, 113, 113, 113, 114, 114, 114, 22, 22,
        115, 115, 116, 116, 116, 117, 117, 118, 118, 118, 119, 120,
        121, 121, 122, 122, 123, 124, 125, 125, 128, 128, 128, 128,
        128, 129, 129, 129, 22, 22, 130, 130, 131, 131, 131, 132, 132,
        133, 133, 133, 134, 135, 136, 136, 137, 137, 138, 32, 139, 139};
    static final short[] HORNED = {0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,
        2, 2, 3, 3, 4, 4, 5, 6, 6, 7, 7, 2, 2, 8, 8, 5, 5, 9, 9, 10,
        11, 11, 15, 16, 17, 13, 14, 20, 20, 20, 20, 20, 21, 21, 21, 22,
        22, 23, 23, 24, 24, 24, 25, 25, 26, 26, 26, 27, 28, 29, 29, 30,
        30, 31, 32, 33, 33, 36, 36, 36, 36, 36, 37, 37, 37, 38, 38, 39,
        39, 40, 40, 22, 41, 41, 42, 43, 44, 47, 47, 47, 47, 47, 48, 48,
        48, 48, 48, 48, 48, 48, 49, 49, 50, 50, 51, 51, 52, 53, 53, 54,
        54, 49, 49, 55, 55, 52, 52, 56, 56, 57, 22, 22, 61, 62, 63, 59,
        60, 66, 66, 66, 66, 66, 67, 67, 67, 67, 67, 67, 67, 67, 68, 68,
        69, 69, 70, 70, 43, 71, 71, 72, 72, 68, 68, 73, 73, 43, 43, 74,
        74, 75, 76, 76, 80, 81, 82, 78, 79, 85, 85, 85, 85, 85, 86, 86,
        86, 87, 87, 88, 88, 89, 89, 90, 91, 91, 92, 43, 93, 96, 96, 96,
        96, 97, 97, 98, 98, 99, 5, 102, 102, 102, 102, 102, 102, 103,
        103, 103, 103, 104, 104, 105, 105, 106, 106, 106, 107, 107,
        108, 109, 109, 110, 110, 110, 111, 112, 113, 117, 115, 119,
        119, 119, 119, 119, 119, 120, 120, 120, 120, 121, 121, 122,
        122, 123, 123, 123, 124, 124, 125, 126, 126, 127, 127, 127,
        128, 129, 130, 134, 132, 136, 136, 136, 136, 136, 137, 137,
        137, 22, 22, 138, 138, 139, 139, 139, 140, 140, 141, 141, 141,
        142, 143, 144, 144, 145, 145, 146, 147, 148, 148, 151, 151,
        151, 151, 151, 152, 152, 152, 22, 22, 153, 153, 154, 154, 154,
        155, 155, 156, 156, 156, 157, 158, 159, 159, 160, 160, 161,
        162, 163, 163};
    static final short[] SKINNY_BENT_TAIL = {0, 0, 0, 0, 0, 1, 1, 1, 1, 1,
        1, 1, 1, 2, 2, 3, 3, 4, 4, 5, 6, 6, 7, 7, 2, 2, 8, 8, 5, 5, 9,
        9, 10, 11, 11, 15, 16, 17, 13, 14, 20, 20, 20, 20, 20, 21, 21,
        21, 22, 22, 23, 23, 24, 24, 24, 25, 25, 26, 26, 26, 27, 28, 29,
        29, 30, 30, 31, 32, 33, 33, 36, 36, 36, 36, 36, 37, 37, 37, 38,
        38, 39, 39, 40, 40, 22, 41, 41, 42, 43, 44, 47, 47, 47, 47, 47,
        48, 48, 48, 48, 48, 48, 48, 48, 49, 49, 50, 50, 51, 51, 52, 53,
        53, 54, 54, 49, 49, 55, 55, 52, 52, 56, 56, 57, 22, 22, 61, 62,
        63, 59, 60, 66, 66, 66, 66, 66, 67, 67, 67, 67, 67, 67, 67, 67,
        68, 68, 69, 69, 70, 70, 43, 71, 71, 72, 72, 68, 68, 73, 73, 43,
        43, 74, 74, 75, 76, 76, 80, 81, 82, 78, 79, 85, 85, 85, 85, 85,
        86, 86, 86, 87, 87, 88, 88, 89, 89, 90, 91, 91, 92, 43, 93, 96,
        96, 96, 96, 96, 97, 97, 97, 98, 98, 99, 99, 100, 100, 5, 101,
        101, 102, 103, 104, 107, 107, 107, 107, 107, 108, 108, 108,
        109, 109, 110, 110, 111, 111, 103, 112, 112, 113, 114, 115};
    static final short[] SKINNY_NORMAL_TAIL = {0, 0, 0, 0, 0, 1, 1, 1, 1,
        1, 1, 1, 1, 2, 2, 3, 3, 4, 4, 5, 6, 6, 7, 7, 2, 2, 8, 8, 5, 5,
        9, 9, 10, 11, 11, 15, 16, 17, 13, 14, 20, 20, 20, 20, 20, 21,
        21, 21, 22, 22, 23, 23, 24, 24, 24, 25, 25, 26, 26, 26, 27, 28,
        29, 29, 30, 30, 31, 32, 33, 33, 36, 36, 36, 36, 37, 37, 38, 38,
        39, 22, 42, 42, 42, 42, 42, 43, 43, 43, 43, 43, 43, 43, 43, 44,
        44, 45, 45, 46, 46, 47, 48, 48, 49, 49, 44, 44, 50, 50, 47, 47,
        51, 51, 52, 22, 22, 56, 57, 58, 54, 55, 61, 61, 61, 61, 61, 62,
        62, 62, 62, 62, 62, 62, 62, 63, 63, 64, 64, 65, 65, 38, 66, 66,
        67, 67, 63, 63, 68, 68, 38, 38, 69, 69, 70, 71, 71, 75, 76, 77,
        73, 74, 80, 80, 80, 80, 80, 81, 81, 81, 82, 82, 82, 83, 83, 83,
        84, 84, 5, 85, 85, 86, 86, 87, 87, 88, 89, 89, 90, 90, 92, 93,
        96, 96, 96, 96, 97, 97, 98, 98, 99, 100, 103, 103, 103, 103,
        104, 104, 105, 105, 106, 107};
  }

  @Override
  public boolean activateCondition() {
    if (game.isLoggedIn()) {
      PrisonPete = npcs.getNearest("Prison Pete");
      if (PrisonPete != null) {
        return objects.getNearest(LEVER_ID) != null;
      }
    }
    return false;
  }

  @Override
  public int loop() {
    if (npcs.getNearest("Prison Pete") == null) {
      return -1;
    }
    if (!talkedtopete) {
      camera.setPitch(true);
      if (camera.getAngle() < 175 || camera.getAngle() > 185) {
        camera.setAngle(random(175, 185));
        return random(500, 750);
      }
    }
    switch (state) {
      case 0:
        PrisonPete = npcs.getNearest("Prison Pete");
        if (anInterfaceContains("Lucky you!")) {
          if (interfaces.canContinue()) {
            interfaces.clickContinue();
            sleep(random(150, 325));
          }
          state = 4;
          taskDone = true;
          return random(500, 600);
        }
        if (anInterfaceContains("should leave")) {
          if (interfaces.canContinue()) {
            interfaces.clickContinue();
          }
          state = 4;
          unlocked = 10;
          return random(500, 600);
        }
        if (inventory.getCount(false) == 28
            && !inventory.containsAll(DOOR_KEY)) {
          log("Not enough space for this random. Depositing an Item");
          final RSObject depo = objects.getNearest(32924);
          if (depo != null) {
            if (!calc.tileOnScreen(depo.getLocation())) {
              if (!walking.walkTileMM(depo.getLocation().randomize(2,
                  2))) {
                walking.getPath(depo.getLocation().randomize(2, 2))
                    .traverse();
                return random(500, 700);
              }
              return random(700, 1500);
            }
            camera.turnTo(depo, 20);
            if (depo.interact("Deposit")) {
              sleep(random(1600, 2000));
              if (getMyPlayer().isMoving()) {
                sleep(random(200, 500));
              }
              if (interfaces.get(Bank.INTERFACE_DEPOSIT_BOX)
                  .isValid()) {
                sleep(random(700, 1200));
                interfaces.get(11).getComponent(17)
                    .getComponent(random(16, 17))
                    .interact("All");
                sleep(random(700, 1200));
                interfaces.getComponent(11, 15).doClick();
              }
              return random(400, 500);
            }
            return random(500, 800);
          }
          return random(500, 600);
        }

        if (getMyPlayer().isMoving()) {
          return random(250, 500);
        }
        if (anInterfaceContains("minute")) {
          talkedtopete = true;
          if (interfaces.canContinue()) {
            interfaces.clickContinue();
            return random(500, 600);
          }
          return random(500, 600);
        }

        if (interfaces.get(228).isValid()
            && interfaces.get(228).containsText("How do")) {
          interfaces.get(228).getComponent(3).doClick();
          return random(500, 600);
        }
        if (interfaces.canContinue()) {
          interfaces.clickContinue();
          return random(1000, 1200);
        }
        if (!talkedtopete && PrisonPete != null
            && !interfaces.get(228).isValid()
            && !interfaces.canContinue()) {
          if (!calc.tileOnScreen(PrisonPete.getLocation())) {
            walking.walkTileMM(PrisonPete.getLocation());
            return random(1000, 1400);
          }
          if (PrisonPete.interact("talk")) {
            return random(1500, 1600);
          } else {
            camera.turnTo(PrisonPete.getLocation());
            return random(500, 600);
          }
        }
        if (unlocked == 3) {
          state = 4;
          return random(250, 500);
        }
        if (unlocked <= 2 && talkedtopete) {
          state = 1;
          return random(500, 600);
        }
        return random(350, 400);

      case 1:
        // Figures out the balloon
        if (anInterfaceContains("Lucky you!")) {
          if (interfaces.canContinue()) {
            interfaces.clickContinue();
          }
          state = 4;
          taskDone = true;
          return random(500, 600);
        }
        if (anInterfaceContains("should leave")) {
          if (interfaces.canContinue()) {
            interfaces.clickContinue();
          }
          state = 4;
          unlocked = 10;
          return random(500, 600);
        }
        if (interfaces.get(273).getComponent(3).isValid()) {
          if (atLever()) {
            if (balloonToPop != null
                && interfaces.get(273).getComponent(4)
                .interact("Close")) {
              state = 2;
              return random(800, 900);
            }
            return random(500, 700);
          }
        }
        final RSObject lever = objects.getNearest(LEVER_ID);
        if (lever != null && talkedtopete) {
          if (!calc.tileOnScreen(lever.getLocation())) {
            walking.walkTileMM(lever.getLocation());
            return random(1000, 1200);
          }
          if (!getMyPlayer().isMoving()
              && calc.tileOnScreen(lever.getLocation())) {
            // if (tiles.doAction(lever.getLocation(), 0.5, 0.5, 170,
            // "Pull")) {
            if (lever.interact("Pull")) {
              sleep(random(1400, 1600));
              if (atLever()) {
                if (balloonToPop != null
                    && interfaces.get(273).getComponent(4)
                    .interact("Close")) {
                  state = 2;
                  return random(800, 900);
                }
                return random(500, 700);
              }
              return random(500, 600);
            } else {
              camera.turnTo(lever.getLocation());
              return random(500, 600);
            }
          }
        }
        if (!talkedtopete) {
          state = 0;
          return random(500, 600);
        }
        return random(500, 600);
      case 2:
        // Finds animal and pops it
        if (anInterfaceContains("Lucky you!")) {
          if (interfaces.canContinue()) {
            interfaces.clickContinue();
          }
          state = 4;
          taskDone = true;
          return random(500, 600);
        }
        if (anInterfaceContains("should leave")) {
          if (interfaces.canContinue()) {
            interfaces.clickContinue();
          }
          state = 4;
          unlocked = 10;
          return random(500, 600);
        }
        if (getMyPlayer().isMoving()) {
          return random(250, 500);
        }
        if (balloonToPop == null && unlocked <= 2) {
          state = 1;
          return random(500, 700);
        }
        if (unlocked == 3) {
          state = 4;
        }

        if (!inventory.containsAll(DOOR_KEY)) {
          if (calc.tileOnScreen(balloonToPop.getLocation())) {
            balloonToPop.interact("Pop");
            return random(1200, 1800);
          } else {
            if (!getMyPlayer().isMoving()) {
              walking.walkTileMM(balloonToPop.getLocation()
                  .randomize(2, 2));
              return random(500, 750);
            }
            return random(500, 750);
          }
        }
        if (inventory.contains(DOOR_KEY)) {
          hasKey = false;
          state = 3;
          return random(500, 700);
        }
        return random(350, 400);

      case 3:
        // Goes to pete
        PrisonPete = npcs.getNearest("Prison Pete");
        if (getMyPlayer().isMoving()) {
          return random(250, 500);
        }
        if (anInterfaceContains("Lucky you!")) {
          if (interfaces.canContinue()) {
            interfaces.clickContinue();
          }
          state = 4;
          taskDone = true;
          return random(500, 600);
        }
        if (anInterfaceContains("should leave")) {
          if (interfaces.canContinue()) {
            interfaces.clickContinue();
          }
          state = 4;
          unlocked = 10;
          return random(500, 600);
        }
        if (anInterfaceContains("you got all the keys")) {
          hasKey = true;
          unlocked = 5;
          state = 4;
          balloonToPop = null;
          if (interfaces.canContinue()) {
            interfaces.clickContinue();
            return random(500, 600);
          }
          return random(250, 500);
        }
        if (anInterfaceContains("Hooray")) {
          hasKey = true;
          if (interfaces.canContinue()) {
            interfaces.clickContinue();
            return random(500, 600);
          }
        }
        if (interfaces.canContinue()) {
          interfaces.clickContinue();
          return random(500, 600);
        }
        if (PrisonPete != null && !calc.tileOnScreen(PrisonPete.getLocation())
            && !interfaces.get(243).isValid()) {
          walking.walkTileMM(PrisonPete.getLocation());
          return random(400, 600);
        }
        if (!inventory.contains(DOOR_KEY)
            && npcs.getNearest(PRISON_MATE) != null
            && unlocked <= 2 && hasKey) {
          unlocked++;
          state = 0;
          balloonToPop = null;
          return random(350, 400);
        }

        if (inventory.contains(DOOR_KEY) && !getMyPlayer().isMoving()) {
          inventory.getItem(DOOR_KEY).interact("Return");
          return random(1000, 2000);
        }
        if (!inventory.contains(DOOR_KEY)
            && npcs.getNearest(PRISON_MATE) != null
            && unlocked <= 2 && !hasKey) {
          state = 0;
          balloonToPop = null;
          return random(350, 400);
        }

        return random(350, 400);
      case 4:
        // exits
        final RSTile doorTile = new RSTile(2086, 4459);
        if (unlocked <= 2 && !taskDone) {
          state = 0;
          return random(500, 600);
        }
        if (!calc.tileOnScreen(doorTile)) {
          walking.walkTileMM(doorTile);
          return random(400, 500);
        }
        if (calc.tileOnScreen(doorTile)) {
          final RSObject gate = objects.getNearest(11177, 11178);
          if (gate != null) {
            gate.interact("Open");
          }
          // tiles.doAction(new RSTile(2085, 4459), 1, 0, 30, "Open");
          return random(500, 600);
        }
        return random(200, 400);
    }
    return random(200, 400);
  }

  @Override
  public void onFinish() {
    if (taskDone) {
      log.info("Failed to complete Prison Pete. Stopping now.");
      sleep(5000, 10000);
      stopScript(false);
    }
    unlocked = state = 0;
    balloonToPop = null;
    PrisonPete = null;
    talkedtopete = false;
    hasKey = false;
    taskDone = false;
  }

  short[] setItemIDs(final int b2p) {
    // sets the proper balloon id
    switch (b2p) {
      case 10749: // skinny bend at end of tail
        return Balloons.SKINNY_BENT_TAIL;
      case 10750: // long tail, no bend at end of tail
        return Balloons.SKINNY_NORMAL_TAIL;
      case 10751: // fatty
        return Balloons.FAT;
      case 10752: // horny
        return Balloons.HORNED;
    }
    return new short[]{};
  }

  boolean anInterfaceContains(final String s) {
    return (interfaces.getAllContaining(s).length > 0);
  }

  boolean atLever() {
    if (interfaces.get(273).getComponent(3).isValid()) {
      final Filter<RSModel> filter = RSModel
          .newVertexFilter(setItemIDs(interfaces.get(273)
              .getComponent(3).getModelID()));
      balloonToPop = npcs.getNearest(new Filter<RSNPC>() {
        public boolean accept(final RSNPC n) {
          return filter.accept(n.getModel());
        }
      });
      if (balloonToPop != null) {
        return true;
      }
    }
    return false;
  }

}
TOP

Related Classes of org.rsbot.script.randoms.Prison$Balloons

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.