Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package zulrah;
- import api.Equipment;
- import api.Prayer;
- import api.Prayers;
- import api.test;
- import com.sun.xml.internal.bind.v2.TODO;
- import org.rspeer.runetek.adapter.scene.Npc;
- import org.rspeer.runetek.adapter.scene.PathingEntity;
- import org.rspeer.runetek.adapter.scene.Pickable;
- import org.rspeer.runetek.api.commons.Time;
- import org.rspeer.runetek.api.commons.math.Random;
- import org.rspeer.runetek.api.component.Interfaces;
- import org.rspeer.runetek.api.movement.Movement;
- import org.rspeer.runetek.api.movement.position.Position;
- import org.rspeer.runetek.api.scene.Npcs;
- import org.rspeer.runetek.api.scene.Pickables;
- import org.rspeer.runetek.api.scene.Players;
- import org.rspeer.runetek.event.listeners.ChatMessageListener;
- import org.rspeer.runetek.event.listeners.RenderListener;
- import org.rspeer.runetek.event.types.ChatMessageEvent;
- import org.rspeer.runetek.event.types.RenderEvent;
- import org.rspeer.script.GameAccount;
- import org.rspeer.script.Script;
- import org.rspeer.script.ScriptMeta;
- import org.rspeer.ui.Log;
- import zulrah.action.*;
- import zulrah.listener.ProjectileEvent;
- import zulrah.listener.ProjectileListener;
- import zulrah.listener.ZulrahEvent;
- import zulrah.listener.ZulrahListener;
- import zulrah.phase.Phase;
- import zulrah.phase.SnakeType;
- import zulrah.phase.Stage;
- import java.awt.*;
- import java.util.ArrayList;
- import java.util.List;
- /**
- * TODO:
- * - [2] prayer disables super fast and gets hit once (range stage) [MED priority]
- * - [3] improve prayer handling in general, gets hit sometimes [LOW priority]
- * - [4] After entering the Zulrah lair, Player doesn't start 'INITIAL' until Player takes damage from
- * cloud (misses 90% of first phase) [HIGH priority]
- * - [5] Player runs through cloud to move to a new tile [LOW priority]
- * - [7] Player doesn't pot until in 'INITIAL' tile (should drink potions before entering lair) [LOW priority]
- * - [9] A couple of phases require Long-range when using a Blowpipe to avoid cloud
- * ( MAGIC_SOUTH_EAST , MAGIC_SOUTH_WEST ), script should be able to switch back to rapid [LOW priority]
- * - [11] dodging on MELEE_WEST IS WRONG (Zulrah line 265, prob a case of switching tiles) [HIGH priority]
- * - [12] CENTER something on phase 3? is wrong? maybe? [LOW priority]
- * - [13] likes to stand in poison sometimes (prob incorrect phase) [MED priority]
- * - [14] the code is a fucking mess because of all the fixes [LOW priority]
- * - [15] stuck if low hp when looting (or not?) [LOW priority]
- * - [16] doesnt detect some jad phases [HIGH priority]
- *
- * ___
- * repair barrows
- *
- */
- @ScriptMeta(name = "Zulrah", developer = "-", desc = "Kills Zulrah")
- public class Zulrah extends Script implements RenderListener, ChatMessageListener {
- public static final int PROJECTILE_CLOUD = 1045;
- public static final int PROJECTILE_SPERM = 1047;
- public static final int PROJECTILE_SNAKELING = 1230;
- public static final int PROJECTILE_RANGED = 1044;
- public static final int PROJECTILE_MAGE = 1046;
- public static final int PROJECTILE_TRIDENT = 1040;
- public static final int ZUL_TELEPORT = 12938;
- public static final int AVAS_ACCUMULATOR = 10499;
- int ZulrahHP;
- public static final List<Integer> lootIds = new ArrayList<>(45);
- private static final List<Integer> previous = new ArrayList<>();
- private static Phase phase = Phase.PHASE_1;
- private static Position origin, dodge;
- public static int projectileType = -1;
- private static boolean changed, walkedOrigin, dead;
- private static ZulrahEvent lastEvent;
- private static long lastRan = -1, lastAttack = -1;
- private static int total;
- private static int kills, deaths;
- private static int castPrice = 0;
- private static boolean logout, charge;
- private final ZulrahListener zulrahListener = new ZulrahListener() {
- public void onChange(ZulrahEvent event) {
- if (!dead) {
- int stage = phase.advance();
- changed = true;
- lastEvent = event;
- System.out.println("Advancing on: " + event.previousId + " -> " + (event.id + "/" + event.npc.getId()));
- System.out.println(" ^ " + event.previousTile + " -> " + event.tile);
- System.out.println(" ^ " + (stage - 1) + " -> " + stage);
- SnakeType type = Zulrah.phase().current().getSnakeType();
- Gear.equip(type);
- }
- }
- };
- private final ProjectileListener projectileListener = new ProjectileListener() {
- public void onProjectileLoaded(ProjectileEvent evt) {
- if (evt.id == PROJECTILE_RANGED || evt.id == PROJECTILE_MAGE) {
- projectileType = evt.id;
- } else if (evt.id == PROJECTILE_TRIDENT) { //TODO also add blowpipe if using
- total -= castPrice;
- }
- }
- };
- private static final String USERNAME = "girdvainisj@gmail.com";
- private static final String PASSWORD = "lalaila123";
- @Override
- public void onStart() {
- setAccount(new GameAccount(USERNAME, PASSWORD));
- zulrahListener.start();
- projectileListener.start();
- Gear.setup();
- int chaos = 100;
- int death = 310;
- int scale = 174;
- int fire = 4;
- castPrice = (chaos + death + scale + (fire * 5));
- fullyReset();
- dead = false;
- logout = false;
- }
- private static boolean setZulrahPrayers() {
- Log.info("setting prayers");
- Npc zulrah = Zulrah.monster();
- if (zulrah == null) {
- for (Prayer p : Prayers.getActive()) {
- Prayers.toggle(false, p);
- }
- return true;
- }
- SnakeType type = Zulrah.phase().current().getSnakeType();
- Prayer[] prayers = type.getPrayers();
- if (prayers == null) {
- for (Prayer p : Prayers.getActive()) {
- Prayers.toggle(false, p);
- }
- } else {
- for (Prayer prayer : prayers) {
- if (!Prayers.isActive(prayer)) {
- Prayers.toggle(true, prayer);
- }
- }
- return Time.sleepUntil(() -> {
- for (Prayer prayer : prayers) {
- if (!Prayers.isActive(prayer)) {
- return false;
- }
- }
- return true;
- }, Random.nextInt(1500));
- }
- return true;
- }
- private void handleStats() {
- setZulrahPrayers();
- Potions.drink();
- Gear.equip();
- Food.eat();
- }
- private void handleSetup() {
- Camp.act();
- Teleport.handle();
- ClanWars.handle();
- }
- private boolean attack(Npc zulrah) {
- PathingEntity target = Players.getLocal().getTarget();
- if (target == null || !target.getName().equals("Zulrah")) {
- if ((lastRan == -1 || System.currentTimeMillis() - lastRan > Random.nextInt(800, 1200)) &&
- System.currentTimeMillis() - lastAttack > Random.nextInt(300, 350)) {
- return zulrah.interact("Attack");
- }
- }
- return false;
- }
- @Override
- public int loop() {
- if (logout) {
- return 600;
- }
- if (dead) {
- DeathWalk.handle();
- return 600;
- }
- if (charge && origin == null) {
- // check if at camp, Trident.setToggle(true);
- return 600;
- }
- Npc zulrah = monster();
- zulrahListener.setNpc(zulrah);
- if (origin != null) {
- if (!walkedOrigin) {
- Position initial = Stage.INITIAL.getTile();
- assert initial != null;
- Movement.walk(initial);
- walkedOrigin = initial.distance() < 3;
- Time.sleep(100, 200);
- if (!walkedOrigin) {
- Log.info("idk");
- return 300;
- }
- } else {
- handleStats();
- }
- }
- handleSetup();
- handleDialogs();
- if (zulrah != null) {//fight
- ZulrahHP = 4 * test.getHealth(zulrah);
- if (origin == null) {
- SnakeType.RANGE.setId(zulrah.getId());
- SnakeType.MELEE.setId(zulrah.getId() + 1);
- SnakeType.MAGIC.setId(zulrah.getId() + 2);
- origin = zulrah.getPosition();
- }
- if (changed) {
- if (phase.index() > 0) {
- previous.add(lastEvent.previousId);
- }
- if (!phase.isConfirmed()) {
- Phase potential = Phase.determine(previous, lastEvent.id); //zulrah.id());
- if (potential != null) {
- phase = potential;
- phase.setIndex(previous.size());
- phase.confirm();
- System.out.println(phase.name() + " is quite dank (Confirmed)");
- }
- }
- changed = false;
- }
- if (phase != null) {
- Stage current = phase.current();
- if (current != null) {
- if (current.getSnakeType() != SnakeType.MELEE) {
- lastRan = -1;
- dodge = null;
- }
- Position currentTile = current.getTile();
- if (currentTile != null && currentTile.equals(Players.getLocal().getPosition())) {
- if (current.getSnakeType() == SnakeType.MELEE) {
- int sum = zulrah.getOrientation() + Players.getLocal().getOrientation();
- if (sum == 1583 || sum == 2048) {
- System.out.println("FUCKING RUN MARTY");
- if (current == Stage.MELEE_EAST) {
- dodge = current.getTile().translate(2, -1);
- } else if (current == Stage.MELEE_WEST) {
- dodge = current.getTile().translate(0, 2);
- //dodge = current.getTile().translate(0, -2);
- //TODO fix west dodge
- }
- for (int i = 0; i < 2; i++) {
- Movement.walkTo(dodge);
- Time.sleep(100, 200);
- }
- lastRan = System.currentTimeMillis();
- }
- }
- if (attack(zulrah)) {
- lastAttack = System.currentTimeMillis();
- }
- } else {
- if (lastRan == -1 || System.currentTimeMillis() - lastRan > Random.nextInt(4200, 4600)) {
- attack(zulrah);
- Movement.walkTo(current.getTile());//test
- Time.sleep(600, 700);
- handleStats();
- } else if (current.getSnakeType() == SnakeType.MELEE && dodge != null &&
- dodge.distance() < 1D) {
- attack(zulrah);
- }
- }
- }
- }
- } else {
- if (origin != null && origin.distance() < 10) {
- Pickable[] items = Pickables.getLoaded();
- for (Pickable item : items) {
- if (item.getId() != ZUL_TELEPORT && !lootIds.contains(item.getId())) {
- lootIds.add(item.getId());
- }
- int price = 69; //TODO look up
- System.out.println(item.getName() + " (" + item.getStackSize() + ") x " + price + " = " + (price * item.getStackSize()));
- total += (item.getStackSize() * price);
- }
- System.out.println("Total kill estimated @ " + total + " gp");
- kills++;
- //total -= (Price.lookup(2434) + (Price.lookup(385) * 12)); // subtract roughly 1 pray pot and 12 sharks
- for (Pickable item : items) {
- item.interact("Take");
- }
- } else {
- fullyReset();
- // check if lumbridge/falador death spot, check message listener for dead or not, etc.
- // you need to go to a bank regardless
- }
- }
- Equipment.Slot weapon = Equipment.Slot.WEAPON;
- if (weapon.getItem() != null) {
- String name = weapon.getItem().getName();
- if (name != null) {
- if (name.toLowerCase().contains("uncharged"))
- logout = true;
- }
- }
- return 600;
- }
- private void handleDialogs() {
- if (Interfaces.canContinue()) {
- Interfaces.processContinue();
- Time.sleep(400, 600);
- }
- }
- public void notify(RenderEvent renderEvent) {
- Graphics g = renderEvent.getSource();
- g.drawString("zulrah HP: " + ZulrahHP, 20, 40);
- }
- public static List<Integer> previous() {
- return previous;
- }
- public static Phase phase() {
- return phase;
- }
- public static Position origin() {
- return origin;
- }
- public static Npc monster() {
- return Npcs.getNearest("Zulrah");
- }
- public static void resetPhase() {
- phase = Phase.PHASE_1;
- }
- public static void fullyReset() {
- origin = null;
- walkedOrigin = false;
- dodge = null;
- Potions.reset();
- Phase.reset();
- previous.clear();
- resetPhase();
- for (Prayer p : Prayers.getActive()) {
- Prayers.toggle(false, p);
- }
- }
- public int total() {
- return total;
- }
- public static boolean isDead() {
- return dead;
- }
- public static void setDead(boolean dead) {
- Zulrah.dead = dead;
- }
- @Override
- public void notify(ChatMessageEvent chatMessageEvent) {
- if (chatMessageEvent.getMessage() != null) {
- if (chatMessageEvent.getMessage().equals("Oh dear, you are dead!")) {
- dead = true;
- deaths++;
- } else if (chatMessageEvent.getMessage().equals("Your weapon has 100 charges left.")) {
- charge = true;
- }
- }
- }
- public static int kills() {
- return kills;
- }
- public static int deaths() {
- return deaths;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement