Advertisement
Guest User

Untitled

a guest
Apr 20th, 2018
577
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 14.76 KB | None | 0 0
  1. package zulrah;
  2.  
  3. import api.Equipment;
  4. import api.Prayer;
  5. import api.Prayers;
  6. import api.test;
  7. import com.sun.xml.internal.bind.v2.TODO;
  8. import org.rspeer.runetek.adapter.scene.Npc;
  9. import org.rspeer.runetek.adapter.scene.PathingEntity;
  10. import org.rspeer.runetek.adapter.scene.Pickable;
  11. import org.rspeer.runetek.api.commons.Time;
  12. import org.rspeer.runetek.api.commons.math.Random;
  13. import org.rspeer.runetek.api.component.Interfaces;
  14. import org.rspeer.runetek.api.movement.Movement;
  15. import org.rspeer.runetek.api.movement.position.Position;
  16. import org.rspeer.runetek.api.scene.Npcs;
  17. import org.rspeer.runetek.api.scene.Pickables;
  18. import org.rspeer.runetek.api.scene.Players;
  19. import org.rspeer.runetek.event.listeners.ChatMessageListener;
  20. import org.rspeer.runetek.event.listeners.RenderListener;
  21. import org.rspeer.runetek.event.types.ChatMessageEvent;
  22. import org.rspeer.runetek.event.types.RenderEvent;
  23. import org.rspeer.script.GameAccount;
  24. import org.rspeer.script.Script;
  25. import org.rspeer.script.ScriptMeta;
  26. import org.rspeer.ui.Log;
  27. import zulrah.action.*;
  28. import zulrah.listener.ProjectileEvent;
  29. import zulrah.listener.ProjectileListener;
  30. import zulrah.listener.ZulrahEvent;
  31. import zulrah.listener.ZulrahListener;
  32. import zulrah.phase.Phase;
  33. import zulrah.phase.SnakeType;
  34. import zulrah.phase.Stage;
  35.  
  36. import java.awt.*;
  37. import java.util.ArrayList;
  38. import java.util.List;
  39.  
  40. /**
  41.  * TODO:
  42.  * - [2] prayer disables super fast and gets hit once (range stage) [MED priority]
  43.  * - [3] improve prayer handling in general, gets hit sometimes [LOW priority]
  44.  * - [4] After entering the Zulrah lair, Player doesn't start 'INITIAL' until Player takes damage from
  45.  * cloud (misses 90% of first phase) [HIGH priority]
  46.  * - [5] Player runs through cloud to move to a new tile [LOW priority]
  47.  * - [7] Player doesn't pot until in 'INITIAL' tile (should drink potions before entering lair) [LOW priority]
  48.  * - [9] A couple of phases require Long-range when using a Blowpipe to avoid cloud
  49.  * ( MAGIC_SOUTH_EAST , MAGIC_SOUTH_WEST ), script should be able to switch back to rapid [LOW priority]
  50.  * - [11] dodging on MELEE_WEST IS WRONG (Zulrah line 265, prob a case of switching tiles) [HIGH priority]
  51.  * - [12] CENTER something on phase 3? is wrong? maybe? [LOW priority]
  52.  * - [13] likes to stand in poison sometimes (prob incorrect phase) [MED priority]
  53.  * - [14] the code is a fucking mess because of all the fixes [LOW priority]
  54.  * - [15] stuck if low hp when looting (or not?) [LOW priority]
  55.  * - [16] doesnt detect some jad phases [HIGH priority]
  56.  *
  57.  * ___
  58.  * repair barrows
  59.  *
  60.  */
  61.  
  62. @ScriptMeta(name = "Zulrah", developer = "-", desc = "Kills Zulrah")
  63. public class Zulrah extends Script implements RenderListener, ChatMessageListener {
  64.  
  65.     public static final int PROJECTILE_CLOUD = 1045;
  66.     public static final int PROJECTILE_SPERM = 1047;
  67.     public static final int PROJECTILE_SNAKELING = 1230;
  68.     public static final int PROJECTILE_RANGED = 1044;
  69.     public static final int PROJECTILE_MAGE = 1046;
  70.     public static final int PROJECTILE_TRIDENT = 1040;
  71.     public static final int ZUL_TELEPORT = 12938;
  72.     public static final int AVAS_ACCUMULATOR = 10499;
  73.  
  74.     int ZulrahHP;
  75.  
  76.     public static final List<Integer> lootIds = new ArrayList<>(45);
  77.     private static final List<Integer> previous = new ArrayList<>();
  78.     private static Phase phase = Phase.PHASE_1;
  79.     private static Position origin, dodge;
  80.     public static int projectileType = -1;
  81.     private static boolean changed, walkedOrigin, dead;
  82.     private static ZulrahEvent lastEvent;
  83.     private static long lastRan = -1, lastAttack = -1;
  84.     private static int total;
  85.     private static int kills, deaths;
  86.     private static int castPrice = 0;
  87.     private static boolean logout, charge;
  88.  
  89.     private final ZulrahListener zulrahListener = new ZulrahListener() {
  90.         public void onChange(ZulrahEvent event) {
  91.             if (!dead) {
  92.                 int stage = phase.advance();
  93.                 changed = true;
  94.                 lastEvent = event;
  95.                 System.out.println("Advancing on: " + event.previousId + " -> " + (event.id + "/" + event.npc.getId()));
  96.                 System.out.println(" ^ " + event.previousTile + " -> " + event.tile);
  97.                 System.out.println(" ^ " + (stage - 1) + " -> " + stage);
  98.  
  99.                 SnakeType type = Zulrah.phase().current().getSnakeType();
  100.                 Gear.equip(type);
  101.             }
  102.         }
  103.     };
  104.  
  105.     private final ProjectileListener projectileListener = new ProjectileListener() {
  106.         public void onProjectileLoaded(ProjectileEvent evt) {
  107.             if (evt.id == PROJECTILE_RANGED || evt.id == PROJECTILE_MAGE) {
  108.                 projectileType = evt.id;
  109.             } else if (evt.id == PROJECTILE_TRIDENT) { //TODO also add blowpipe if using
  110.                 total -= castPrice;
  111.             }
  112.         }
  113.     };
  114.  
  115.     private static final String USERNAME = "girdvainisj@gmail.com";
  116.     private static final String PASSWORD = "lalaila123";
  117.  
  118.     @Override
  119.     public void onStart() {
  120.         setAccount(new GameAccount(USERNAME, PASSWORD));
  121.         zulrahListener.start();
  122.         projectileListener.start();
  123.         Gear.setup();
  124.         int chaos = 100;
  125.         int death = 310;
  126.         int scale = 174;
  127.         int fire = 4;
  128.         castPrice = (chaos + death + scale + (fire * 5));
  129.         fullyReset();
  130.         dead = false;
  131.         logout = false;
  132.     }
  133.  
  134.     private static boolean setZulrahPrayers() {
  135.         Log.info("setting prayers");
  136.         Npc zulrah = Zulrah.monster();
  137.         if (zulrah == null) {
  138.             for (Prayer p : Prayers.getActive()) {
  139.                 Prayers.toggle(false, p);
  140.             }
  141.             return true;
  142.         }
  143.         SnakeType type = Zulrah.phase().current().getSnakeType();
  144.         Prayer[] prayers = type.getPrayers();
  145.         if (prayers == null) {
  146.             for (Prayer p : Prayers.getActive()) {
  147.                 Prayers.toggle(false, p);
  148.             }
  149.         } else {
  150.             for (Prayer prayer : prayers) {
  151.                 if (!Prayers.isActive(prayer)) {
  152.                     Prayers.toggle(true, prayer);
  153.                 }
  154.             }
  155.             return Time.sleepUntil(() -> {
  156.                 for (Prayer prayer : prayers) {
  157.                     if (!Prayers.isActive(prayer)) {
  158.                         return false;
  159.                     }
  160.                 }
  161.                 return true;
  162.             }, Random.nextInt(1500));
  163.         }
  164.         return true;
  165.     }
  166.  
  167.     private void handleStats() {
  168.         setZulrahPrayers();
  169.         Potions.drink();
  170.         Gear.equip();
  171.         Food.eat();
  172.     }
  173.  
  174.     private void handleSetup() {
  175.         Camp.act();
  176.         Teleport.handle();
  177.         ClanWars.handle();
  178.     }
  179.  
  180.     private boolean attack(Npc zulrah) {
  181.         PathingEntity target = Players.getLocal().getTarget();
  182.         if (target == null || !target.getName().equals("Zulrah")) {
  183.             if ((lastRan == -1 || System.currentTimeMillis() - lastRan > Random.nextInt(800, 1200)) &&
  184.                     System.currentTimeMillis() - lastAttack > Random.nextInt(300, 350)) {
  185.                 return zulrah.interact("Attack");
  186.             }
  187.         }
  188.         return false;
  189.     }
  190.  
  191.     @Override
  192.     public int loop() {
  193.         if (logout) {
  194.             return 600;
  195.         }
  196.         if (dead) {
  197.             DeathWalk.handle();
  198.             return 600;
  199.         }
  200.         if (charge && origin == null) {
  201.             // check if at camp, Trident.setToggle(true);
  202.             return 600;
  203.         }
  204.         Npc zulrah = monster();
  205.         zulrahListener.setNpc(zulrah);
  206.         if (origin != null) {
  207.             if (!walkedOrigin) {
  208.                 Position initial = Stage.INITIAL.getTile();
  209.                 assert initial != null;
  210.                 Movement.walk(initial);
  211.                 walkedOrigin = initial.distance() < 3;
  212.                 Time.sleep(100, 200);
  213.                 if (!walkedOrigin) {
  214.                     Log.info("idk");
  215.                     return 300;
  216.                 }
  217.             } else {
  218.                 handleStats();
  219.             }
  220.         }
  221.         handleSetup();
  222.         handleDialogs();
  223.         if (zulrah != null) {//fight
  224.             ZulrahHP = 4 * test.getHealth(zulrah);
  225.             if (origin == null) {
  226.                 SnakeType.RANGE.setId(zulrah.getId());
  227.                 SnakeType.MELEE.setId(zulrah.getId() + 1);
  228.                 SnakeType.MAGIC.setId(zulrah.getId() + 2);
  229.                 origin = zulrah.getPosition();
  230.             }
  231.             if (changed) {
  232.                 if (phase.index() > 0) {
  233.                     previous.add(lastEvent.previousId);
  234.                 }
  235.                 if (!phase.isConfirmed()) {
  236.                     Phase potential = Phase.determine(previous, lastEvent.id); //zulrah.id());
  237.                     if (potential != null) {
  238.                         phase = potential;
  239.                         phase.setIndex(previous.size());
  240.                         phase.confirm();
  241.                         System.out.println(phase.name() + " is quite dank (Confirmed)");
  242.                     }
  243.                 }
  244.                 changed = false;
  245.             }
  246.             if (phase != null) {
  247.                 Stage current = phase.current();
  248.                 if (current != null) {
  249.                     if (current.getSnakeType() != SnakeType.MELEE) {
  250.                         lastRan = -1;
  251.                         dodge = null;
  252.                     }
  253.                     Position currentTile = current.getTile();
  254.                     if (currentTile != null && currentTile.equals(Players.getLocal().getPosition())) {
  255.                         if (current.getSnakeType() == SnakeType.MELEE) {
  256.                             int sum = zulrah.getOrientation() + Players.getLocal().getOrientation();
  257.                             if (sum == 1583 || sum == 2048) {
  258.                                 System.out.println("FUCKING RUN MARTY");
  259.                                 if (current == Stage.MELEE_EAST) {
  260.                                     dodge = current.getTile().translate(2, -1);
  261.                                 } else if (current == Stage.MELEE_WEST) {
  262.                                     dodge = current.getTile().translate(0, 2);
  263.                                     //dodge = current.getTile().translate(0, -2);
  264.                                     //TODO fix west dodge
  265.                                 }
  266.                                 for (int i = 0; i < 2; i++) {
  267.                                     Movement.walkTo(dodge);
  268.                                     Time.sleep(100, 200);
  269.                                 }
  270.                                 lastRan = System.currentTimeMillis();
  271.                             }
  272.                         }
  273.                         if (attack(zulrah)) {
  274.                             lastAttack = System.currentTimeMillis();
  275.                         }
  276.                     } else {
  277.                         if (lastRan == -1 || System.currentTimeMillis() - lastRan > Random.nextInt(4200, 4600)) {
  278.                             attack(zulrah);
  279.                             Movement.walkTo(current.getTile());//test
  280.                             Time.sleep(600, 700);
  281.                             handleStats();
  282.                         } else if (current.getSnakeType() == SnakeType.MELEE && dodge != null &&
  283.                                 dodge.distance() < 1D) {
  284.                             attack(zulrah);
  285.                         }
  286.                     }
  287.                 }
  288.             }
  289.         } else {
  290.             if (origin != null && origin.distance() < 10) {
  291.                 Pickable[] items = Pickables.getLoaded();
  292.                 for (Pickable item : items) {
  293.                     if (item.getId() != ZUL_TELEPORT && !lootIds.contains(item.getId())) {
  294.                         lootIds.add(item.getId());
  295.                     }
  296.                     int price = 69; //TODO look up
  297.                     System.out.println(item.getName() + " (" + item.getStackSize() + ") x " + price + " = " + (price * item.getStackSize()));
  298.                     total += (item.getStackSize() * price);
  299.                 }
  300.                 System.out.println("Total kill estimated @ " + total + " gp");
  301.                 kills++;
  302.                 //total -= (Price.lookup(2434) + (Price.lookup(385) * 12)); // subtract roughly 1 pray pot and 12 sharks
  303.                 for (Pickable item : items) {
  304.                     item.interact("Take");
  305.                 }
  306.             } else {
  307.                 fullyReset();
  308.                 // check if lumbridge/falador death spot, check message listener for dead or not, etc.
  309.                 // you need to go to a bank regardless
  310.             }
  311.         }
  312.         Equipment.Slot weapon = Equipment.Slot.WEAPON;
  313.         if (weapon.getItem() != null) {
  314.             String name = weapon.getItem().getName();
  315.             if (name != null) {
  316.                 if (name.toLowerCase().contains("uncharged"))
  317.                     logout = true;
  318.             }
  319.         }
  320.         return 600;
  321.     }
  322.  
  323.     private void handleDialogs() {
  324.         if (Interfaces.canContinue()) {
  325.             Interfaces.processContinue();
  326.             Time.sleep(400, 600);
  327.         }
  328.     }
  329.  
  330.     public void notify(RenderEvent renderEvent) {
  331.         Graphics g = renderEvent.getSource();
  332.         g.drawString("zulrah HP: " + ZulrahHP, 20, 40);
  333.     }
  334.  
  335.     public static List<Integer> previous() {
  336.         return previous;
  337.     }
  338.  
  339.     public static Phase phase() {
  340.         return phase;
  341.     }
  342.  
  343.     public static Position origin() {
  344.         return origin;
  345.     }
  346.  
  347.     public static Npc monster() {
  348.         return Npcs.getNearest("Zulrah");
  349.     }
  350.  
  351.     public static void resetPhase() {
  352.         phase = Phase.PHASE_1;
  353.     }
  354.  
  355.     public static void fullyReset() {
  356.         origin = null;
  357.         walkedOrigin = false;
  358.         dodge = null;
  359.         Potions.reset();
  360.         Phase.reset();
  361.         previous.clear();
  362.         resetPhase();
  363.         for (Prayer p : Prayers.getActive()) {
  364.             Prayers.toggle(false, p);
  365.         }
  366.     }
  367.  
  368.     public int total() {
  369.         return total;
  370.     }
  371.  
  372.     public static boolean isDead() {
  373.         return dead;
  374.     }
  375.  
  376.     public static void setDead(boolean dead) {
  377.         Zulrah.dead = dead;
  378.     }
  379.  
  380.     @Override
  381.     public void notify(ChatMessageEvent chatMessageEvent) {
  382.         if (chatMessageEvent.getMessage() != null) {
  383.             if (chatMessageEvent.getMessage().equals("Oh dear, you are dead!")) {
  384.                 dead = true;
  385.                 deaths++;
  386.             } else if (chatMessageEvent.getMessage().equals("Your weapon has 100 charges left.")) {
  387.                 charge = true;
  388.             }
  389.         }
  390.     }
  391.  
  392.     public static int kills() {
  393.         return kills;
  394.     }
  395.  
  396.     public static int deaths() {
  397.         return deaths;
  398.     }
  399. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement