/** * A script for Maging npcs. * Start script near the npc to be maged. *

* Required Parameter: * -s,--spell * -i,--id *

* * @Author Chomp */ public class AA_SpellCaster extends AA_Script { private static final long CAST_DELAY = 1200L; // +- based on latency private static final int MAXIMUM_FATIGUE = 100; private double initialMagicXp; private long startTime; private long castTimeout; private Spell spell; private int npcId; private int startX; private int startY; private boolean idle; public AA_SpellCaster(final Extension ex) { super(ex); } @Override public void init(final String parameters) { if (parameters.isEmpty()) printInstructions(); final String[] args = parameters.split(" "); for (int i = 0; i < args.length; i++) { switch (args[i].toLowerCase()) { case "-s": case "--spell": spell = Spell.valueOf(args[++i].toUpperCase()); break; case "-i": case "--id": npcId = Integer.parseInt(args[++i]); break; default: throw new IllegalArgumentException("Error: malformed parameters. Try again ..."); } } if (!hasInventoryItem(ITEM_ID_SLEEPING_BAG)) { throw new IllegalStateException("Sleeping bag missing from inventory."); } startX = getPlayerX(); startY = getPlayerY(); initialMagicXp = getSkillExperience(Skill.MAGIC.getIndex()); startTime = System.currentTimeMillis(); } @Override public int main() { if (idle) { if (getPlayerX() == startX && getPlayerY() == startY) { final Coordinate coordinate = getWalkableCoordinate(); if (coordinate != null) { walkTo(coordinate.getX(), coordinate.getY()); return SLEEP_ONE_TICK; } } idle = false; } if (getPlayerX() != startX || getPlayerY() != startY) { walkTo(startX, startY); return SLEEP_ONE_TICK; } if (getFatiguePercent() >= MAXIMUM_FATIGUE) { return sleep(); } if (System.currentTimeMillis() <= castTimeout) { return 0; } final Object npc = getNearestNpc(npcId, false, false); if (npc == null) { return 0; } bot.displayMessage("@cya@Casting ..."); castOnNpc(spell.getId(), npc); castTimeout = System.currentTimeMillis() + SLEEP_TWO_SECONDS; return 0; } @Override public void onServerMessage(final String message) { if (message.endsWith("successfully")) { castTimeout = System.currentTimeMillis() + CAST_DELAY; } else if (message.startsWith("reagents", 23)) { exit("Out of runes."); } else if (message.endsWith("spell")) { castTimeout = 0L; } else if (message.endsWith("seconds")) { castTimeout = System.currentTimeMillis() + TIMEOUT_TEN_SECONDS * 2; } else if (message.endsWith("area")) { idle = true; } else { super.onServerMessage(message); } } @Override public void paint() { int y = PAINT_OFFSET_Y; bot.drawString("@yel@Spell Caster", PAINT_OFFSET_X, y, 1, 0); bot.drawString(String.format("@yel@Runtime: @whi@%s", toDuration(startTime)), PAINT_OFFSET_X, y += PAINT_OFFSET_Y_INCREMENT, 1, 0); final double xpGained = getSkillExperience(Skill.MAGIC.getIndex()) - initialMagicXp; bot.drawString(String.format("@red@Spell: @whi@%s", spell), PAINT_OFFSET_X, y += PAINT_OFFSET_Y_INCREMENT * 2, 1, 0); bot.drawString(String.format("@cya@Magic Xp: @whi@%s @cya@(@whi@%s xp@cya@/@whi@hr@cya@)", DECIMAL_FORMAT.format(xpGained), toUnitsPerHour((int) xpGained, startTime)), PAINT_OFFSET_X, y + PAINT_OFFSET_Y_INCREMENT, 1, 0); } public enum Spell { WIND_STRIKE("Wind Strike", 0), WATER_STRIKE("Water Strike", 2), EARTH_STRIKE("Earth Strike", 4), FIRE_STRIKE("Fire Strike", 6), WIND_BOLT("Wind Bolt", 8), WATER_BOLT("Water Bolt", 11), EARTH_BOLT("Earth Bolt", 14), FIRE_BOLT("Fire Bolt", 17), CRUMBLE_UNDEAD("Crumble Undead", 19), WIND_BLAST("Wind Blast", 20), WATER_BLAST("Water Blast", 23), EARTH_BLAST("Earth Blast", 27), FIRE_BLAST("Fire Blast", 32), CLAWS_OF_GUTHIX("Claws of Guthix", 33), SARADOMIN_STRIKE("Saradomin Strike", 34), FLAMES_OF_ZAMORAK("Flames of Zamorak", 35), WIND_WAVE("Wind Wave", 37), WATER_WAVE("Water Wave", 39), EARTH_WAVE("Earth Wave", 43), FIRE_WAVE("Fire Wave", 45); private final String name; private final int id; Spell(final String name, final int id) { this.name = name; this.id = id; } @Override public String toString() { return name; } public String getName() { return name; } public int getId() { return id; } } }