Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.awt.BasicStroke;
- import java.awt.Color;
- import java.awt.Graphics;
- import java.awt.Graphics2D;
- import java.awt.Point;
- import java.awt.Polygon;
- import java.awt.Rectangle;
- import java.awt.RenderingHints;
- import java.awt.event.MouseEvent;
- import java.awt.event.MouseListener;
- import java.awt.geom.AffineTransform;
- import java.awt.geom.Area;
- import java.awt.geom.Rectangle2D;
- import javax.swing.JOptionPane;
- import org.rsbot.event.listeners.PaintListener;
- import org.rsbot.script.Script;
- import org.rsbot.script.ScriptManifest;
- import org.rsbot.script.methods.Environment;
- import org.rsbot.script.methods.Equipment;
- import org.rsbot.script.methods.Game;
- import org.rsbot.script.methods.Interfaces;
- import org.rsbot.script.methods.Game.Tab;
- import org.rsbot.script.util.Filter;
- import org.rsbot.script.wrappers.RSComponent;
- import org.rsbot.script.wrappers.RSInterface;
- import org.rsbot.script.wrappers.RSItem;
- import org.rsbot.script.wrappers.RSNPC;
- import org.rsbot.script.wrappers.RSTile;
- @ScriptManifest(authors = { "Equinox_" }, name = "Equinox TT Assist", version = 1.2, description="Shows the anwser to Treasure Trail clues and solves ppuzzle boxes")
- public class EquinoxTTAssist extends Script implements PaintListener,
- MouseListener {
- static final int[] UNDERGROUND_OBJECTS = { 31130, 41536, 15494 };
- Clue clue = new Clue();
- long flashTime = 0;
- boolean flashState = true;
- boolean show = true;
- int solvePuzzle = 0;
- Rectangle toggle = new Rectangle(250, 7, 250, 25);
- @Override
- public boolean onStart() {
- env.setUserInput(Environment.INPUT_KEYBOARD | Environment.INPUT_MOUSE);
- env.disableRandom("InterfaceCloser");
- return true;
- }
- public String stripPunct(String src) {
- while (src.contains(" "))
- src = src.replace(" ", "");
- while (src.contains("!"))
- src = src.replace("!", "");
- while (src.contains("?"))
- src = src.replace("?", "");
- while (src.contains("."))
- src = src.replace(".", "");
- while (src.contains(","))
- src = src.replace(",", "");
- while (src.contains(";"))
- src = src.replace(";", "");
- while (src.contains("'"))
- src = src.replace("'", "");
- return src;
- }
- Coordinate lCoord;
- @Override
- public int loop() {
- clue.update();
- if (clue.coord != null && clue.coord != lCoord) {
- if (!inventoryCacheContainsAll(2576, 2574, 2575, 952))
- log.severe("You must have a sextant, watch, spade, and charts to solve this clue!");
- }
- lCoord = clue.coord;
- if (clue.puzzleBox != null) {
- if (solvePuzzle == 0)
- solvePuzzle = JOptionPane.showOptionDialog(null,
- "Would you like the bot to solve this puzzle?",
- "Equinox_ Puzzle Solver", JOptionPane.YES_NO_OPTION,
- JOptionPane.QUESTION_MESSAGE, null, null, 0) == JOptionPane.YES_OPTION ? 2
- : 1;
- if (solvePuzzle == 2) {
- env.setUserInput(Environment.INPUT_KEYBOARD);
- clue.puzzleBox.doStep(interfaces);
- }
- } else {
- solvePuzzle = 0;
- env.setUserInput(Environment.INPUT_KEYBOARD
- | Environment.INPUT_MOUSE);
- }
- return 1000;
- }
- public boolean inventoryCacheContainsAll(int... itemIDS) {
- RSItem[] items = inventory.getItems(true);
- if (items != null) {
- outer: for (int id : itemIDS) {
- for (RSItem i : items)
- if (i.getID() == id)
- continue outer;
- return false;
- }
- return true;
- }
- return false;
- }
- public int getZ() {
- if (objects.getNearest(UNDERGROUND_OBJECTS) != null)
- return -1;
- else
- return game.getPlane();
- }
- public void paintStringInBox(Graphics2D g, Rectangle rect, String str,
- int xOff, int yOff) {
- Rectangle2D strBounds = g.getFont().getStringBounds(str,
- g.getFontRenderContext());
- g.drawString(
- str,
- (int) (rect.x + (rect.width / 2) - (strBounds.getWidth() / 2))
- + xOff,
- (int) (rect.y + (rect.height / 2) + (strBounds.getHeight() / 2))
- + yOff);
- }
- int height = 0;
- @Override
- public void onRepaint(Graphics render) {
- Graphics2D g = (Graphics2D) render;
- g.setColor(new Color(0f, 0f, 0f, show ? 0.75f : 0.5f));
- g.fill3DRect(toggle.x, toggle.y, toggle.width, toggle.height, show);
- render.setColor(Color.WHITE);
- paintStringInBox(g, toggle, (show ? "Hide" : "Show")
- + " clue information", 0, 0);
- if (clue.hasClue() && clue.puzzleBox == null) {
- RSTile npcLoc = clue.getNPC() != null ? clue.getNPC().getLocation()
- : null;
- boolean missing = clue.getDest().length == 0
- || (clue.getDest()[0].getX() == 0 && clue.getDest()[0]
- .getY() == 0);
- if (npcLoc != null) {
- drawArrowAt(g, npcLoc, Color.BLUE, Color.RED);
- if (calc.tileOnScreen(npcLoc))
- drawArrowOver(g, npcLoc, Color.BLUE, Color.RED);
- } else {
- for (RSTile t : clue.getDest())
- if (t.getZ() == getZ())
- if (t.getX() != 0 || t.getY() != 0) {
- drawArrowAt(g, t, Color.BLUE, Color.RED);
- if (calc.tileOnScreen(t)) {
- drawArrowOver(g, t, Color.BLUE, Color.RED);
- }
- }
- }
- if (show) {
- g.setColor(new Color(0f, 0f, 0f, 0.5f));
- g.fill3DRect(0, 32, 500, height, true);
- g.setColor(Color.WHITE);
- int y = 37;
- if (clue.getDesc() != null && clue.getDesc().length() > 0)
- y += paintStringAtPoint(g, new Point(0, y), clue.getDesc(),
- 500) + 5;
- if (clue.getSolution() != null
- && clue.getSolution().length() > 0)
- y += paintStringAtPoint(g, new Point(0, y),
- clue.getSolution(), 500) + 15;
- if (missing)
- if (clue.getName() != null) {
- y += paintStringAtPoint(
- g,
- new Point(0, y),
- "We are missing a tile for: "
- + clue.getName()
- + " please get the tile and report it on the main thread.",
- 500) + 5;
- y += paintStringAtPoint(g, new Point(0, y),
- "Current location: "
- + getMyPlayer().getLocation()
- .toString(), 500) + 5;
- }
- if (clue.coord != null && clue.coord.wizard != null)
- y += paintStringAtPoint(g, new Point(0, y),
- clue.coord.wizard.name(), 500) + 5;
- if (clue.emote != null)
- y += paintStringAtPoint(g, new Point(0, y),
- clue.emote.hasDoubleAgent() ? "Has double agent"
- : "No double agent", 500) + 5;
- if (clue.getChallenge() != null)
- y += paintStringAtPoint(g, new Point(0, y),
- "Challenge Answer: " + clue.getChallenge(), 500) + 5;
- height = y - 42;
- }
- } else if (clue.puzzleBox != null) {
- clue.puzzleBox.paintPuzzle(g, interfaces);
- }
- }
- public int paintStringAtPoint(Graphics2D g, Point p, String str,
- int maxWidth) {
- Rectangle2D strBounds = g.getFont().getStringBounds(str,
- g.getFontRenderContext());
- if (strBounds.getWidth() > maxWidth) {
- String[] words = str.split(" ");
- int ySetOff = 0;
- int lastWordIndex = 0;
- for (int i = 0; i < words.length; i++) {
- String thisLine = "";
- for (int i2 = lastWordIndex; i2 <= i; i2++)
- thisLine += " " + words[i2];
- thisLine = thisLine.substring(1);
- if (g.getFont()
- .getStringBounds(thisLine, g.getFontRenderContext())
- .getWidth() > maxWidth) {
- String newLine = "";
- for (int i2 = lastWordIndex; i2 < i; i2++)
- newLine += " " + words[i2];
- newLine = newLine.substring(1);
- strBounds = g.getFont().getStringBounds(newLine,
- g.getFontRenderContext());
- lastWordIndex = i;
- g.drawString(newLine, (int) (p.x),
- (int) (p.y + strBounds.getHeight() + ySetOff));
- ySetOff += Math.round(strBounds.getHeight());
- } else if (i == words.length - 1) {
- String newLine = "";
- for (int i2 = lastWordIndex; i2 <= i; i2++)
- newLine += " " + words[i2];
- newLine = newLine.substring(1);
- strBounds = g.getFont().getStringBounds(newLine,
- g.getFontRenderContext());
- lastWordIndex = i;
- g.drawString(newLine, (int) (p.x),
- (int) (p.y + strBounds.getHeight() + ySetOff));
- }
- }
- return ySetOff + 15;
- } else {
- g.drawString(str, (int) (p.x),
- (int) (p.y + (strBounds.getHeight() / 2)));
- return (int) strBounds.getHeight();
- }
- }
- public class Clue {
- public Map map;
- public Cryptic cryptic;
- public Anagram anagram;
- public Emote emote;
- public Coordinate coord;
- public SimpleClue simple;
- public PuzzleBox puzzleBox;
- public ChallengeScroll challengeScroll;
- public boolean hasClue() {
- return map != null || cryptic != null || anagram != null
- || emote != null || coord != null || simple != null;
- }
- public boolean update() {
- String nClueText = getClueText();
- puzzleBox = getPuzzleBox();
- challengeScroll = getChallengeScroll();
- if (nClueText != "") {
- map = null;
- cryptic = getCryptic(nClueText);
- anagram = getAnagram(nClueText);
- emote = getEmote(nClueText);
- coord = getCoordinate(nClueText);
- simple = getSimpleClue(nClueText);
- return true;
- } else {
- Map m = getMap();
- if (m != null) {
- map = m;
- cryptic = null;
- emote = null;
- coord = null;
- anagram = null;
- simple = null;
- return true;
- }
- }
- if (puzzleBox != null)
- return true;
- return false;
- }
- public ChallengeScroll getChallengeScroll() {
- String data = "";
- for (RSComponent c : interfaces.get(345).getComponents())
- if (c.getText() != null)
- data += c.getText();
- data = stripPunct(data).toLowerCase();
- for (ChallengeScroll c : ChallengeScroll.values()) {
- if (stripPunct(c.desc).toLowerCase().contains(data)
- || data.contains(stripPunct(c.desc).toLowerCase()))
- return c;
- }
- return null;
- }
- public PuzzleBox getPuzzleBox() {
- for (PuzzleBox p : PuzzleBox.values())
- if (p.validate(interfaces))
- return p;
- return null;
- }
- public Map getMap() {
- for (Map m : Map.values())
- if (m.validate(interfaces))
- return m;
- return null;
- }
- public String getChallenge() {
- if (cryptic != null)
- return cryptic.challengeAns;
- else if (anagram != null)
- return anagram.challengeAns;
- return null;
- }
- public String getDesc() {
- if (emote != null)
- return emote.desc;
- else if (cryptic != null)
- return cryptic.desc;
- else if (coord != null)
- return coord.desc;
- else if (anagram != null)
- return anagram.description;
- else if (simple != null)
- return simple.desc;
- return "";
- }
- public String getSolution() {
- if (emote != null)
- return emote.solu;
- else if (cryptic != null)
- return cryptic.solution;
- else if (coord != null)
- return coord.solution;
- else if (anagram != null)
- return anagram.solution;
- else if (simple != null)
- return simple.solution;
- else if (map != null)
- return map.solution;
- return "";
- }
- public String getName() {
- if (emote != null)
- return emote.name();
- else if (cryptic != null)
- return cryptic.name();
- else if (coord != null)
- return coord.name();
- else if (anagram != null)
- return anagram.name();
- else if (map != null)
- return map.name();
- else if (simple != null)
- return simple.name();
- return "";
- }
- public RSTile[] getDest() {
- if (emote != null)
- return emote.loc;
- else if (cryptic != null)
- return cryptic.rsTiles;
- else if (coord != null)
- return coord.rsTiles;
- else if (anagram != null)
- return anagram.area;
- else if (map != null)
- return new RSTile[] { map.dest };
- else if (simple != null)
- return simple.tiles;
- return null;
- }
- public RSNPC getNPC() {
- if (cryptic != null && cryptic.npcName != null) {
- if (cryptic.npc)
- return getNPCByName(cryptic.npcName);
- } else if (simple != null && simple.npcObj != null) {
- if (simple.npc)
- return getNPCByName(simple.npcObj);
- } else if (anagram != null && anagram.npcName != null)
- return getNPCByName(anagram.npcName);
- return null;
- }
- public SimpleClue getSimpleClue(String find) {
- find = stripPunct(find.toLowerCase());
- for (SimpleClue clu : SimpleClue.values()) {
- String desc = stripPunct(clu.desc.toLowerCase());
- if (desc.contains(find))
- return clu;
- }
- return null;
- }
- public Anagram getAnagram(String find) {
- find = stripPunct(find.toLowerCase());
- for (Anagram clu : Anagram.values()) {
- String desc = stripPunct(clu.description.toLowerCase());
- if (find.contains(desc))
- return clu;
- }
- return null;
- }
- public Cryptic getCryptic(String find) {
- find = stripPunct(find.toLowerCase());
- for (Cryptic clu : Cryptic.values()) {
- String desc = stripPunct(clu.desc.toLowerCase());
- if (desc.contains(find))
- return clu;
- }
- return null;
- }
- public Emote getEmote(String find) {
- find = stripPunct(find.toLowerCase());
- for (Emote clu : Emote.values()) {
- String desc = stripPunct(clu.desc.toLowerCase());
- if (desc.contains(find))
- return clu;
- }
- return null;
- }
- public Coordinate getCoordinate(String find) {
- find = stripPunct(find.toLowerCase());
- for (Coordinate clu : Coordinate.values()) {
- String desc = stripPunct(clu.desc.toLowerCase());
- if (desc.contains(find))
- return clu;
- }
- return null;
- }
- }
- public RSNPC getNPCByName(final String name) {
- return npcs.getNearest(new Filter<RSNPC>() {
- @Override
- public boolean accept(RSNPC t) {
- return t.getName() != null
- && t.getName().toLowerCase()
- .contains(name.toLowerCase());
- }
- });
- }
- /*
- * public RSObject getObjectByName(final String name, final RSTile orgin) {
- * return objects.getNearest(new Filter<RSObject>() {
- *
- * @Override public boolean accept(RSObject t) { return t.getName(t) != null
- * && t.getName(t).toLowerCase() .contains(name.toLowerCase()) &&
- * calc.distanceBetween(orgin, t.getLocation()) < 2; } }); }
- */
- public Polygon getScreenPolygon(final RSTile t) {
- if (t != null) {
- Polygon poly = new Polygon();
- Point pt = calc.tileToScreen(t, 0, 0, 0);
- poly.addPoint(pt.x, pt.y);
- pt = calc.tileToScreen(t, 0, 1, 0);
- poly.addPoint(pt.x, pt.y);
- pt = calc.tileToScreen(t, 1, 1, 0);
- poly.addPoint(pt.x, pt.y);
- pt = calc.tileToScreen(t, 1, 0, 0);
- poly.addPoint(pt.x, pt.y);
- for (int i = 0; i < poly.npoints; i++)
- if (poly.xpoints[i] < 0 || poly.ypoints[i] < 0)
- return null;
- return poly;
- }
- return null;
- }
- public String getClueText() {
- RSInterface inter = interfaces.get(345);
- String clue = "";
- if (inter != null && inter.isValid())
- for (RSComponent c : inter.getComponents())
- if (c != null && c.isValid()) {
- String text = c.getText();
- if (text != null && text.length() > 0)
- clue += text;
- }
- return clue;
- }
- public void drawArrowAt(Graphics2D g, RSTile tile, Color fg, Color bg) {
- Point point, leg;
- point = calc.tileToMinimap(getTileOnVector(tile, 15));
- if (!calc.tileOnMap(tile)) {
- leg = calc.tileToMinimap(getMyPlayer().getLocation());
- } else {
- leg = new Point(point.x, point.y - 50);
- }
- if (flashTime < System.currentTimeMillis()) {
- flashState = !flashState;
- flashTime = System.currentTimeMillis() + 500;
- }
- if (flashState)
- drawArrow(g, leg, point, fg, bg, 5);
- if (!calc.tileOnMap(tile)) {
- Graphics g2 = g.create();
- g2.setColor(Color.WHITE);
- paintStringAtPoint((Graphics2D) g,
- calc.tileToMinimap(getTileOnVector(tile, 10)),
- "" + calc.distanceTo(tile), 1000);
- }
- }
- public void drawArrowOver(Graphics2D g, final RSTile tile, Color fg,
- Color bg) {
- if (calc.tileOnScreen(tile)) {
- int height = 0;
- RSNPC npc = npcs.getNearest(new Filter<RSNPC>() {
- @Override
- public boolean accept(RSNPC t) {
- return t.getLocation().equals(tile);
- }
- });
- if (npc != null)
- height += npc.getHeight();
- Point point = calc.tileToScreen(tile, height);
- if (flashTime < System.currentTimeMillis()) {
- flashState = !flashState;
- flashTime = System.currentTimeMillis() + 500;
- }
- if (flashState)
- drawArrow(g, new Point(point.x, point.y - 50), point, fg, bg, 7);
- }
- }
- public void drawArrow(Graphics2D g2d, Point p1, Point p2, Color fg,
- Color bg, int size) {
- AffineTransform tx = new AffineTransform();
- Polygon arrow = new Polygon();
- arrow.addPoint(0, size);
- arrow.addPoint(-size, -size);
- arrow.addPoint(-size / 2, -size);
- arrow.addPoint(-size / 2, -3 * size);
- arrow.addPoint(size / 2, -3 * size);
- arrow.addPoint(size / 2, -size);
- arrow.addPoint(size, -size);
- tx.setToIdentity();
- double angle = Math.atan2(p2.y - p1.y, p2.x - p1.x);
- tx.translate(p2.x, p2.y);
- tx.rotate((angle - Math.PI / 2d));
- Graphics2D g = (Graphics2D) g2d.create();
- g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
- RenderingHints.VALUE_ANTIALIAS_ON);
- g.setTransform(tx);
- g.setColor(bg);
- g.fill(arrow);
- g.setColor(fg);
- g.setStroke(new BasicStroke(Math.max(size / 4f, 1)));
- g.draw(arrow);
- g.dispose();
- }
- public RSTile getTileOnVector(RSTile base, int distTo) {
- if (calc.tileOnMap(base))
- return base;
- RSTile me = getMyPlayer().getLocation();
- int deltaX = base.getX() - me.getX();
- int deltaY = base.getY() - me.getY();
- double dist = calc.distanceBetween(base, me);
- double eX = deltaX / dist, eY = deltaY / dist;
- return new RSTile(me.getX() + (int) (eX * distTo), me.getY()
- + (int) (eY * distTo));
- }
- public enum Wizard {
- None, Saradomin, Guthix, Zamorak
- }
- public enum Anagram {
- ANAGRAM_1(
- "A Bas",
- "Speak to Saba in a cave near Burthorpe, north of the Warriors' Guild",
- "Saba", "None", new RSTile(2859, 3577, 0)), ANAGRAM_2(
- "A Zen She",
- "Speak to Zenesha in the Platebody shop on the Southern edge of Ardougne centre square",
- "Zenesha", "Puzzle Box", new RSTile(2657, 3293)), ANAGRAM_3(
- "Ace Match Elm",
- "Speak to Cam The Camel just outside the gates of the Duel Arena, Camulet not required",
- "Cam The Camel", "Puzzle Box", new RSTile(3298, 3230)), ANAGRAM_4(
- "Aha Jar", "Speak to Jaraah in the hospital of the Duel Arena",
- "Jaraah", "None", new RSTile(3361, 3275)), ANAGRAM_5(
- "An Paint Tonic",
- "Speak to Captain Ninto in the bar under White Wolf Mountain",
- "Captain Ninto", "Puzzle Box", new RSTile(2819, 3484, 0),
- new RSTile(2865, 9873, -1)), ANAGRAM_6(
- "Arc O Line",
- "Speak to Caroline in North Witchaven next to the row boat. After Sea Slug Quest is found wandering the coast. After finishing Kennith's Concerns quest, Caroline may be found upstairs in her house.",
- "Caroline", "11", new RSTile(2708, 3282, 0), new RSTile(2708,
- 3282, 1)), ANAGRAM_7(
- "Are Col",
- "Speak to the Oracle on the peak of Ice Mountain, West of Edgeville",
- "Oracle", "48", new RSTile(3010, 3500)), ANAGRAM_8(
- "Arr! So I am a crust, and?",
- "Speak to Ramara du Croissant in the forge of the Piscatoris Fishing Colony",
- "Ramara du Croissant", "Puzzle box", new RSTile(2340, 3677)), ANAGRAM_9(
- "Bail Trims",
- "Speak to Brimstail in the cave West of the South bank in Gnome Stronghold",
- "Brimtail", "None", new RSTile(2402, 3419)), ANAGRAM_10(
- "By Look",
- "Speak to Bolkoy in the Tree Gnome Village general store",
- "Bolkoy", "13", new RSTile(2526, 3162)), ANAGRAM_11(
- "C on game hoc",
- "Speak to the Gnome Coach walking around outside the Gnome Ball course, West of the Grand Tree",
- "Gnome Coach", "6", new RSTile(2396, 3488)), ANAGRAM_12(
- "Citric Cellar",
- "Speak to Heckel Funch on the first floor of the Grand Tree to the East",
- "Heckel Funch", "Puzzle box", new RSTile(2467, 3494, 0),
- new RSTile(2492, 3488, 1)), ANAGRAM_13("Dt Run B",
- "Speak to Brundt in the longhall in the centre of Rellekka",
- "Brundt", "4", new RSTile(2658, 3667)), ANAGRAM_14(
- "Eek Zero Op",
- "Speak to the Zookeeper in the Ardougne Zoo",
- "Zookeeper",
- "40, +1 if Eagles Peak is completed,+1 if Hunt if Red Raktuber is completed",
- new RSTile(0, 0)), ANAGRAM_15("El Ow",
- "Speak to Lowe in the Varrock archery store", "Lowe", "None",
- new RSTile(0, 0)), ANAGRAM_16("Err Cure It",
- "Speak to the Recruiter in West Ardougne centre square",
- "Recruiter", "20", new RSTile(2663, 3304)), ANAGRAM_17(
- "Goblin Kern",
- "Speak to King Bolren in the Tree Gnome Village, next to the Spirit Tree",
- "King Bolren", "None", new RSTile(0, 0)), ANAGRAM_18(
- "Got A Boy",
- "Speak to Gabooty in the center of Tai Bwo Wannai", "Gabooty",
- "11", new RSTile(0, 0)), ANAGRAM_19(
- "Gulag Run",
- "Speak to Uglug Nar to the west of Jiggig, just South of the Castle Wars lobby",
- "Uglug Nar", "Puzzle box", new RSTile(0, 0)), ANAGRAM_20(
- "Halt Us",
- "Speak to Luthas, the owner of the banana plantation on Musa Point (Karamja.)",
- "Luthas", "33 (or None)", new RSTile(0, 0)), ANAGRAM_21(
- "He Do Pose. It Is Cultrrl, Mk?",
- "Speak to Riki the sculptor's model in the east side of Keldagrim, south of the kebab seller.",
- "Riki", "Puzzle box", new RSTile(0, 0)), ANAGRAM_22("Icy Fe",
- "Speak to Fycie in Rantz's cave, South-east of Gu'Tanoth",
- "Fycie", "None", new RSTile(0, 0)), ANAGRAM_23(
- "I Eat Its Chart Hints Do U",
- "Speak to Shiratti the Custodian north of the fountain in Nardah",
- "Shiratti the Custodian", "Puzzle box", new RSTile(3426, 2925)), ANAGRAM_24(
- "I Faffy Run",
- "Speak to Fairy Nuff. Before A Fairy Tale Part II she can be found just north of the bank in Zanaris. Between A Fairy Tale Part II and A Fairy Tale Part III, however, players must get the certificate from the potion shelf (located in the room north of the fairy bank) and use the fairy rings in this order \"AIR\", \"DLR\", \"DJQ\", \"AJS\". After A Fairy Tale Part III she can be found just North of the bank again.",
- "Fairy Nuff", "Puzzle box", new RSTile(0, 0)), ANAGRAM_25(
- "Land Doomd",
- "Speak to the Odd Old Man in the Limestone mine between Varrock and Paterdomus",
- "Odd Old Man", "Puzzle Box", new RSTile(0, 0)), ANAGRAM_26(
- "Lark In Dog",
- "Speak to King Roald on the ground floor of Varrock castle",
- "King Roald", "24", new RSTile(0, 0)), ANAGRAM_27(
- "Me Am The Calc",
- "Speak to Cam the Camel just outside the gates of the Duel Arena, Camulet not required",
- "Cam the Camel", "Puzzle box", new RSTile(3298, 3230)), ANAGRAM_28(
- "Me if",
- "Speak to Femi just outside the gates of Tree Gnome Stronghold",
- "Femi", "None", new RSTile(0, 0)), ANAGRAM_29(
- "Nod med",
- "Speak to Edmond behind the most northwestern house in East Ardougne",
- "Edmond", "3", new RSTile(0, 0)), ANAGRAM_30(
- "O Birdz A Zany En Pc",
- "Speak to Cap'n Izzy no Beard at The Agility Arena entrance in Brimhaven",
- "Cap'n Izzy", "33", new RSTile(0, 0)), ANAGRAM_31("Ok Co",
- "Speak to the Cook on the Ground floor of Lumbridge Castle",
- "Cook", "9", new RSTile(0, 0)), ANAGRAM_32(
- "Or Zinc Fumes Ward",
- "Speak to Wizard Frumscone downstairs in the Mage Guild (need 66 magic to enter, can use stat boosting potions/brews)",
- "Wizard Frumscone", "Puzzle box", new RSTile(2589, 9488, -1),
- new RSTile(2594, 3085, 0)), ANAGRAM_33("Peaty Pert",
- "Speak to Party Pete in the Falador Party Room", "Party Pete",
- "None", new RSTile(0, 0)), ANAGRAM_34(
- "Profs Lose Wrong Pie",
- "Speak to Professor Onglewip in the Wizards Tower south of Draynor",
- "Professor Onglewip", "Puzzle box", new RSTile(0, 0)), ANAGRAM_35(
- "R Ak Mi",
- "Speak to Karim in the Al Kharid Kebab shop just south of the furnace",
- "Karim", "5", new RSTile(0, 0)), ANAGRAM_36(
- "Sequin Dirge",
- "Speak to Queen Sigrid on the second floor of the Etceteria castle, after Blood Runs Deep quest she is in Miscellania throne room",
- "Queen Sigrid", "Puzzle box", new RSTile(0, 0, 0), new RSTile(
- 0, 0, 1)), ANAGRAM_37("Snah",
- "Speak to Hans in the Lumbridge Castle courtyard", "Hans",
- "None", new RSTile(0, 0)), ANAGRAM_38(
- "Them Call Came",
- "Speak to Cam the Camel just outside the gates of the Duel Arena, Camulet not required",
- "Cam the Camel", "Puzzle box", new RSTile(3298, 3230)), ANAGRAM_39(
- "RED ART TANS",
- "Speak to Trader Stan at the Port Sarim Charter ship",
- "Trader Stan", "Puzzle Box", new RSTile(3037, 3194));
- String description;
- RSTile[] area;
- String challengeAns = "";
- String solution;
- String npcName;
- private Anagram(String desc, String solution, String npc,
- String challengeAns, RSTile... areas) {
- this.description = desc;
- this.area = areas;
- this.solution = solution;
- this.npcName = npc;
- this.challengeAns = challengeAns;
- }
- }
- public enum Coordinate {
- COORDS_1(
- "00 degrees 00 minutes north, 07 degrees 13 minutes west",
- "In Tirannwn, by the western spawn point of the roving elves, near the Tyras Camp. Watch out for the stick trap.",
- Wizard.Saradomin, new RSTile(2208, 3161)), COORDS_2(
- "00 degrees 05 minutes south, 01 degrees 13 minutes east",
- "West of the Tree Gnome Village , almost directly south of the fruit tree patch. On the other side of the river from the observatory.",
- Wizard.None, new RSTile(0, 0)), COORDS_3(
- "00 degrees 13 minutes south, 13 degrees 58 minutes east",
- "On Karamja, west of the general store in the free-to-play section of the island, in the middle of the two small lakes.",
- Wizard.None, new RSTile(0, 0)), COORDS_4(
- "00 degrees 18 minutes south, 09 degrees 28 minutes east",
- "South of Brimhaven at the gold mine near the entrance to the Brimhaven Dungeon. Dig 1 space south of the gold rock in front of the dungeon door.",
- Wizard.None, new RSTile(0, 0)), COORDS_5(
- "00 degrees 20 minutes south, 23 degrees 15 minutes east",
- "The southern area of Lumbridge Swamp, south of the water altar. Just next to the tree roots.",
- Wizard.None, new RSTile(0, 0)), COORDS_6(
- "00 degrees 30 minutes north, 24 degrees 16 minutes east",
- "Slightly north-east of the small hut in Lumbridge Swamp that leads to Zanaris. Zandar Horfyre at the top of the Dark Wizards' Tower offers free transportation to this area.",
- Wizard.None, new RSTile(0, 0)), COORDS_7(
- "00 degrees 31 minutes south, 17 degrees 43 minutes east",
- "South of Port Sarim, just south of the ladder to the Asgarnian Ice Dungeon, on the edge of the cliff.",
- Wizard.None, new RSTile(0, 0)), COORDS_8(
- "01 degrees 18 minutes south, 14 degrees 15 minutes east",
- "Across the water from Musa Point, on the western seaweed spawn next to the river. Tiadeche from the Tai Bwo Wannai Trio quest can be found to the east. Use Fairy Ring code DKP or the Gnome glider transport to Karamja.",
- Wizard.None, new RSTile(0, 0)), COORDS_9(
- "01 degrees 24 minutes north, 08 degrees 05 minutes west",
- "Directly north of the catapult used in Regicide",
- Wizard.Saradomin, new RSTile(2181, 3206)), COORDS_10(
- "01 degrees 26 minutes north, 08 degrees 01 minutes east",
- "In the centre of Moss Giant Island. The island can be found by swinging on the rope swings west of Brimhaven.",
- Wizard.None, new RSTile(0, 0)), COORDS_11(
- "01 degrees 35 minutes south, 07 degrees 28 minutes east",
- "The Green Spider Island east of Yanille. Use Fairy ring code CLS. Dig between a boulder, a leafy tree, and a creeping plant.",
- Wizard.None, new RSTile(0, 0)), COORDS_12(
- "02 degrees 46 minutes north, 29 degrees 11 minutes east",
- "Duel Arena in obstacle combat area. You will need to duel another player with obstacles turned on to get to this spot. Make sure you have empty space in your inventory in case you receive your reward during this clue.",
- Wizard.None, new RSTile(3375, 3250)), COORDS_13(
- "02 degrees 48 minutes north, 22 degrees 30 minutes east",
- "Just west of the ladder leading to the HAM Dungeon, dig a space east of the nearest tree to the building.",
- Wizard.None, new RSTile(0, 0)), COORDS_14(
- "02 degrees 50 minutes north, 06 degrees 20 minutes east",
- "South of Ardougne Zoo, on a small cape.", Wizard.None,
- new RSTile(0, 0)), COORDS_15(
- "03 degrees 35 minutes south, 13 degrees 35 minutes east",
- "On Karamja, north-east of the nature altar.", Wizard.None,
- new RSTile(0, 0)), COORDS_16(
- "03 degrees 45 minutes south, 22 degrees 45 minutes east",
- "In the Bedabin camp, at the north side of the watering hole. Be sure to bring Waterskins, as this area is affected by Desert heat.",
- Wizard.Saradomin, new RSTile(3168, 3041)), COORDS_17(
- "04 degrees 00 minutes south, 12 degrees 46 minutes east",
- "In the centre of the mine, north of Shilo Village (not the gem rock mine, but rather the one just north-west of the Nature altar).",
- Wizard.None, new RSTile(0, 0)), COORDS_18(
- "04 degrees 03 minutes south, 03 degrees 11 minutes east",
- "In the Ogre City. You must have started the Watchtower quest to gain access. This point is after crossing the fourth bridge. Twenty coins will be needed to pay an ogre guard if you haven't already done so.",
- Wizard.Saradomin, new RSTile(2543, 3031)), COORDS_19(
- "04 degrees 05 minutes south, 04 degrees 24 minutes east",
- "From castle wars, go south past Jiggig and then east around Gu'Tanoth, until you see a cave. Enter this cave and you will end up south-east of Yanille, on the island where the ogre Gorad lives. Dig on the east side of the island, near one of the spear walls. Another faster way to get to the dungeon is by using the Gnome Glider to get to Feldip Hills if you have finished One Small Favour.",
- Wizard.Saradomin, new RSTile(2580, 3029)), COORDS_20(
- "04 degrees 13 minutes north, 12 degrees 45 minutes east",
- "North side of Crandor. Requires completion of Dragon Slayer.",
- Wizard.None, new RSTile(0, 0)), COORDS_21(
- "04 degrees 16 minutes south, 16 degrees 16 minutes east",
- "Outside the east wall of the Ship yard building where G.L.O. Caranock hangs out, dig directly by the window. You need to have started or finished The Grand Tree to access this area.",
- Wizard.Saradomin, new RSTile(2961, 3024)), COORDS_22(
- "04 degrees 41 minutes north, 03 degrees 09 minutes west",
- "By one of the Red spiders' eggs spawns in Arandar Pass. You'll have to at least start the quest 'Regicide' to access the area.",
- Wizard.Saradomin, new RSTile(2340, 3312)), COORDS_23(
- "05 degrees 20 minutes south, 04 degrees 28 minutes east",
- "In the Feldip Hills. Northeast of the Glider. Dig at the eastern end of an iron rock mine, between two \"rockslides\".",
- Wizard.None, new RSTile(0, 0)), COORDS_24(
- "05 degrees 37 minutes north, 31 degrees 15 minutes east",
- "In Mort Myre swamps, over Nature Spirit's grotto, dig to the north of the grotto tree. Druid pouches are recommended, because ghasts may rot your food. Note: There is currently a glitch where the special move of the Meerkats familiar will not prevent the Saradomin Wizard from appearing.",
- Wizard.Saradomin, new RSTile(3439, 3342)), COORDS_25(
- "05 degrees 43 minutes north, 23 degrees 05 minutes east",
- "In the cow pasture, directly across the River Lum from the Champions' Guild bush farming patch.",
- Wizard.None, new RSTile(0, 0)), COORDS_26(
- "05 degrees 50 minutes south, 10 degrees 05 minutes east",
- "On Cairn Isle, Karamja, (Fairy Ring - CKR is very close) dig in the centre of the hut with the broken walls.",
- Wizard.Saradomin, new RSTile(0, 0)), COORDS_27(
- "06 degrees 00 minutes south, 21 degrees 48 minutes east",
- "West of the Bandit Camp (Kharidian Desert), where the coast looks like a nose. Dig at the tip of the \"nose\". Bring Waterskins, as this area is affected by desert heat.",
- Wizard.Saradomin, new RSTile(3138, 2969)), COORDS_28(
- "06 degrees 11 minutes south, 15 degrees 07 minutes east",
- "On the eastern half of southern Karamja (probably best to take gnome glider there and travel west), just north of some stepping stones across a waterfall. Dig in the brown patch of ground near the Jogres.",
- Wizard.Saradomin, new RSTile(2924, 2964)), COORDS_30(
- "06 degrees 31 minutes north, 01 degrees 46 minutes west",
- "Travel south-west from the Tree Gnome Stronghold and you should see three small lakes. Dig in the middle of the two eastern lakes.",
- Wizard.None, new RSTile(0, 0)), COORDS_31(
- "07 degrees 05 minutes north, 30 degrees 56 minutes east",
- "In Mort Myre Swamp. Next lake south of the 2 most western fishing spots. Dig west of a rotting tree.",
- Wizard.None, new RSTile(0, 0)), COORDS_32(
- "07 degrees 33 minutes north, 15 degrees 00 minutes east",
- "South east of Taverley, on the peninsula where the The Lady of the Lake resides. Dig on the south-west part of the peninsula.",
- Wizard.None, new RSTile(0, 0)), COORDS_33(
- "07 degrees 43 minutes south, 12 degrees 26 minutes east",
- "In the middle of the Kharazi Jungle, right below the pond south of Shilo Village. Remember to bring a hatchet and a machete to cut through the jungle. You must have at least started the Legends Quest in order to gain access to the area.",
- Wizard.Saradomin, new RSTile(0, 0)), COORDS_34(
- "08 degrees 03 minutes north, 31 degrees 16 minutes east",
- "South-west of BKR fairy ring (more precisely West by Southwest) and slightly north-east of the fishing spot (the one just south-west of the words Morytania on the map), in the centre of Mort Myre swamp. Dig between the farthest east and middle logs. Warning: Bring druid pouches to prevent Ghasts from rotting your food.",
- Wizard.Saradomin, new RSTile(0, 0)), COORDS_35(
- "08 degrees 05 minutes south, 15 degrees 56 minutes east",
- "In the south-west part of the Herblore Habitat area. A quick way of getting to the Herblore Habitat Area is to buy special teleports from Bettamax in the centre of Taverley for 2000gp.",
- Wizard.Saradomin, new RSTile(2950, 2902)), COORDS_36(
- "08 degrees 26 minutes south, 10 degrees 28 minutes east",
- "In the south-west corner of the Kharazi Jungle on Karamja. Dig north of a skeletal corpse. You need to have at least started Legends' Quest to access the area.",
- Wizard.Saradomin, new RSTile(2775, 2890)), COORDS_37(
- "08 degrees 33 minutes north, 01 degrees 39 minutes west",
- "At Tree Gnome Stronghold, in the south-west section you'll find a bridge, and a pen containing Terrorbirds. Open the gate by them and go to the edge of the river as far east as you can and dig there.",
- Wizard.None, new RSTile(0, 0)), COORDS_38(
- "09 degrees 33 minutes north, 02 degrees 15 minutes east",
- "You must have at least begun the Waterfall quest to get here. Go to the Baxtorian falls, board the log raft, use a rope with the rock to get to the second island with the tree and dig in the centre of that island.",
- Wizard.None, new RSTile(0, 0)), COORDS_39(
- "09 degrees 48 minutes north, 17 degrees 39 minutes east",
- "On Ice Mountain, south of the oracle, in an area where there are Icefiends.",
- Wizard.None, new RSTile(0, 0)), COORDS_40(
- "11 degrees 03 minutes north, 31 degrees 20 minutes east",
- "East of the fence opening to the Slayer Tower grounds.",
- Wizard.None, new RSTile(0, 0)), COORDS_41(
- "11 degrees 05 minutes north, 00 degrees 45 minutes west",
- "In the Tree Gnome Stronghold swamp, west of the Grand Tree.",
- Wizard.None, new RSTile(0, 0)), COORDS_42(
- "11 degrees 41 minutes north, 14 degrees 58 minutes east",
- "In the fenced in area, outside of the bar in Burthorpe.",
- Wizard.None, new RSTile(0, 0)), COORDS_43(
- "12 degrees 48 minutes north, 20 degrees 20 minutes east",
- "Three squares east of the ladder which gives you access to the Air Obelisk in level 7 wilderness. Can only be accessed via the Edgeville Dungeon.",
- Wizard.Zamorak, new RSTile(0, 0)), COORDS_44(
- "13 degrees 46 minutes north, 21 degrees 01 minutes east",
- "Just outside the south-west corner of Stealing Creation in level 11 wilderness. There are 3 small mushrooms and lots of trees, dig in the centre of the mushrooms.",
- Wizard.Zamorak, new RSTile(0, 0)), COORDS_45(
- "14 degrees 54 minutes north, 9 degrees 13 minutes east",
- "Two steps west of the Enchanted lyre swaying tree which is east of Rellekka",
- Wizard.None, new RSTile(0, 0)), COORDS_46(
- "5 degrees 48 minutes north, 13 degrees 52 minutes east",
- "Just south-west of entrance to Eadger's cave. By the Trollheim teleport.",
- Wizard.Saradomin, new RSTile(0, 0)), COORDS_47(
- "16 degrees 20 minutes north, 12 degrees 45 minutes east",
- "In front of the entrance to the Troll cave in Trollheim.",
- Wizard.Saradomin, new RSTile(2849, 3685)), COORDS_48(
- "16 degrees 35 minutes north, 27 degrees 01 minutes east",
- "Just east of the clan wars area, located at level 22 wilderness.",
- Wizard.Zamorak, new RSTile(3305, 3692)), COORDS_49(
- "16 degrees 43 minutes north, 19 degrees 13 minutes east",
- "At the Bandit Camp in the level 23 Wilderness, dig south of the most northern lake in the northern-east corner, near the Giant rats.",
- Wizard.Zamorak, new RSTile(0, 0)), COORDS_50(
- "17 degrees 50 minutes north, 08 degrees 30 minutes east",
- "North east of Rellekka by the rock crabs. North west of DKS fairy ring. Dig a bit east of the pier, on one of the seaweed spawns.",
- Wizard.Saradomin, new RSTile(2712, 3732)), COORDS_51(
- "18 degrees 3 minutes north, 25 degrees 16 minutes east",
- "Level 28 wilderness, in the far east building of the Ruins north of the Graveyard of Shadows. Dig on or near the steel platelegs spawn.",
- Wizard.Zamorak, new RSTile(0, 0)), COORDS_52(
- "18 degrees 22 minutes north, 16 degrees 33 minutes east",
- "Level 29 wilderness just North-west from Bandit Camp, in the south-west section of the Forgotten Cemetery. Dig directly south of one of the graves.",
- Wizard.Zamorak, new RSTile(0, 0)), COORDS_53(
- "19 degrees 43 minutes north, 25 degrees 07 minutes east",
- "Level 34 wilderness just a little south-east of the Southern side of Red Dragon Isle by some Chaos Dwarves, you should see 4 large cave like objects. Dig almost directly in the centre of them. This place is easily accessible via the canoe system, just keep heading east from your point of arrival. Warning: This area is multicombat.",
- Wizard.Zamorak, new RSTile(0, 0)), COORDS_54(
- "20 degrees 05 minutes north, 21 degrees 52 minutes east",
- "In level 36 wilderness, just north of a small lake by some moss giants. This can be difficult because of the nearby moss giants and skeletons. The wilderness canoe exit is a quick way to get here. If you start just west of the westernmost tip of the lake, walk 9 paces north and dig.",
- Wizard.Zamorak, new RSTile(0, 0)), COORDS_55(
- "degrees 7 minutes north, 18 degrees 33 minutes east",
- "In level 36 wilderness, just beneath the lava maze, 3 paces west of the eastern most set of iron rocks in the hobgoblin mine. Dig just west of a cluster of 8 iron rocks.",
- Wizard.Zamorak, new RSTile(0, 0)), COORDS_56(
- "20 degrees 33 minutes north, 15 degrees 48 minutes east",
- "Level 38 wilderness, the very west side where there is a Chaos Temple. Dig outside the building, just to the south of the altar.",
- Wizard.Zamorak, new RSTile(0, 0)), COORDS_57(
- "1 degrees 24 minutes north, 17 degrees 54 minutes east",
- "Level 41 wilderness, in with the lesser demons, west of the lava maze in the wilderness, about 3 steps west & 3 steps south of the ladder to the King black dragon. Do not enter the Lava Maze for this clue.",
- Wizard.Zamorak, new RSTile(0, 0)), COORDS_58(
- "22 degrees 30 minutes north, 03 degrees 01 minutes east",
- "At the end of the path leading to the northern houses in Miscellania. Use fairy ring code CIP.",
- Wizard.None, new RSTile(0, 0)), COORDS_59(
- "22 degrees 35 minutes north, 19 degrees 18 minutes east",
- "Between the two western rune rocks north of the lava maze, in level 46 wilderness.",
- Wizard.Zamorak, new RSTile(0, 0)), COORDS_60(
- "22 degrees 45 minutes north, 26 degrees 33 minutes east",
- "At Demonic ruins level 47 Wilderness, middle of north-east room. Dig on the north-east pentagram, near one of the Burnt bones spawns. Make sure you have ground decorations turned on, or you won't be able to see the pentagrams.",
- Wizard.Zamorak, new RSTile(0, 0)), COORDS_61(
- "24 degrees 24 minutes north, 26 degrees 24 minutes east",
- "Inside the Rogues' Castle in level 53 wilderness, just north of the north-west tower. Be careful of the Chaos Elemental near the tower!",
- Wizard.Zamorak, new RSTile(0, 0)), COORDS_62(
- "24 degrees 56 minutes north, 22 degrees 28 minutes east",
- "A little bit north of the spider web in level 55 wilderness, north of the lever to teleport to Ardougne.",
- Wizard.Zamorak, new RSTile(0, 0)), COORDS_63(
- "24 degrees 58 minutes north, 18 degrees 43 minutes east",
- "Behind the Pirates' hideout in the level 56 wilderness - You have to dig directly north of the Pirate's bar - the casket is near the north-western corner.",
- Wizard.Zamorak, new RSTile(0, 0)), COORDS_64(
- "25 degrees 03 minutes north, 17 degrees 05 minutes east",
- "Level 56 wilderness, north west of the agility course.",
- Wizard.Zamorak, new RSTile(0, 0)), COORDS_65(
- "25 degrees 03 minutes north, 23 degrees 24 minutes east",
- "Level 56 wilderness, dig on the north side of the magic axe hut located north east of the Deserted Keep. The fastest way to get there is to pull the Ardougne teleport lever and be transported to the Deserted Keep. It helps to have Jennica's ring as you can access the Spirit Realm with the portal south of the building, and you can teleport out of the Wilderness while in the Spirit Realm.",
- Wizard.Zamorak, new RSTile(0, 0));
- String desc;
- String solution;
- Wizard wizard;
- RSTile[] rsTiles;
- private Coordinate(String desc, String solution, Wizard wizard,
- RSTile... rsTiles) {
- this.desc = desc;
- this.solution = solution;
- this.wizard = wizard;
- this.rsTiles = rsTiles;
- }
- }
- public enum Cryptic {
- CRYPTIC_1(
- "46 is my number, my body is the colour of burnt orange and crawls among those with eight. Three mouths I have, yet I cannot eat. My blinking blue eye hides my grave.",
- "Level 46 Wilderness. Dig on the spot of the sapphire. The sapphire is located at the centre of the mountain of brown spiders, north of Red Dragon Isle. Beware of Player Killers!",
- new RSTile(0, 0)), CRYPTIC_2(
- "'A bag belt only?' he asked his balding brothers",
- "Talk to Abbot Langley in the Monastery near Edgeville.",
- "Abbot Langley", "Talk-to", true, new RSTile(0, 0)), CRYPTIC_3(
- "A crate found in the tower of a church is your next location.",
- "Church in East Ardougne, upstairs, crate in the corner .",
- "Crate", "Search", false, new RSTile(0, 0)), CRYPTIC_4(
- "A great view: watch the rapidly drying hides get splashed. Check the box you are sitting on.",
- "Almera's House North of Baxtorian Falls, first floor in the boxes.",
- "Box", "Search", false, new RSTile(2521, 3493, 0), new RSTile(
- 2523, 3494, 1)), CRYPTIC_5(
- "A strange little man who sells armour only to those who've proven themselves to be unafraid of dragons.",
- "Talk to Oziach in his house west of Edgeville.", "Oziach",
- "Talk-to", true, new RSTile(0, 0)), CRYPTIC_6(
- "A town with a different sort of night-life is your destination. Search for some crates in one of the houses.",
- "Search the boxes in the clothes shop in Canifis.", "Crate",
- "Search", false, new RSTile(0, 0)), CRYPTIC_7(
- "After a hard day of spraying back the vegetation, you mite want to pop to the nearby forge and search the crates.",
- "The Zanaris forge (furnace, north-western corner of Zanaris) west of the slayer monsters (fungi). Need Lost City Quest for this clue.",
- "Crate", "Search", false, new RSTile(0, 0)), CRYPTC_8(
- "After trawling for bars, go to the nearest place to smith them and dig by the door.",
- "Dig in front of the house with an anvil in Port Khazard, near the fishing trawler activity.",
- new RSTile(0, 0)), CRYPTIC_9(
- "Aggie I see, Lonely and southern I feel, I am neither inside nor outside the house, yet no house would be complete without me. The treasure lies beneath me!",
- "Dig next to the broom in Aggie's house in Draynor Village.",
- new RSTile(0, 0)), CRYPTIC_10(
- "And so on, and so on, and so on. Walking from the land of many unimportant things leads to a choice of paths.",
- "On Etceteria, dig next to the Evergreen in front of the castle walls. (Fairy ring Code CIP)",
- new RSTile(0, 0)), CRYPTIC_11(
- "As you desert this town,keep an eye out for a set of spines that could ruin nearby rugs: dig carefully around the greenery",
- "At the Flying Rug hub in Nardah, Dig next to the two cacti near by.",
- new RSTile(3395, 2919)), CRYPTIC_12(
- "Being this far north has meant that these crates have escaped being battled over.",
- "Search the crates behind and a little north-west the round prison building the holds the 2nd tracking gnome in the Battlefield south of West Ardougne.",
- new RSTile(0, 0)), CRYPTIC_13(
- "Brush off the sand and dig in the quarry. There is a wheely handy barrow to the east. Don't worry, it's coal to dig there-in fact, it's all oclay.",
- "Sandstone and granite quarry south of the bandit camp. Dig one square west of the north-eastern-most wheel barrow.",
- new RSTile(0, 0)), CRYPTIC_14(
- "By the town of the dead, walk south down a rickety bridge, then dig near the slime-covered tree.",
- "Walk down the bridge just to the west of the entrance to Port Phasmatys and dig just to the east of the first tree you come to.",
- new RSTile(0, 0)), CRYPTIC_15(
- "Citric Cellar",
- "Speak to Heckel Funch in south-east corner of the Grand Tree on the first level above the ground.",
- "Heckel Funch", "Talk-to", true, new RSTile(0, 0)), CRYPTIC_16(
- "Come to the evil ledge, Yew know yew want to, And try not to get stung.",
- "Dig in Edgeville, just east of the Southern Yew tree.",
- new RSTile(3088, 3468)), CRYPTIC_17(
- "Covered in shadows, the centre of the circle is where you will find the answer.",
- "In Mort'ton, dig in the centre of town, just south of the store.",
- new RSTile(0, 0)), CRYPTIC_18(
- "Dig here if you are not feeling too well after travelling through the desert. Ali heartily recommends it.",
- "Dig next to the well in Pollnivneach.", new RSTile(0, 0)), CRYPTIC_19(
- "Don't skip here, it's too muddy. You'll feel like a star if you dig here, though.",
- "Go to the southern tip of Mudskipper Point and dig on the south-eastern starfish.",
- new RSTile(0, 0)), CRYPTIC_20(
- "Find a bar with a centre fountain in its city. Go upstairs and get changed.",
- "Go to the Blue Moon Inn in Varrock.", "Drawer", "Search",
- false, new RSTile(0, 0)), CRYPTIC_21(
- "Find a crate close to the monks that like to paaarty!",
- "In the Monastery south of Ardougne, south wall of the east room.",
- "Crate", "Search", false, new RSTile(0, 0)), CRYPTIC_22(
- "For any aspiring mage, I'm sure searching this bookcase will be a rewarding experience.",
- "Search the bookcase in the north-east corner of the shop on the top floor of the Mage Training Arena.",
- "Bookcase", "Search", false, new RSTile(0, 0)), CRYPTIC_23(
- "Four blades I have, yet draw no blood. Still I turn my prey to powder. If you are brave, come search my roof; It is there my blades are louder.",
- "Lumbridge windmill, search the crates on the top floor.",
- "Crate", "Search", false, new RSTile(0, 0, 0), new RSTile(0, 0,
- 1), new RSTile(0, 0, 2)), CRYPTIC_24(
- "Generally speaking, his nose was very bent",
- "General Bentnoze in the Goblin Village.", "General Bentnoze",
- "Talk-to", true, new RSTile(0, 0)), CRYPTIC_25(
- "Go to the village being attacked by trolls, search the drawers while you are there.",
- "Go to Dunstan's house in Burthorpe and open the drawers.",
- "Drawers", "Search", false, new RSTile(0, 0)), CRYPTIC_26(
- "Go to this building to be illuminated, and search the drawers while you're there.",
- "Search the drawers in the Lighthouse west of Rellekka",
- "Drawers", "Search", false, new RSTile(0, 0, 0), new RSTile(0,
- 0, 1)), CRYPTIC_27(
- "Hay! Stop for a bit and admire the scenery, just like the tourism promoter says.",
- "Search the hay bales in the circular room south of the Baxtorian Falls, near Rasolo.",
- "Hay Bale", "Search", false, new RSTile(0, 0)), CRYPTIC_28(
- "His head might be hollow, but the crates nearby are filled with surprises.",
- "Search the crates near the Golem in the ruins of Uzer.",
- "Crate", "Search", false, new RSTile(3478, 3091)), CRYPTIC_29(
- "I am a token of the greatest love. I have no beginning or end. My eye is red, I can fit like a glove. Go to the place where it's money they lend, And dig by the gate to be my friend.",
- "Dig next to the gate, under the west bank of Varrock (the Tele-grab spot with coins and a ruby ring).",
- new RSTile(3192, 9825, -1), new RSTile(3188, 3433, 0)), CRYPTIC_30(
- "I'm sure they will let ya buy some things here as long as you are in good 'ealth",
- "Search one of the two crates in the general shop from Lletya, the elven city.",
- new RSTile(0, 0)), CRYPTIC_31(
- "Identify the back of this over-acting brother. (He's a long way from home.)",
- "Talk to Hamid, the monk at the altar north of the Duel Arena.",
- "Hamid", "Talk-to", true, new RSTile(0, 0)), CRYPTIC_32(
- "If a man carried my burden, he would break his back. I am not rich, but leave silver in my track. Speak to the keeper of my trail.",
- "Talk to Gerrant in the fish shop in Port Sarim.", "Gerrant",
- "Talk-to", true, new RSTile(0, 0)), CRYPTIC_33(
- "If you didn't want to be here and in danger, you should lever things well enough alone.",
- "Pull the Ardougne or Edgeville teleport lever and dig with a spade.",
- new RSTile(0, 0)), CRYPTIC_34(
- "If you look closely enough, it seems that the archers have lost more than their needles",
- "Search the hay stack in the Ranging Guild.", "Hay Stack",
- "Search", false, new RSTile(0, 0)), CRYPTIC_35(
- "I lie lonely and forgotten in mid wilderness, Where the dead rise from their beds. Feel free to quarrel and wind me up, and dig while you shoot their heads.",
- "Dig under the crossbow in the Graveyard of Shadows at level 20 wilderness.",
- new RSTile(0, 0)), CRYPTIC_36(
- "In a town where everyone has perfect vision, seek some locked drawers in a house that sits opposite a workshop.",
- "Search the drawers in the house south of the building with the anvils in Seers' Village",
- "Drawers", "Search", false, new RSTile(0, 0)), CRYPTIC_37(
- "In a town where thieves steal from stalls, search for some drawers upstairs of a house near the bank.",
- "Search the drawers in the first floor of the house near the north bank in Ardougne. Jerico's house, where the pigeon cages are, if you have done Plague City.",
- "Drawer", "Search", false, new RSTile(0, 0)), CRYPTIC_38(
- "In a town where wizards are known to gather, search upstairs in a large house to the north.",
- "Search the chest in the house north of the Wizards' Guild.",
- "Chest", "Search", false, new RSTile(0, 0)), CRYPTIC_39(
- "In a town where the guards are armed with maces, search the upstairs room of the Public House.",
- "Go to the Flying Horse Inn Pub just north of the Ardougne castle, search the drawers that can be found upstairs.",
- "Drawer", "Search", false, new RSTile(0, 0)), CRYPTIC_40(
- "In a village made of bamboo look for some crates under one of the houses.",
- "Search the crates under a house in Tai Bwo Wannai village.",
- new RSTile(0, 0)), CRYPTIC_41(
- "It seems to have reached the end of the line, and its still empty.",
- "In the Dwarven Mines, search the mine carts a little north of the entrance to the Mining Guild.",
- new RSTile(0, 0, 0), new RSTile(0, 0, -1)), CRYPTIC_42(
- "It seems the archers have lost more than their needles if you look closely enough",
- "Search the haystack in the Ranging Guild.", new RSTile(0, 0)), CRYPTIC_43(
- "Mine was the strangest birth under the sun. I left the crimson sack. Yet life had not begun. Entered the world and yet was seen by none.",
- "Dig at the Red spider's eggs in the Karamja volcano.",
- new RSTile(0, 0, 0), new RSTile(0, 0, -1)), CRYPTIC_44(
- "Must be full of railings",
- "Search some boxes near the coal trucks west of Seers' Village. There's a small hut to the south of the coal trucks, search the westernmost boxes. (Near the start of the Dwarf Cannon quest).",
- new RSTile(0, 0)), CRYPTIC_45(
- "My giant guardians below the market streets would be fans of rock and roll, if only they could grab hold of it. Dig near my green bubbles!",
- "Dig next to the cauldron near the Moss Giants in the Varrock Sewers.",
- new RSTile(3237, 3458), new RSTile(3161, 9904, -1)), CRYPTIC_46(
- "My home is grey and made of stone, A castle with a search for a meal, Hidden in some drawers I am, Across from a wooden wheel.",
- "Lumbridge castle first floor (second floor for non-UK), in the drawers next to the room with the spinning wheel.",
- new RSTile(0, 0)), CRYPTIC_47(
- "My name is like a tree, yet it is spelt with a \"g\", come see the fur, which is right near me",
- "Speak to Wilough in Varrock centre.", "Wilough", "Talk-to",
- true, new RSTile(0, 0)), CRYPTIC_48(
- "Navigating to this crate will be a trial.",
- "Go to Swensen the Navigator's house (house south west of longhouse) on Rellekka and search the crates in there.",
- new RSTile(2648, 3662)), CRYPTIC_49(
- "North of the best monkey restaurant on Karamja, look for the centre of the triangle of boats and search there.",
- "On the jetty just north of Musa Point, look in the crate.",
- new RSTile(0, 0)), CRYPTIC_50(
- "Observe: In the crate just North of the stairs leading down, you will find the answer.",
- "Walk through the tunnels to the Observatory, The crate is at the top of the stairs.",
- new RSTile(0, 0)), CRYPTIC_51(
- "Often sought out by scholars of histories past, find me where words of wisdom speak volumes",
- "Speak to the examiner at the Digsite (Exam Centre).",
- "Examiner", "Talk-to", true, new RSTile(3359, 3344)), CRYPTIC_52(
- "Probably filled with books on magic",
- "Search the bookcases on the lowest level of the Wizards' Tower near Sedridor.",
- new RSTile(3104, 3162), new RSTile(3097, 9571, -1)), CRYPTIC_53(
- "Probably filled with wizards socks",
- "Search the cabinets on the lowest level of the Wizards' Tower.",
- "Cabinet", "Search", false, new RSTile(0, 0)), CRYPTIC_54(
- "Read 'How to breed scorpions' by O.W.Thathurt",
- "Search the Bookcase on the second floor of the Sorcerer's Tower. It's the northern one.",
- new RSTile(2701, 3408, 0), new RSTile(2702, 3409, 1)), CRYPTIC_55(
- "Search the upstairs drawers of a house in a village where pirates are known to have a good time.",
- "In Brimhaven east of the inn and search the drawers on the top floor.",
- "Drawers", "Search", false, new RSTile(0, 0, 0), new RSTile(0,
- 0, 1)), CRYPTIC_56(
- "Six blades I have, yet draw no blood; Still I turn my prey to powder. If you are brave, come search my roof; It is there my blades are louder",
- "Search the crates on the top floor of the Lumbridge flour mill.",
- "Crate", "Search", false, new RSTile(0, 0, 0), new RSTile(0, 0,
- 1), new RSTile(0, 0, 2)), CRYPTIC_57(
- "'Small Shoe.' Often found with rod on mushroom.",
- "Talk to any gnome trainer in the agility area of the Tree Gnome Stronghold.",
- "Gnome Trainer", "Talk-to", true, new RSTile(2470, 3436)), CRYPTIC_58(
- "Snah? I feel all confused, like one of those cakes.",
- "Talk to Hans in Lumbridge.", "Hans", "Talk-to", true,
- new RSTile(3213, 3219)), CRYPIC_59(
- "Someone watching the fights in the Duel Arena is your next destination.",
- "Speak to Jeed at the Duel Arena.", "Jeed", "Talk-to", true,
- new RSTile(0, 0)), CRYPTIC_60(
- "Sophind yourself some treasure by searching these boxes.",
- "Search the boxes next to the bridge inside Sophanem, near the Pyramid Plunder pyramid.",
- "Box", "Search", false, new RSTile(0, 0)), CRYPTIC_61(
- "Speak to a referee",
- "Talk to a referee at the Gnome Ball field.", "Referee",
- "Talk-to", true, "5096", new RSTile(0, 0)), CRYPTIC_62(
- "Surprising? I bet he is...",
- "Sir Prysin just inside Varrock castle.", "Sir Prysin",
- "Talk-to", true, new RSTile(0, 0)), CRYPTIC_63(
- "The beasts to my east snap claws and tails. The rest to my west can slide and eat fish. The force to my north will jump and they'll wail, Come dig by my fire and make a wish.",
- "Dig by the torch in the Ardougne Zoo, between the penguins and the scorpions.",
- new RSTile(0, 0)), CRYPTIC_64(
- "The beasts to my east snap claws and tails. The rest to my west can slide and eat fish. The northern are silly and jump and wail. Dig by my fire and make a wish.",
- "Dig by the torch in the Ardougne Zoo, between the penguins and the scorpions.",
- new RSTile(0, 0)), CRYPTIC_65(
- "The cheapest water for miles around, but they react badly to religious icons.",
- "Go to the Bedabin camp in the Kharidian desert, then go south to the Bandit Camp, search the crates in the shop.",
- "Crate", "Search", false, new RSTile(0, 0)), CRYPTIC_66(
- "The crate on the ground floor of a church is your next location.",
- "The crate next to the ladder in the church in Ardougne.",
- "Crate", "Search", false, new RSTile(0, 0)), CRYPTIC_67(
- "The crate in the tower of a church is your next location.",
- "Up the ladder of the church in Ardougne.", "Crate", "Search",
- false, new RSTile(0, 0, 0), new RSTile(0, 0, 1)), CRYPTIC_68(
- "The dead, red dragon watches over this chest. He must really dig the view.",
- "Go to the Exam centre south of the Digsite and search the chest under the red dragon's head in the main building.",
- "Chest", "Search", false, new RSTile(0, 0)), CRYPTIC_69(
- "The gnomes' nearby cart must have collapsed under the weight of all the treasure in these boxes.",
- "West of Outpost, south of water symbol on map. Search the south-westernmost boxes.",
- new RSTile(0, 0)), CRYPTIC_70(
- "The owner of this crate has a hunch that he put more than fish inside.",
- "Search the crate near Lubufu south of Brimhaven.", new RSTile(
- 0, 0)), CRYPTIC_71(
- "The rock cakes to the south are definitely more edible than the two rocks I buried the treasure between.",
- "Dig just north of the rock cake stall in Gu'Tanoth between the outcrop of rocks in the marketplace.",
- new RSTile(0, 0)), CRYPTIC_72(
- "The socks in these drawers are holier than thine, according to the tonsured owners.",
- "Drawers in the north east corner of the Monastery, downstairs.",
- "Drawers", "Search", false, new RSTile(0, 0)), CRYPTIC_73(
- "The treasure is buried in a small house full of bones. Here's a Hint: It's not near a graveyard.",
- "In the small building near the Odd Old Man from the Rag and Bone Man quests. Just northwest of the limestone mine east of Varrock Dig in the centre of the building.",
- new RSTile(0, 0)), CRYPTIC_74("There is no 'worthier' lord.",
- "Speak to Lord Iorwerth in the elven camp near Prifddinas.",
- "Lord Iorwerth", "Talk-to", true, new RSTile(0, 0)), CRYPTIC_75(
- "This aviator is at the peak of his profession",
- "Talk to Captain Bleemadge at the top of White Wolf Mountain, he's one of the gnome pilots.",
- "Captain Bleemadge", "Talk-to", false, new RSTile(0, 0)), CRYPTIC_76(
- "This crate clearly marks the end of the line for coal.",
- "Search the crate in the corner of the Coal Trucks' end just North of the Seers Village Pub.",
- "Crate", "Search", false, new RSTile(0, 0)), CRYPTIC_77(
- "This crate holds a better reward than a broken arrow",
- "Go to the Ranging Guild and search the crate behind the arrow salesman.",
- "Crate", "Search", false, new RSTile(0, 0)), CRYPTIC_78(
- "This crate is mine, all mine, even if it is in the middle of the desert.",
- "Search the crate near the wooden cart with the camel in the Desert Mining Camp, which is south of Shantay Pass. Don't forget your Metal key (acquired by starting The Tourist Trap quest).",
- "Crate", "Search", false, new RSTile(0, 0)), CRYPTIC_79(
- "This cupboard has treasure, pirate pots and corsair cutlery!",
- "Search the cupboard in the house east of the Dead Man's Chest pirate bar in Brimhaven.",
- "Cupboard", "Search", false, new RSTile(0, 0)), CRYPTIC_80(
- "This temple is rather sluggish. The chest just inside the entrance, however, is filled with goodies.",
- "Search the chests at the entrance inside Witchaven dungeon.",
- "Chest", "Search", false, new RSTile(0, 0, 0), new RSTile(0, 0,
- -1)), CRYPTIC_81(
- "This village has a problem with cartloads of the undead. Try checking the bookcase to find the answer.",
- "Go to Shilo Village and search the bookcase in the building just north of the bridge across the river. Search the north-west bookcase by the door.",
- "Bookcase", "Search", false, new RSTile(0, 0)), CRYPTIC_82(
- "Throat mage seeks companionship. Seek answers inside my furniture if interested.",
- "Search the drawers upstairs in the Necromancer's tower south of East Ardougne (Use fairy ring code DJP).",
- "Drawer", "Search", false, new RSTile(0, 0, 0), new RSTile(0,
- 0, 1)), CRYPTIC_83(
- "Try not to let yourself be dazzled when you search these drawers.",
- "East Ardougne (near the gate to West Ardougne) search the drawers in Jimmy Dazzler's house West of the pub. The drawers in the NW corner of the house.",
- "Drawer", "Search", false, new RSTile(0, 0)), CRYPTIC_84(
- "Try not to step on any aquatic nasties while searching this crate.",
- "Go to the Fishing Platform by talking to Holgart or Jeb in Witchaven, east of Ardougne, and then search the crate in the shack on the south-west part of the Fishing Platform.",
- "Drawer", "Search", false, new RSTile(0, 0)), CRYPTIC_85(
- "When no weapons are at hand, then is the time to reflect. In Saradomin's name, redemption draws closer...",
- "Go to Entrana and search the drawers in the house with the glassblowing pipe (Do not search the drawers with the glassblowing pipe on them).",
- "Drawer", "Search", false, new RSTile(0, 0)), CRYPTIC_86(
- "When you get tired of fighting, go deep, deep down until you need an antidote",
- "Go to Yanille dungeon and fall into the place with the poison spiders, either by repeatedly walking across the balancing ledge or praying at the altar of Zamorak. Search the crate by the stairs leading up.",
- "Drawer", "Search", false, new RSTile(0, 0)), CRYPTIC_87(
- "While a sea view is nice, it seems this church has not seen visitors in a while. Dig outside the rim of the window for a reward.",
- "Dig behind the church (behind the altar) in south east Rimmington and south west of Port Sarim.",
- new RSTile(0, 0)), CRYPTIC_88(
- "You can cook food on me, but don't cook any foodles - That would just be wrong.",
- "Dig by the fire next to Captain Klemfoodle the gnome glider pilot on Karamja.",
- new RSTile(0, 0)), CRYPTIC_89(
- "You don't need to go hopping mad - or take steps - to get to this treasure: just be totally shellfish.",
- "Dig on the small shell between the basalt rocks (north of Barbarian Assault) and the small obelisk. The shell is small and pinkish, on the north-western tip of the area.",
- new RSTile(2519, 3594)), CRYPTIC_90(
- "You have all of the elements available to solve this clue. Fortunately you do not have to go so far as to stand in a draft.",
- "Search the crates in the Elemental Workshop the Clue Scroll is found in the crate directly east of the centre hatch.",
- "Drawer", "Search", false, new RSTile(0, 0, 0), new RSTile(0,
- 0, -1)), CRYPTIC_91(
- "You'll need to look for a town with a central fountain. Look for a locked chest in the town's chapel.",
- "Go to the north church in Varrock and search for a chest.",
- "Chest", "Search", false, new RSTile(0, 0)), CRYPTIC_92(
- "You will need to under-cook to solve this one.",
- "Go to Lumbridge and search one of the crates in the basement.",
- new RSTile(3209, 3215, 0), new RSTile(3218, 9617, -1)), CRYPTIC_93(
- "You will need to wash the old ash off of your spade when you dig here, but the only water nearby is stagnant.",
- "Go to Braindeath Island and dig next to the stagnant lake on top of the mountain behind 50% Luke's gate.",
- new RSTile(0, 0)), CRYPTIC_94(
- "You'll need to have Doug Deep into the distant past to get to these sacks",
- "Search the sacks near Doug Deeping. He is down the northeastern winch at the Digsite. You will need a rope the first time you do this. You need to complete Digsite Quest. Just 'operate' the winch to go down.",
- "Sacks", "Search", false, new RSTile(0, 0));
- public String desc;
- public String solution;
- public final String npcName;
- public String action;
- public RSTile[] rsTiles;
- public final boolean npc;
- public String challengeAns;
- private Cryptic(String desc, String solution, String npcName,
- String action, boolean npc, RSTile... rsTiles) {
- this.desc = desc;
- this.solution = solution;
- this.npcName = npcName;
- this.action = action;
- this.rsTiles = rsTiles;
- this.npc = npc;
- }
- private Cryptic(String desc, String solution, String npcName,
- String action, boolean npc, String challengeAns,
- RSTile... rsTiles) {
- this.desc = desc;
- this.solution = solution;
- this.npcName = npcName;
- this.action = action;
- this.rsTiles = rsTiles;
- this.npc = npc;
- this.challengeAns = challengeAns;
- }
- private Cryptic(String desc, String solution, RSTile... rsTiles) {
- this.desc = desc;
- this.solution = solution;
- this.rsTiles = rsTiles;
- this.action = "DIG";
- npcName = null;
- npc = false;
- }
- }
- enum FindTheKey {
- ;
- RSTile[] tile;
- int ID;
- String[] actions;
- boolean npc;
- String desc;
- FindTheKey(String desc, RSTile[] tile, int ID, boolean npc,
- String... actions) {
- this.tile = tile;
- this.desc = desc;
- this.ID = ID;
- this.npc = npc;
- this.actions = actions;
- }
- public int getID() {
- return ID;
- }
- public boolean isNPC() {
- return npc;
- }
- public boolean isObject() {
- return !npc;
- }
- public String[] getActions() {
- return actions;
- }
- public String getAction() {
- return actions[0];
- }
- public RSTile[] getTiles() {
- return tile;
- }
- }
- public enum Emote {
- EMOTE_1(
- "Beckon in Tai Bwo Wannai. Clap before you talk to me. Equip green dragonhide chaps, a ring of duelling, and a mithril med helm.",
- "Players need to be standing within the large red fenced area before performing the emotes.",
- EmoteControl.Emote.Beckon, EmoteControl.Emote.Clap,
- new int[] { 0 }, new RSTile(0, 0)), EMOTE_2(
- "Beckon in the Digsite, near the eastern winch. Bow or curtsy before you talk to me. Equip a pointed red and black snelm,snakeskin boots, and an iron pickaxe.",
- "The fastest ways to get to the clue area are Digsite pendant, a Gnome glider, or the Balloon transport system. First do the beckon emote, then Uri will appear. Bow or curtsy before talking to him.",
- EmoteControl.Emote.Beckon, EmoteControl.Emote.Bow,
- new int[] {}, new RSTile(0, 0)), EMOTE_3(
- "Blow a kiss between the tables in Shilo Village bank. Beware of double agents! Equip a splitbark helm, mud pie and rune platebody.",
- "You need to have completed Shilo Village in order to access this area. Turn Auto Retaliate off so that players do not waste a mud pie when retaliating against the double agent.",
- EmoteControl.Emote.Blow_Kiss, new int[] { 7710, 1127, 3385 },
- true, new RSTile(2852, 2953)), EMOTE_4(
- "Blow a raspberry at the monkey cage in Ardougne Zoo. Equip a studded body, bronze platelegs and a mud pie.",
- "The Ardougne Teleport, Kandarin Monastery Teleport (using the Ardougne cloak), or Spirit trees can be used to reach the zoo.",
- EmoteControl.Emote.Rasberry, new int[] {}, new RSTile(0, 0)), EMOTE_5(
- "Blow a raspberry in the Fishing Guild bank. Beware of double agents! Equip an elemental shield, blue dragonhide chaps, and a rune warhammer",
- "You may enter the guild at 68 fishing. Players can get into the guild at level 63 or higher by boosting with an admiral pie (level 63 min.) or fishing potion (level 65 min.). The guild can be reached via a charged skills necklace, or the Ardougne Teleport.",
- EmoteControl.Emote.Rasberry, new int[] {}, true, new RSTile(0,
- 0)), EMOTE_6(
- "Blow raspberries outside the entrance to Keep Le Faye. Equip a coif, iron platebody and leather gloves.",
- "Keep Le Faye can be found south of Seers' Village, and can be reached easily via the Camelot teleport or by using Fairy ring code BLR.",
- EmoteControl.Emote.Rasberry, new int[] { 1169, 1115, 1059 },
- new RSTile(2762, 3401)), EMOTE_7(
- "Bow or curtsy at the top of the lighthouse. Beware of double agents! Equip a blue dragonhide body, blue dragonhide vambraces and no jewellery.",
- "The lyre teleport followed by a run to the west, or the games necklace to barbarian assault followed by the crossing of the basalt rocks north are the quickest methods to get to the lighthouse.",
- EmoteControl.Emote.Bow, new int[] { -Equipment.RING,
- -Equipment.NECK, 2499, 2487 }, true, new RSTile(2507,
- 3639, 0), new RSTile(2505, 3641, 1), new RSTile(2505,
- 3641, 2)), EMOTE_8(
- "Bow or curtsy in the ticket office of the Duel Arena. Equip an iron chainbody, leather chaps and a coif.",
- "The ring of duelling, or Lumbridge Home teleport will get you closest with relative ease. Alternative means of getting to the arena include using an Amulet of glory or a Gnome glider.",
- EmoteControl.Emote.Bow, new int[] {}, new RSTile(0, 0)), EMOTE_9(
- "Bow or curtsy outside the entrance to the Legends' Guild. Equip iron platelegs, an emerald amulet and an oak longbow.",
- "The Legends' Guild has a fairy ring (code BLR) very close by. Alternatively, teleport to Ardougne and head northeast to the guild. Do the emote outside the main gate.",
- EmoteControl.Emote.Bow, new int[] { 845, 1696, 1067 },
- new RSTile(2729, 3348)), EMOTE_10(
- "Cheer at the Burthorpe Games Room. Have nothing equipped at all when you do.",
- "The Burthorpe Games Room can be found at the bottom of Burthorpe Castle, and easily reached with the games necklace.",
- EmoteControl.Emote.Cheer, new int[] { -Equipment.AMMO,
- -Equipment.BODY, -Equipment.CAPE, -Equipment.FEET,
- -Equipment.FEET, -Equipment.HANDS, -Equipment.HELMET,
- -Equipment.LEGS, -Equipment.NECK, -Equipment.SHIELD,
- -Equipment.RING, -Equipment.WEAPON }, new RSTile(2900,
- 3565, 0), new RSTile(2207, 4947, -1)), EMOTE_11(
- "Cheer at the druids circle, equip an air tiara, a bronze 2h sword, and Gold amulet.",
- "The druids circle is north of Taverley. The best way to reach it is to teleport to Burthorpe using a Games necklace and head south, or to teleport to Falador and head north. Alternatively, one can take a Mine cart to White Wolf Mountain (requires Fishing Contest) or use the Balloon transport system (requires Enlightened Journey, normal Logs, and a Tinderbox). You can also teleport with a Taverley tablet(with the completion of Love Story and 77 Magic) and then walk northeast.",
- EmoteControl.Emote.Cheer, new int[] {}, new RSTile(0, 0)), EMOTE_12(
- "Cheer for the monks at Port Sarim. Equip a coif, steel plateskirt and a sapphire necklace.",
- "Port sarim can be reached via the cabbage-port, and glory teleport to draynor easiest. Or, lumbrige/falador teleport and run to the port.",
- EmoteControl.Emote.Cheer, new int[] {}, new RSTile(0, 0)), EMOTE_13(
- "Cheer in the Barbarian Agility Arena. Headbang before you talk to me. Equip a steel platebody, maple shortbow and bronze boots.",
- "The agility arena is at the Barbarian Outpost. Players must complete the Barcrawl miniquest to access the Outpost in general, and have at least 35 Agility to enter the arena, as you must be inside the arena to complete this task. A games necklace will come in very handy as the Barbarian Outpost is rather remote.",
- EmoteControl.Emote.Cheer, EmoteControl.Emote.Headbang,
- new int[] {}, new RSTile(0, 0)), EMOTE_14(
- "Cheer in the Ogre pen in the Training Camp. Show you are angry before you talk to me. Equip a Green Dragonhide Body, green dragonhide chaps and a steel sq shield.",
- "The ogre pen is located in the Combat Training Camp, just north of West Ardougne, also you will have to squeeze through a gap in the railings located on the west of the pen to get in with the Ogres. Use the ardougne teleport, or spirit tree to the gnome stronghold and head southeast to reach the area. You need to have completed Biohazard to get into the combat training camp and Dragon Slayer in order to wear the body.",
- EmoteControl.Emote.Cheer, EmoteControl.Emote.Angry,
- new int[] {}, new RSTile(0, 0)), EMOTE_15(
- "Clap in the main exam room in the Exam Centre. Equip a ruby amulet, blue flowers and leather gloves.",
- "The exam centre is south of the digsite, use the digsite pendant or a gnome glider to reach the area.",
- EmoteControl.Emote.Clap, new int[] {}, new RSTile(0, 0)), EMOTE_16(
- "Clap on the causeway to the Wizard's Tower. Equip an iron med helm, emerald ring and leather gloves",
- "Causeway is another name for Bridge. Use fairy ring code DIS, an amulet of glory, cabbage port, or Lumbrige Teleport to reach the area.",
- EmoteControl.Emote.Clap, new int[] {}, new RSTile(0, 0)), EMOTE_17(
- "Clap on the top level of the mill, north of east Ardougne. Equip an Emerald ring, Wood camo top and unenchanted Tiara.",
- "Ardroune teleport then head north, it's in the farm area, or use Skills necklace to teleport to Fishing Guild.",
- EmoteControl.Emote.Clap, new int[] {}, new RSTile(0, 0),
- new RSTile(0, 0, 1), new RSTile(0, 0, 2)), EMOTE_18(
- "Cry in the Catherby archery shop. Bow or curtsy before you talk to me.Equip a round red and black snelm, a hard leather body, and an unblessed silver sickle",
- "Camelot Teleport then head southeast. The ranging shop is 2 houses east of the bank, near the fishing spots.",
- EmoteControl.Emote.Cry, EmoteControl.Emote.Bow, new int[] {},
- new RSTile(0, 0)), EMOTE_19(
- "Cry on the platform of the north-west tree of the Gnome Agility Arena. Indicate \"no\" before talking to me, equip green d'hide chaps, a steel kiteshield, and a ring of forging.",
- "Spirit tree to the gnome stronghold, or Ardougne Teleport and head northwest to the gnome stronghold. You need to partially complete the agility course then do the two emotes in sequence. (Note: The emotes are actually performed on the south-west tree. This may be an oversight by Jagex.)",
- EmoteControl.Emote.Cry, EmoteControl.Emote.No, new int[] {},
- new RSTile(0, 0)), EMOTE_20(
- "Dance a jig by the entrance to the Fishing Guild, equip a sapphire amulet, an emerald ring and a bronze chainbody",
- "You do not need to go inside of the guild to get the reward. Make sure you use the jig emote, not the dance emote.",
- EmoteControl.Emote.Jig, new int[] {}, new RSTile(0, 0)), EMOTE_21(
- "Dance a jig under Shantay's awning. Bow or curtsy before you talk to me. Equip a pointed blue snelm, a staff of air, and a bronze sq shield",
- "Shantay's awning refers to the Shantay Pass. Make sure to use the pointed snelm and not standard round one. The Broomstick from Swept Away places you almost exactly there. The Ring of duelling, Amulet of glory, or Lumbridge teleport will allow you to reach the area also.",
- EmoteControl.Emote.Jig, EmoteControl.Emote.Bow, new int[] {},
- new RSTile(0, 0)), EMOTE_22(
- "Dance at the cat-doored pyramid in Sophanem. Beware of double agents! Equip a ring of life, uncharged amulet of glory, and adamant two-handed sword.",
- "A level 108 Double agent will attack. Sophanem is in the far southern desert. To access it, players must have reached a certain point in the Icthlarin's Little Helper quest. The cat-doored pyramid is located just south of the Pyramid Plunder pyramid. The most direct way is using a pharaoh's sceptre which teleports to the Pyramid Plunder pyramid; or use the magic carpet service to reach the city. Alternatively, a Ring of Slaying teleport to Sumona with a run across the desert or use of the magic carpets is an option. After Love Story, a house teleport tab to the Pollnivneach portal could also be used.",
- EmoteControl.Emote.Dance, new int[] { 1704, 1317, 2570 }, true,
- new RSTile(3295, 2781)), EMOTE_23(
- "Dance at the crossroads north of Draynor. Equip an iron chainbody, sapphire ring and longbow.",
- "The explorers ring 3 cabbage port, amulet of glory teleport, or Lumbridge teleport will put you in the area.",
- EmoteControl.Emote.Dance, new int[] { 839, 1101, 1637 },
- new RSTile(3109, 3295)), EMOTE_24(
- "Dance in the centre of Canifis. Bow or curtsy before you talk to me. Equip a spiny helm, mithril platelegs, and an iron two-handed sword.",
- "Use Fairy ring code C-K-S, the Kharyrll house portal, the Kharyrll Ancient Magicks Teleport, or the ectophial.",
- EmoteControl.Emote.Dance, EmoteControl.Emote.Bow, new int[] {},
- new RSTile(0, 0)), EMOTE_25(
- "Dance in the Party Room. Equip a steel full helm, steel platebody and iron plateskirt.",
- "The Party Room in Falador is best reached by the Falador Teleport.",
- EmoteControl.Emote.Dance, new int[] {}, new RSTile(0, 0)), EMOTE_26(
- "Dance in the shack in Lumbridge Swamp. Equip a bronze dagger, iron full helm and a gold ring.",
- "The Lumbridge swamp can be accessed via Zanaris or a Lumbridge teleport. If you go through zanaris make sure to unequip your dramen/lunar staff before re-entering the shack.",
- EmoteControl.Emote.Dance, new int[] {}, new RSTile(0, 0)), EMOTE_27(
- "Headbang in the mine north of Al-kharid. Equip a Polar Camo Top, Leather Gloves and Leather Boots.",
- "Use Lumbridge teleport, the Gnome gliders, or a Ring of duelling to get to the area,then run north of Al Kharid in the scorpion mine.",
- EmoteControl.Emote.Headbang, new int[] {}, new RSTile(0, 0)), EMOTE_28(
- "Jump for joy at the beehives. Equip iron boots, unholy symbol, and a steel hatchet.",
- "The beehives are just west of the Catherby bank, in the fenced in area. Use the Camelot teleport to get to the area.",
- EmoteControl.Emote.Jump_For_Joy, new int[] {}, new RSTile(0, 0)), EMOTE_29(
- "Jump for joy in Yanille Bank. Dance a jig before you talk to me. Equip an iron crossbow, adamant med helm and snakeskin chaps.",
- "Use the Watchtower Teleport, Fariy Ring network, Spirit Tree to Tree Gnome Village or ring of duelling to Castlewars to get to the area.",
- EmoteControl.Emote.Jump_For_Joy, new int[] {}, new RSTile(0, 0)), EMOTE_30(
- "Laugh at the crossroads south of Sinclair Mansion. Equip a cowl, strength amulet and Iron scimitar.",
- "Teleport to Camelot or use fairy ring code CJR to reach the area.",
- EmoteControl.Emote.Laugh, new int[] {}, new RSTile(0, 0)), EMOTE_31(
- "Laugh in the Jokul's tent in the mountain camp. Beware of double agents! Equip a rune full helmet, blue dragonhide chaps and a fire battlestaff.",
- "The Mountain Camp is east of Rellekka. Take a rope to get into the camp if you haven't done the quest Mountain Daughter North of Fairy Ring (A-J-R). Teleportation via Slayer Ring is also an option.",
- EmoteControl.Emote.Laugh, new int[] { 1163, 2493, 1393 }, true,
- new RSTile(2795, 3670)), EMOTE_32(
- "Panic in the heart of the haunted woods. Beware of double agents! Have no items equipped when you do.",
- "The location depicted is located south-east of the Fairy Ring (A-L-Q) and south of the farming area. There are two short mushrooms within sight (3/4 of the way to the edge of the minimap) of the fairy ring which the player can stand in between. Standing between these mushrooms is the location where the emote is to be done. Directly west of this clump of vegetation is a 'live tree' which will attack. Players should wear armour for this clue and bring food as they will need to fend off leeches and vampires until they reach the location. Stat restore potions are suggested for players under level 105 combat as the leeches may slightly reduce their stats. A level 108 Double Agent will attack, so equipping armour and a weapon again to kill him is recommended. Be sure to un-equip all items again only when it is safe to do so.",
- EmoteControl.Emote.Panic, new int[] { -Equipment.AMMO,
- -Equipment.BODY, -Equipment.CAPE, -Equipment.FEET,
- -Equipment.FEET, -Equipment.HANDS, -Equipment.HELMET,
- -Equipment.LEGS, -Equipment.NECK, -Equipment.SHIELD,
- -Equipment.RING, -Equipment.WEAPON }, true, new RSTile(
- 3611, 3490)), EMOTE_33(
- "Panic by the pilot on White Wolf Mountain. Beware of double agents! Equip mithril platelegs, a ring of life, and a rune hatchet",
- "Use the gnome glider, Camelot teleport, Taverely teleport, or Falador teleport to get to the area. If you've completed Love Story, you may use a chipped POH teleport to Taverley and go west to get there.",
- EmoteControl.Emote.Panic, new int[] { 1359, 2570, 1071 }, true,
- new RSTile(2849, 3498)), EMOTE_34(
- "Panic in the limestone mine. Equip bronze platelegs, steel pickaxe and steel med helm.",
- "The limestone mines are in the valley east of Varrock, near the odd old man. Use a Varrock teleport, a Digsite pendant, a Gnome glider, or the Balloon transport system to get to the area.",
- EmoteControl.Emote.Panic, new int[] {}, new RSTile(0, 0)), EMOTE_35(
- "Panic on the pier where you catch the Fishing Trawler. Have nothing equipped at all when you do.",
- "The fishing trawler is in Port Khazard, north of Yanille.",
- EmoteControl.Emote.Panic, new int[] {}, new RSTile(0, 0)), EMOTE_36(
- "Panic by the mausoleum in Morytania. Wave before you speak to me. Equip a mithril plateskirt, a maple longbow and no boots.",
- "This clue is a bit vague, you actually need to panic on the mausoleum. The quest \"Creature of Fenkenstrain\" is required to reach it. The mausoleum is the small island where the player dug up various body parts. You cannot go directly as the bridge is broken, go to the graveyard east of the castle and push the eastern memorial to pass through the Experiment dungeon. Go north and west following the tunnel to the end and up the ladder. Use the ectophial, a Canifis teleport, or the fairy ring network (code ALQ) to reach the area.",
- EmoteControl.Emote.Panic, EmoteControl.Emote.Wave,
- new int[] {}, new RSTile(0, 0)), EMOTE_37(
- "Salute in the banana plantation. Beware of double agents! Equip a diamond ring, amulet of power and nothing on your chest and legs.",
- "The fastest way to get here is use the Amulet of Glory Karamja teleport, it puts you right inside the plantation. Players can also charter the Port Sarim ship to Musa Point or use Fairy ring code B-L-P to go to TzHaar City and head through the Karamja Volcano.",
- EmoteControl.Emote.Salute, new int[] {}, true, new RSTile(2917,
- 3164)), EMOTE_38(
- "Shrug in the mine near Rimmington, Equip a gold necklace, a gold ring and a bronze spear.",
- "The large mining pit is southwest of Falador and slightly northeast of Rimmington. Cabbage-port, Falador teleport, or use a Rimmington Tablet to get to the area.",
- EmoteControl.Emote.Shrug, new int[] {}, new RSTile(0, 0)), EMOTE_39(
- "Shrug in the Zamorak temple found in the Eastern Wilderness. Beware of double agents! Equip bronze platelegs, an iron platebody, and blue d'hide vambraces",
- "This is the chaos temple in level 13 wilderness south of Clan Wars's old location, surrounded by lava, NOT the Chaos Runecrafting Altar OR Small Chaos Temple in level 38 wilderness. A level 65 Double Agent will attack. The quickest way to the altar is to have Hartwin escort you there after completing Defender of Varrock. Note: Having Hartwin escort you does not seem to work for some players, so be prepared to walk if necessary. Warning: The area is multicombat, and player killers may attack you while you fight the Double Agent.",
- EmoteControl.Emote.Shrug, new int[] {}, true, new RSTile(0, 0)), EMOTE_40(
- "Twirl at the crossroads north of Rimmington. Equip a Sapphire ring, yellow flowers and leather chaps.",
- "Cabbage port, Falador teleport, or amulet of glory to the area.",
- EmoteControl.Emote.Twirl, new int[] {}, new RSTile(0, 0)), EMOTE_41(
- "Twirl in Draynor Manor by the fountain. Equip an iron platebody, studded chaps and a bronze full helm.",
- "Draynor manor, north of Draynor Village. Use the cabbage port, lumbridge teleport, or amulet of glory to reach the area.",
- EmoteControl.Emote.Twirl, new int[] {}, new RSTile(0, 0)), EMOTE_42(
- "Twirl on the bridge by Gunnarsgrunn (or Barbarian Village). Salute before you talk to me. Equip an iron hatchet, steel kiteshield and mithril full helm.",
- "The bridge spans the river between the Grand Exchange and Gunnarsgrunn. Varrock teleport, amulet of glory to Edgeville, or invoke the skull sceptre to get to the area.",
- EmoteControl.Emote.Twirl, EmoteControl.Emote.Salute,
- new int[] {}, new RSTile(0, 0)), EMOTE_43(
- "Think under the lens in the Observatory. Twirl before you talk to me. Equip a mithril chainbody, green dragonhide chaps and ruby amulet.",
- "Use a Ring of Duelling to get to Castle Wars, run north over both bridges, then north-northeast to reach a small collection of three houses. Climb down the stairs in the west building to enter the Observatory dungeon. Use the Observatory Dungeon map to find your way through and up the stairs to the Observatory main building. Once there, head upstairs and perform the emote under the end of the telescope.",
- EmoteControl.Emote.Think, new int[] {}, new RSTile(0, 0, 0),
- new RSTile(0, 0, 1)), EMOTE_44(
- "Think in the middle of the wheat field by the Lumbridge mill . Equip a sapphire necklace, a polar camo legs and an oak shortbow.",
- "Teleport to Lumbridge or run from Draynor Village to reach the area.",
- EmoteControl.Emote.Think, new int[] {}, new RSTile(0, 0)), EMOTE_45(
- "Wave on Mudskipper Point. Equip a gold ring, leather chaps and a steel mace.",
- "Mudskipper Point is south-east of Rimmington, south of the house with the anvil in it. Use the cabbage port, fairy ring code AIQ, or Falador Teleport to reach the area.",
- EmoteControl.Emote.Wave, new int[] {}, new RSTile(0, 0)), EMOTE_46(
- "Wave along the south fence of the lumberyard. Equip leather chaps, bronze hatchet and a hard leather body.",
- "The lumberyard is northeast of Varrock and may be reached using a Varrock Teleport, a digsite pendant, a Lumberyard teleport scroll, or the balloon transport system. It is right in front of the sawmill operator.",
- EmoteControl.Emote.Wave, new int[] {}, new RSTile(0, 0)), EMOTE_47(
- "Yawn in Castle Wars lobby. Shrug before you talk to me. Equip a ruby amulet, mithril scimitar and an iron sq shield.",
- "The fastest and recommended way is to teleport using a Ring of duelling to Castle Wars. Alternatively, one could cast Watchtower Teleport, use Fairy rings, or use the balloon transport system to get to the area.",
- EmoteControl.Emote.Yawn, EmoteControl.Emote.Shrug,
- new int[] {}, new RSTile(0, 0)), EMOTE_48(
- "Yawn in Draynor marketplace, equip studded leather chaps, an iron kiteshield, and a steel longsword",
- "The fastest ways to get there are an Amulet of glory or the Explorer's ring 3 teleport. The Fairy ring network (code D-I-S) or the Lumbridge Home Teleport may also be used.",
- EmoteControl.Emote.Yawn, new int[] {}, new RSTile(0, 0)), EMOTE_49(
- "Yawn in the Varrock Palace library. Equip a holy symbol, leather vambraces and an iron warhammer.",
- "The Varrock Library is inside Varrock castle, on the north side. Use a Varrock teleport or a Spirit tree to reach the area.",
- EmoteControl.Emote.Yawn, new int[] {}, new RSTile(0, 0)), EMOTE_50(
- "Yawn in the rogues' general store. Beware of double agents! Equip an iron square shield, blue dragonhide vambraces, and a iron pickaxe.",
- "The general store is in the Wilderness Bandit Camp level 23, in the western wilderness. After yawning you will fight a level 65 double agent. Warning: This is a multicombat zone, and player killers may attack you whilst you are killing the agent.",
- EmoteControl.Emote.Yawn, new int[] {}, true, new RSTile(0, 0));
- String desc;
- String solu;
- RSTile[] loc;
- int[] equipItems;
- int emote1 = -1;
- int emote2 = -1;
- private Emote(String desc, String solu, EmoteControl.Emote emote1,
- EmoteControl.Emote emote2, int[] equipment, RSTile... loc) {
- this(desc, solu, emote1.ordinal(), emote2.ordinal(), equipment, loc);
- }
- private Emote(String desc, String solu, int emote1, int emote2,
- int[] equipment, RSTile... loc) {
- this.desc = desc;
- this.solu = solu;
- this.emote1 = emote1;
- this.emote2 = emote2;
- this.equipItems = equipment;
- this.loc = loc;
- }
- private Emote(String desc, String solu, int emote1, int[] equipment,
- boolean dblAgent, RSTile... loc) {
- this(desc, solu, emote1, dblAgent ? -5 : -1, equipment, loc);
- }
- private Emote(String desc, String solu, EmoteControl.Emote emote1,
- int[] equipment, boolean dblAgent, RSTile... rsTiles) {
- this(desc, solu, emote1.ordinal(), equipment, dblAgent, rsTiles);
- }
- private Emote(String desc, String solu, EmoteControl.Emote emote1,
- int[] equipment, RSTile... loc) {
- this(desc, solu, emote1.ordinal(), equipment, loc);
- }
- private Emote(String desc, String solu, int emote1, int[] equipment,
- RSTile... loc) {
- this(desc, solu, emote1, -1, equipment, loc);
- }
- public boolean hasDoubleAgent() {
- return emote2 == -5;
- }
- public boolean hasSecondEmote() {
- return emote2 >= 0;
- }
- public String isEquipped(Equipment equipment) {
- outer: for (int i : equipItems)
- if (i < 0) {
- if (equipment.getCachedItems()[(-i) - 8 / 3] != null)
- return "You must have nothing " + getSlotName(-i) + ".";
- } else {
- for (RSItem item : equipment.getCachedItems())
- if (item.getID() == i)
- continue outer;
- return "You must be wearing item id " + i;
- }
- return null;
- }
- private static String getSlotName(int slot) {
- switch (slot) {
- case Equipment.AMMO:
- return "in your quiver";
- case Equipment.BODY:
- return "on your body";
- case Equipment.CAPE:
- return "for a cape";
- case Equipment.FEET:
- return "on your feet";
- case Equipment.HANDS:
- return "on your hands";
- case Equipment.HELMET:
- return "on your head";
- case Equipment.LEGS:
- return "on your legs";
- case Equipment.NECK:
- return "around your neck";
- case Equipment.RING:
- return "on your ring finger";
- case Equipment.SHIELD:
- return "for a shield";
- case Equipment.WEAPON:
- return "for a weapon";
- default:
- return "";
- }
- }
- }
- public enum Map {
- MAP_1(358, new RSTile(2457, 3182), "", new MapObject(16, 3392,
- new Point(211, 162))), MAP_2(351, new RSTile(3043, 3398),
- "Around the standing stones north of falador", new MapObject(0,
- 3389, new Point(106, 97))), MAP_3(350, new RSTile(3309,
- 3503), "In the Varrock Sawmill", true, new MapObject(0, 3389,
- new Point(116, 73))), MAP_4(353, new RSTile(2616, 3077),
- "Behind the anvil in Yanille", new MapObject(62, 3389,
- new Point(242, 157))), MAP_5(
- 357,
- new RSTile(2488, 3308),
- "In Western Ardougne, in the corner of one of the house strips.",
- new MapObject(5, 3389, new Point(290, 147))), MAP_6(359,
- new RSTile(3026, 3628),
- "In the dark warrior's fortress, level 14 wilderness.", true,
- new MapObject(59, 3392, new Point(225, 165))), MAP_7(339,
- new RSTile(2722, 3338), "South of the legends guild",
- new MapObject(8, 3389, new Point(275, 182))), MAP_8(358,
- new RSTile(2457, 3182), "North-East of the observatory", true,
- new MapObject(16, 3392, new Point(211, 162))), MAP_9(337,
- new RSTile(2969, 3415), "North of Falador at the crossroads",
- new MapObject(79, 2110, new Point(249, 124)));
- final MapObject[] objects;
- final RSTile dest;
- final int interfaceID;
- final String solution;
- final boolean isCrate;
- private Map(int interfaceID, RSTile dest, String solution,
- MapObject... objects) {
- this.interfaceID = interfaceID;
- this.dest = dest;
- this.solution = solution;
- this.objects = objects;
- this.isCrate = false;
- }
- private Map(int interfaceID, RSTile dest, String solution,
- boolean isCrate, MapObject... objects) {
- this.interfaceID = interfaceID;
- this.dest = dest;
- this.objects = objects;
- this.solution = solution;
- this.isCrate = isCrate;
- }
- public boolean validate(Interfaces interfaces) {
- RSInterface parent = interfaces.get(interfaceID);
- if (parent != null && parent.isValid()) {
- for (MapObject o : objects)
- if (!o.validate(parent))
- return false;
- } else
- return false;
- return true;
- }
- }
- static class MapObject {
- final int componentID;
- final int modelID;
- final Point relativeLocation;
- public MapObject(int componentID, int modelID, Point relativeLocation) {
- this.componentID = componentID;
- this.modelID = modelID;
- this.relativeLocation = relativeLocation;
- }
- public MapObject(int componentID, int modelID) {
- this.componentID = componentID;
- this.modelID = modelID;
- this.relativeLocation = null;
- }
- public MapObject(int componentID, Point relativeLocation) {
- this.componentID = componentID;
- this.relativeLocation = relativeLocation;
- this.modelID = -5;
- }
- public boolean validate(RSInterface parentInterface) {
- RSComponent comp = parentInterface.getComponent(componentID);
- return comp != null
- && (modelID == -5 || comp.getModelID() == modelID)
- && (relativeLocation == null || (Math.abs(comp
- .getRelativeX() - relativeLocation.x) < 4 && Math
- .abs(comp.getRelativeY() - relativeLocation.y) < 4));
- }
- }
- public static class EmoteControl {
- private static final int EMOTE_INTERFACE = 464;
- private static final int EMOTE_SCROLL_BAR = 0;
- private static final int EMOTE_CONTAINER = 1;
- enum Emote {
- Yes, No, Bow, Curtsy, Angry, Think, Wave, Shrug, Cheer, Beckon, Laugh, Jump_For_Joy, Yawn, Dance, Jig, Twirl, Headbang, Cry, Blow_Kiss, Panic, Rasberry, Clap, Salute, Goblin_Bow, Goblin_Salute, Glass_Box, Climb_Rope, Lean, Glass_Wall, Idea, Stomp, Flap, Slap_Head, Zombie_Walk, Zombie_Dance, Zombie_Hand, Scared, Bunny_Hop, Skillcape, Snowman_Dance, Air_Guitar, Saftey_First, Explore, Trick, Freeze, Give_Thanks, Around_the_World_in_Eggty_Days, Dramatic_Point, Faint, Puppet_Master, Taskmaster, Seal_of_Approval
- }
- final Game game;
- final Interfaces interfaces;
- public EmoteControl(Game game, Interfaces inter) {
- this.game = game;
- this.interfaces = inter;
- }
- public void doEmote(int id) {
- doEmote(Emote.values()[id]);
- }
- public void doEmote(Emote emote) {
- String act = emote.name().toLowerCase().replaceAll("_", " ");
- for (byte b = 0; b < 5 && !game.getTab().equals(Tab.EMOTES); b++) {
- game.openTab(Tab.EMOTES);
- game.sleep(250);
- }
- if (game.getTab().equals(Tab.EMOTES)) {
- Rectangle bound = interfaces.get(EMOTE_INTERFACE)
- .getComponent(EMOTE_CONTAINER).getArea();
- RSComponent c = getEmoteComponent(act);
- if (!inRect(bound, c.getArea()))
- interfaces.scrollTo(c, interfaces.get(EMOTE_INTERFACE)
- .getComponent(EMOTE_SCROLL_BAR));
- for (byte b = 0; b < 10; b++)
- if (c.interact(act))
- break;
- }
- }
- public RSComponent getEmoteComponent(String action) {
- for (RSComponent c : interfaces.get(EMOTE_INTERFACE)
- .getComponents()) {
- if (c.getActions() != null)
- for (String act : c.getActions())
- if (act != null)
- if (act.toLowerCase()
- .contains(action.toLowerCase()))
- return c;
- if (c.getTooltip() != null)
- if (c.getTooltip().toLowerCase()
- .contains(action.toLowerCase()))
- return c;
- }
- return null;
- }
- private Rectangle intersectRect(Rectangle bounds, Rectangle inner) {
- Area a = new Area(bounds);
- a.intersect(new Area(inner));
- return a.getBounds();
- }
- private boolean inRect(Rectangle bounds, Rectangle inner) {
- Rectangle r = intersectRect(bounds, inner);
- return r.width > 0 && r.height > 0;
- }
- }
- enum SimpleClue {
- SC_1(
- "A crate found in the tower of a church is your next location.",
- "Climb up the stairs of the church in East Ardougne, not the Kandarin Monastery",
- "Crate", false, new RSTile(0, 0)), SC_2(
- "Dig near some giant mushrooms behind the Grand Tree",
- "Dig near the mushrooms just on the north-west of the Grand Tree.",
- new RSTile(0, 0)), SC_3(
- "Look in the ground floor crates of houses in Falador",
- "The house east of the east bank.", "Crate", false, new RSTile(
- 0, 0)), SC_4(
- "One of the sailors in Port Sarim is your next destination.",
- "Talk to Captain Tobias in Port Sarim.", "Captain Tobias",
- true, new RSTile(3026, 3217)), SC_5(
- "Search chests found in the upstairs of shops in Port Sarim",
- "It's the food shop", "Chest", false,
- new RSTile(3014, 3204, 0), new RSTile(3014, 3204, 1)), SC_6(
- "Search for a crate in a building in Hemenster",
- "Hemenster is the small area between Seers' Village and the Fishing Guild. Search the building on the water's edge, north-west of the range guild and west of Grandpa Jack's",
- "Crate", false, new RSTile(0, 0)), SC_7(
- "Search for a crate in Varrock Palace.",
- "In the back, by the sink, ground floor", "Crate", false,
- new RSTile(3224, 3492)), SC_8(
- "Search for a crate on the ground floor of a building in Seers' Village",
- "It is the house directly west of the house with the spinning wheel, north of the church ",
- "Crate", false, new RSTile(0, 0)), SC_9(
- "Search for a crate on the ground floor of a house in Seers' Village",
- "It's the house between the Church and the Pub", "Crate",
- false, new RSTile(0, 0)), SC_10(
- "Search in the basement of the Artisan Dwarves' workshop in Falador",
- "It's in a stack of crates directly south of the ingot troughs for the cart tracks",
- "Crate", false, new RSTile(0, 0)), SC_11(
- "Search the crates in a shop in Taverley",
- "The Taverley 2-handed sword shop", "Crate", false, new RSTile(
- 0, 0)), SC_12(
- "Search the boxes in one of the tents in Al Kharid",
- "The tent next to Ali Morrisane's stall.", "Box", false,
- new RSTile(0, 0)), SC_13(
- "Search the boxes in the Goblin house near Lumbridge",
- "The north-western box. The house is located east of Lumbridge, just across the river.",
- "Box", false, new RSTile(0, 0)), SC_14(
- "Search the boxes in the house near the South entrance of Varrock",
- "It's the house just south of the sword shop.", "Box", false,
- new RSTile(0, 0)), SC_15(
- "Search the boxes just outside the armour shop in east Ardougne",
- "South of the market, just next to the Spice stall.", "Box",
- false, new RSTile(0, 0)), SC_16(
- "Search the boxes of Falador's general store", "", "Box",
- false, new RSTile(0, 0)), SC_17(
- "Search the chest in the Duke of Lumbridge's bedroom",
- "In Lumbridge castle, on the second floor.", "Chest", false,
- new RSTile(3206, 3209, 0), new RSTile(3209, 3218, 1)), SC_18(
- "Search the chest in the left-hand tower of Camelot castle",
- "Go inside the southwest corner tower of Camelot Castle. Climb the ladders to the second floor, third floor and search the chest.",
- "Chest", false, new RSTile(0, 0)), SC_19(
- "Search the chests in the Dwarven Mine",
- "From the ladder, go south, then west, then south, search the chests in this location, by the crossbow shop.",
- "Chest", false, new RSTile(0, 0)), SC_20(
- "Search the chests upstairs in Al Kharid palace.",
- "Chest is on the easternmost wall", "Chest", false, new RSTile(
- 0, 0)), SC_21(
- "Search the crate in the left-hand tower of Lumbridge castle",
- "It's not IN the castle, it's part of the southern tower near the entrance.",
- "Crate", false, new RSTile(0, 0)), SC_22(
- "Search the crate near a cart in Port Khazard.",
- "Search the crate next to the eastern general store, near the broken cart.",
- "Crate", false, new RSTile(0, 0)), SC_23(
- "Search the crates in a house in Yanille that has a piano",
- "North of the Wizard's Guild", "Crate", false, new RSTile(0, 0)), SC_24(
- "Search the crates in a shop in Taverley",
- "Two-handed Sword shop in the North West corner of Taverley",
- "Crate", false, new RSTile(0, 0)), SC_25(
- "Search the crates in Canifis", "In the raw meat shop",
- "Crate", false, new RSTile(0, 0)), SC_26(
- "Search the crates in Draynor Manor",
- "Top floor of Draynor Manor (in the same room that you come into when going up the last ladder).",
- "Crate", false, new RSTile(0, 0)), SC_27(
- "Search the crates in East Ardougne's general store.",
- "Located directly south of the church.", "Crate", false,
- new RSTile(0, 0)), SC_28(
- "Search the crates in Horvik's armoury",
- "Horvik is the armour shop east of the main square in Varrock.",
- "Crate", false, new RSTile(0, 0)), SC_29(
- "Search the crates in Gunnarsgrunn (Barbarian Village) helmet shop",
- "Go to the shop Peksa owns and search some crates there.",
- "Crate", false, new RSTile(0, 0)), SC_30(
- "Search the crates in the guard house of the northern gate of East Ardougne.",
- "It's inside the small building just slightly north of Handelmort Mansion, but not quite outside the gates.",
- "Crate", false, new RSTile(0, 0)), SC_31(
- "Search the crates in the northernmost house in Al Kharid",
- "Search the house with the range in the north-west corner of Al-Kharid",
- "Crate", false, new RSTile(0, 0)), SC_32(
- "Search the crates in the Port Sarim fishing shop", "",
- "Crate", false, new RSTile(0, 0)), SC_33(
- "Search the crates in the shed just north of east Ardougne",
- "It's the building just north of the northern bank.", "Crate",
- false, new RSTile(0, 0)), SC_34(
- "Search the crates just outside the Armour shop in East Ardougne",
- "The armour shop is located in the south west region of the marketplace.",
- "Crate", false, new RSTile(0, 0)), SC_35(
- "Search the crates near a cart in Varrock.",
- "South east in Varrock castle grounds", "Crate", false,
- new RSTile(0, 0)), SC_36(
- "Search the crates of Falador's general store.", "", "Crate",
- false, new RSTile(0, 0)), SC_37(
- "Search the drawers above Varrock's shops.",
- "Check the clothing shop.", "Drawer", false, new RSTile(0, 0)), SC_38(
- "Search the drawers found upstairs in the houses of East Ardougne.",
- "It's over the west side of the river, in the bar just north of the castle.",
- "Drawer", false, new RSTile(0, 0)), SC_39(
- "Search the drawers in a house in Draynor Village.",
- "Search the second most northern most house of Draynor, the one with the wooden fence surrounding the entrance to the door.",
- "Drawer", false, new RSTile(0, 0)), SC_40(
- "Search the drawers in Falador's chainmail shop",
- "The shop is located near the southern gate to the city.",
- "Drawer", false, new RSTile(0, 0)), SC_41(
- "Search the drawers in one of Gertrude's bedrooms",
- "Gertrude is the lady west of Varrock who gives out cats.",
- "Drawer", false, new RSTile(0, 0)), SC_42(
- "Search the drawers in the ground floor of a shop in Yanille.",
- "It's the Hunter shop.", "Drawer", false, new RSTile(0, 0)), SC_43(
- "Search the drawers in the upstairs of a house in Catherby.",
- "House directly north of bank, upstairs", "Drawer", false,
- new RSTile(0, 0)), SC_44(
- "Search the drawers in the upstairs of the bank to the east of Varrock",
- "", "Drawer", false, new RSTile(0, 0)), SC_45(
- "Search the drawers of houses in Burthorpe",
- "It's in the most north-east house, with Hild.", "Drawer",
- false, new RSTile(0, 0)), SC_46(
- "Search the drawers on the first floor of a building overlooking Ardougne's market",
- "It's to the north of the market, behind the Silver Stall, up a staircase.",
- "Drawer", false, new RSTile(0, 0)), SC_47(
- "Search the drawers upstairs in Falador's shield shop.", "",
- "Drawer", false, new RSTile(0, 0)), SC_48(
- "Search the drawers upstairs of houses in eastern part of Falador",
- "It's the house with a range in it, north of the fountain",
- "Drawer", false, new RSTile(0, 0)), SC_49(
- "Search the drawers upstairs in the bank to the East of Varrock",
- "Upstairs of the east bank of Varrock , search the drawers",
- "Drawer", false, new RSTile(0, 0)), SC_50(
- "Search the tents in the imperial guard camp in Burthorpe for some boxes",
- "Search the boxes in the north western tent of Burthorpe",
- "Drawer", false, new RSTile(0, 0)), SC_51(
- "Search the upstairs drawers of a house in a village were pirates are known to have a good time.",
- "Brimhaven house across the road from the southern pub; you need to kill a pirate to get the key.",
- "Drawer", false, new RSTile(0, 0)), SC_52(
- "Search through chests upstairs of houses in the eastern part of Falador",
- "It's a house with a range in it, north of the fountain.",
- "Chest", false, new RSTile(0, 0)), SC_53(
- "Search through some drawers found in Taverley's houses.",
- "In the eastern house of the 3 small houses in south west Taverley",
- "Drawer", false, new RSTile(2894, 3419)), SC_54(
- "Search through some drawers in the upstairs of a house in Rimmington.",
- "In the North-Eastern house of Rimmington.", "Drawer", false,
- new RSTile(0, 0)), SC_55(
- "Search upstairs in the houses of Seers' Village for some drawers.",
- "It's the house with the spinning wheel - the drawers next to the ladders.",
- "Drawer", false, new RSTile(0, 0)), SC_56(
- "Someone watching the fights in the duel arena is your next destination",
- "Talk to Jeed on the upperfloor of the Duel Arena", "Jeed",
- true, new RSTile(0, 0)), SC_57("Speak to a referee.",
- "Speak to the Gnome Ball referee in Tree Gnome Stronghold.",
- "Referee", true, new RSTile(0, 0)), SC_58(
- "Speak to Arhein in Catherby",
- "He is the general store south of the candle shop.", "Arhein",
- true, new RSTile(0, 0)), SC_59("Speak to Brimstail",
- "Gnome Stronghold, west of the south bank inside cave.",
- "Brimstail", true, new RSTile(0, 0)), SC_60(
- "Speak to Donovan the Family Handyman",
- "Speak to Donovan at the Sinclair Mansion", "Donovan", true,
- new RSTile(0, 0)), SC_61(
- "Speak to Doric who lives north of Falador",
- "Speak to the dwarf in the small house near the members gate to Taverley.",
- "Doric", true, new RSTile(0, 0)), SC_62(
- "Speak to Ellis in Al Kharid.",
- "He can be found in the tannery.", "Ellis", true, new RSTile(0,
- 0)), SC_63("Speak to Gaius in Taverley.",
- "Gaius is the owner of the two-handed sword shop in Taverley.",
- "Gaius", true, new RSTile(2885, 3450)), SC_64(
- "Speak to Hajedy",
- "He owns the cart service north of Brimhaven.", "Hajedy", true,
- new RSTile(0, 0)), SC_65("Speak to Hans",
- "He is in the Lumbridge courtyard.", "Hans", true, new RSTile(
- 0, 0)), SC_66(
- "Speak to Hazelmere",
- "On the second floor of the house on the green spider island east of Yanille. Use Fairy Ring code CLS for quick access. Note: This clue is impossible to complete after While Guthix Sleeps.",
- "Hazelmere", true, new RSTile(0, 0)), SC_67(
- "Speak to Kangai Mau", "Inside the food shop in Brimhaven.",
- "Kangai Mau", true, new RSTile(0, 0)), SC_68(
- "Speak to Ned in Draynor Village",
- "Lives in the house north-east of the Wise Old Man", "Ned",
- true, new RSTile(0, 0)), SC_69("Speak to Roavar",
- "Found in Canifis Bar. Fairy Ring CKS is nearby.", "Roavar",
- true, new RSTile(0, 0)), SC_70(
- "Speak to Sir Kay in Camelot Castle",
- "Camelot teleport is recommended, near fountain in courtyard",
- "Sir Kay", true, new RSTile(0, 0)), SC_71(
- "Speak to the bartender of the Blue Moon Inn in Varrock",
- "It's the inn in southern Varrock.", "Bartender", true,
- new RSTile(0, 0)), SC_72(
- "Speak to the staff of Sinclair Mansion", "Louisa the maid",
- "Louisa", true, new RSTile(0, 0)), SC_73("Speak to Ulizius",
- "He is the guard to the Mort Myre Swamp. Use Fairy Ring CKS.",
- "Ulizius", true, new RSTile(0, 0)), SC_74(
- "Talk to the bartender of the Rusty Anchor in Port Sarim.",
- "Speak to the bartender of the pub in the north of Port Sarim",
- "Bartender", true, new RSTile(0, 0)), SC_75(
- "Talk to the Squire in the White Knights' castle in Falador.",
- "Located near the east door to the castle.", "Squire", true,
- new RSTile(0, 0)), SC_76("Talk to Zeke in Al Kharid",
- "He's the person who sells Scimitars.", "Zeke", true,
- new RSTile(0, 0)), SC_77(
- "The treasure is buried in a small building full of bones. Here is a hint: it's not near a graveyard.",
- "It's in the western building at the Rag and Bone Man's site near the Limestone quarry east of Varrock. Dig south of the crate of bones in the building.",
- new RSTile(0, 0));
- public String desc;
- public String solution;
- public String npcObj;
- public boolean npc;
- public RSTile[] tiles;
- private SimpleClue(String desc, String solu, String npcObj,
- boolean npc, RSTile... rsTiles) {
- this.desc = desc;
- this.solution = solu;
- this.npcObj = npcObj;
- this.npc = npc;
- this.tiles = rsTiles;
- }
- private SimpleClue(String desc, String solu, RSTile... rsTiles) {
- this.desc = desc;
- this.solution = solu;
- this.tiles = rsTiles;
- this.npcObj = "DIG";
- this.npc = false;
- }
- }
- @Override
- public void mouseClicked(MouseEvent e) {
- if (toggle.contains(e.getPoint()))
- show = !show;
- }
- @Override
- public void mouseEntered(MouseEvent arg0) {
- }
- @Override
- public void mouseExited(MouseEvent arg0) {
- }
- @Override
- public void mousePressed(MouseEvent arg0) {
- }
- @Override
- public void mouseReleased(MouseEvent arg0) {
- }
- public enum PuzzleBox {
- CASTLE(363, 2749), TROLL(363, 3643), BRIDGE(363, 18913), TREE(363, 3619);
- final int interfaceID;
- final int startCP;
- PuzzleBoxSolver solver;
- int[][] oldPuzzle;
- private PuzzleBox(int interfaceID, int startCP) {
- this.interfaceID = interfaceID;
- this.startCP = startCP;
- }
- public void doStep(Interfaces interfaces) {
- updatePuzzle(interfaces);
- RSComponent[] comps = interfaces.get(interfaceID).getComponent(4)
- .getComponents();
- if (solver != null) {
- Position p = solver.getSwapTile();
- if (p != null) {
- if (comps[(p.y * 5) + p.x].doClick())
- interfaces.sleep(600);
- }
- }
- }
- private int getPieceID(int cpID) {
- if (cpID == -1)
- return -1;
- return cpID - startCP;
- }
- public int[][] loadPuzzle(RSInterface i) {
- RSComponent[] comps = i.getComponent(4).getComponents();
- int dim = (int) Math.sqrt(comps.length);
- int[][] result = new int[dim][dim];
- for (int x = 0; x < dim; x++)
- for (int y = 0; y < dim; y++)
- result[x][y] = getPieceID(comps[(y * dim) + x]
- .getComponentID()) + 1;
- return result;
- }
- private boolean canLoadPuzzle(RSInterface i) {
- RSComponent[] comps = i.getComponent(4).getComponents();
- int dim = (int) Math.sqrt(comps.length);
- for (int x = 0; x < dim; x++)
- for (int y = 0; y < dim; y++) {
- int pid = getPieceID(comps[(y * dim) + x].getComponentID());
- if (pid != -1 && (pid < 0 || pid > 25))
- return false;
- }
- return true;
- }
- public boolean validate(Interfaces interfaces) {
- return interfaces.get(interfaceID) != null
- && interfaces.get(interfaceID).isValid()
- && canLoadPuzzle(interfaces.get(interfaceID));
- }
- private void updatePuzzle(Interfaces interfaces) {
- int[][] newPuzzle = loadPuzzle(interfaces.get(interfaceID));
- if (oldPuzzle == null)
- oldPuzzle = newPuzzle;
- if (solver == null) {
- solver = new PuzzleBoxSolver(
- loadPuzzle(interfaces.get(interfaceID)));
- return;
- }
- Position p = solver.sc.findTile(0);
- if (newPuzzle[p.x][p.y] != 0)
- solver = new PuzzleBoxSolver(
- loadPuzzle(interfaces.get(interfaceID)));
- }
- public void paintPuzzle(Graphics g, Interfaces interfaces) {
- // updatePuzzle(interfaces);
- RSComponent[] comps = interfaces.get(interfaceID).getComponent(4)
- .getComponents();
- g.setColor(Color.GREEN);
- if (solver != null) {
- Position p = solver.getSwapTile();
- if (p != null) {
- Rectangle r = comps[(p.y * 5) + p.x].getArea();
- if (r != null)
- g.drawRect(r.x, r.y, r.width, r.height);
- }
- }
- }
- }
- enum ChallengeScroll {
- CS_1(
- "How many gnomes on the gnomeball field have red patches on their uniforms?",
- "6");
- final String desc;
- final String ans;
- private ChallengeScroll(String desc, String ans) {
- this.desc = desc;
- this.ans = ans;
- }
- }
- static class Position {
- public int x;
- public int y;
- public boolean Error;
- public Position(int x, int y, boolean paramBoolean) {
- setXY(x, y);
- Error = paramBoolean;
- }
- public Position(int x, int y) {
- setXY(x, y);
- Error = false;
- }
- public Position(int x) {
- this.x = x;
- y = 0;
- Error = false;
- }
- public Position() {
- x = 0;
- y = 0;
- Error = false;
- }
- public Position(boolean error) {
- x = 0;
- y = 0;
- Error = error;
- }
- @Override
- public Position clone() {
- return new Position(x, y, Error);
- }
- public Position setXY(int x, int y) {
- this.x = x;
- this.y = y;
- return this;
- }
- public Position setErr() {
- Error = true;
- return this;
- }
- public Position clearErr() {
- Error = false;
- return this;
- }
- }
- static class PuzzleBoxSolver {
- public static final int North = 0;
- public static final int East = 1;
- public static final int South = 2;
- public static final int West = 3;
- public static final int FRotNo = 0;
- public static final int FRotLeft = 1;
- public static final int FRotRight = 2;
- public static final int FRotHorizontal = 3;
- public static final int FRotVertical = 4;
- private Schuif sc;
- private Position swapTile;
- public int getTile(int x, int y) {
- return sc.getTile(x, y);
- }
- public Position getSwapTile() {
- return swapTile;
- }
- public void nextStep() {
- sc.Next();
- }
- public PuzzleBoxSolver(int[][] data) {
- sc = new Schuif(data);
- nextStep();
- }
- class PuzzleState {
- private int ow;
- private int oh;
- private int w;
- private int h;
- private RotateState rotateState;
- private int[][] Field;
- public PuzzleState(int[][] data) {
- ow = data.length;
- oh = data[0].length;
- w = ow;
- h = oh;
- Field = data;
- rotateState = new RotateState();
- }
- public int originalWidth() {
- return ow;
- }
- public int originalHeight() {
- return oh;
- }
- public int width() {
- return w;
- }
- public int height() {
- return h;
- }
- public RotateState ResetRotate() {
- w = ow;
- h = oh;
- rotateState.xDir = 0;
- rotateState.yDir = 1;
- return rotateState;
- }
- public RotateState Rotate(int dir) {
- int i;
- int j;
- if (Math.abs(rotateState.xDir - rotateState.yDir) == 1) {
- if ((rotateState.xDir == 0) || (rotateState.xDir == 1)) {
- i = rotateState.xDir + 2;
- j = rotateState.yDir + 2;
- } else {
- i = rotateState.xDir - 2;
- j = rotateState.yDir - 2;
- }
- } else if ((rotateState.xDir == 0) || (rotateState.xDir == 2)) {
- i = rotateState.xDir + 1;
- j = rotateState.yDir + 1;
- } else {
- i = rotateState.xDir - 1;
- j = rotateState.yDir - 1;
- }
- switch (dir) {
- case FRotLeft:
- rotateState.xDir = rotateState.yDir;
- rotateState.yDir = j;
- j = w;
- w = h;
- h = j;
- break;
- case FRotRight:
- rotateState.yDir = rotateState.xDir;
- rotateState.xDir = i;
- j = w;
- w = h;
- h = j;
- break;
- case FRotHorizontal:
- j = rotateState.xDir;
- rotateState.xDir = rotateState.yDir;
- rotateState.yDir = j;
- break;
- case FRotVertical:
- rotateState.xDir = i;
- rotateState.yDir = j;
- break;
- case FRotNo:
- }
- return rotateState;
- }
- public RotateState Rotate(RotateState paramRotateState) {
- switch (paramRotateState.xDir * 10 + paramRotateState.yDir) {
- case 1:
- w = ow;
- h = oh;
- rotateState.xDir = 0;
- rotateState.yDir = 1;
- break;
- case 2:
- w = oh;
- h = ow;
- rotateState.xDir = 0;
- rotateState.yDir = 2;
- break;
- case 10:
- w = ow;
- h = oh;
- rotateState.xDir = 1;
- rotateState.yDir = 0;
- break;
- case 13:
- w = oh;
- h = ow;
- rotateState.xDir = 1;
- rotateState.yDir = 3;
- break;
- case 20:
- w = oh;
- h = ow;
- rotateState.xDir = 2;
- rotateState.yDir = 0;
- break;
- case 23:
- w = ow;
- h = oh;
- rotateState.xDir = 2;
- rotateState.yDir = 3;
- break;
- case 31:
- w = oh;
- h = ow;
- rotateState.xDir = 3;
- rotateState.yDir = 1;
- break;
- case 32:
- w = ow;
- h = oh;
- rotateState.xDir = 3;
- rotateState.yDir = 2;
- break;
- }
- return rotateState;
- }
- public RotateState getRotate() {
- return rotateState;
- }
- public Position GRel(Position orig) {
- Position dest = orig.clone();
- switch (rotateState.xDir * 10 + rotateState.yDir) {
- case 2:
- dest.x = orig.y;
- dest.y = orig.x;
- break;
- case 10:
- dest.x = (ow - 1 - orig.x);
- break;
- case 13:
- dest.x = orig.y;
- dest.y = (ow - 1 - orig.x);
- break;
- case 20:
- dest.x = (oh - 1 - orig.y);
- dest.y = orig.x;
- break;
- case 23:
- dest.y = (oh - 1 - orig.y);
- break;
- case 31:
- dest.x = (oh - 1 - orig.y);
- dest.y = (ow - 1 - orig.x);
- break;
- case 32:
- dest.x = (ow - 1 - orig.x);
- dest.y = (oh - 1 - orig.y);
- break;
- case 1:
- }
- return dest;
- }
- public Position rotatedPos(Position orig) {
- Position dest = orig.clone();
- switch (rotateState.xDir * 10 + rotateState.yDir) {
- case 2:
- dest.x = orig.y;
- dest.y = orig.x;
- break;
- case 10:
- dest.x = (ow - 1 - orig.x);
- break;
- case 13:
- dest.x = (ow - 1 - orig.y);
- dest.y = orig.x;
- break;
- case 20:
- dest.x = orig.y;
- dest.y = (oh - 1 - orig.x);
- break;
- case 23:
- dest.y = (oh - 1 - orig.y);
- break;
- case 31:
- dest.x = (ow - 1 - orig.y);
- dest.y = (oh - 1 - orig.x);
- break;
- case 32:
- dest.x = (ow - 1 - orig.x);
- dest.y = (oh - 1 - orig.y);
- break;
- case 1:
- }
- return dest;
- }
- public int getRotatedTile(Position pos) {
- Position nPos = rotatedPos(pos);
- return Field[nPos.x][nPos.y];
- }
- public void setRotatedTile(Position pos, int value) {
- Position nPos = rotatedPos(pos);
- // Field[nPos.x][nPos.y] = value;
- if (value == 0)
- swapTile = nPos;
- }
- public int getRotatedTile(int x, int y) {
- return getRotatedTile(new Position(x, y));
- }
- public void setRotatedTile(int x, int y, int value) {
- setRotatedTile(new Position(x, y), value);
- }
- public int getTile(Position pos) {
- return Field[pos.x][pos.y];
- }
- public int getTile(int x, int y) {
- return getTile(new Position(x, y));
- }
- }
- class Schuif {
- private PuzzleState pState;
- private Position LastFill;
- private void LongMove(Position paramPosition1,
- Position paramPosition2, int paramInt1, int paramInt2) {
- Position pos1 = paramPosition1.clone();
- Position pos2 = paramPosition2.clone();
- RotateState newRState = StdSquare(pos1, pos2);
- if (EToSquare(pos2, paramInt1, paramInt2)) {
- Position pos3 = findTile(0);
- switch ((pos3.x - pos2.x + 1) * 10 + pos3.y - pos2.y + 1) {
- case 0:
- Move(1);
- break;
- case 10:
- Move(2);
- break;
- case 20:
- Move(3);
- break;
- case 1:
- if (pos1.x < pos2.x)
- Move(1);
- else if (pos2.x == pState.width() - 1)
- Move(0);
- else if ((pState.getRotatedTile(pos2.x - 1, pos2.y - 1) != paramInt1)
- && (pState.getRotatedTile(pos2.x - 1,
- pos2.y - 1) != paramInt2))
- Move(0);
- else
- Move(2);
- break;
- case 21:
- Move(0);
- break;
- case 2:
- if (pos1.x < pos2.x)
- Move(0);
- else if (pos2.x == pState.width() - 1)
- Move(0);
- else if ((pState.getRotatedTile(pos2.x - 1, pos2.y - 1) != paramInt1)
- && (pState.getRotatedTile(pos2.x - 1,
- pos2.y - 1) != paramInt2))
- Move(0);
- else
- Move(1);
- break;
- case 12:
- if (pos2.x == pState.width() - 1)
- Move(3);
- else if (pos1.x < pos2.x)
- Move(3);
- else if ((pos2.x > 0)
- && (pState.getRotatedTile(pos2.x - 1,
- pos2.y - 1) != paramInt1)
- && (pState.getRotatedTile(pos2.x - 1,
- pos2.y - 1) != paramInt2)
- && (pState.getRotatedTile(pos2.x - 1, pos2.y) != paramInt1)
- && (pState.getRotatedTile(pos2.x - 1, pos2.y) != paramInt2))
- Move(3);
- else
- Move(1);
- break;
- case 22:
- Move(0);
- break;
- }
- }
- pState.Rotate(newRState);
- }
- private boolean EToSquare(Position pos, int paramInt1, int paramInt2) {
- Position pos1 = pState.rotatedPos(pos);
- RotateState newRState = pState.getRotate().clone();
- pState.ResetRotate();
- Position pos2 = findTile(0);
- if (pos2.y + 1 < pos1.y) {
- SGatAf(2, paramInt1, paramInt2);
- } else if (pos2.y > pos1.y + 1) {
- SGatAf(0, paramInt1, paramInt2);
- } else if (pos2.x + 1 < pos1.x) {
- SGatAf(1, paramInt1, paramInt2);
- } else if (pos2.x > pos1.x + 1) {
- SGatAf(3, paramInt1, paramInt2);
- } else {
- pState.Rotate(newRState);
- return true;
- }
- pState.Rotate(newRState);
- return false;
- }
- private void SGatAf(int paramInt1, int paramInt2, int paramInt3) {
- Position nPos = findTile(0);
- switch (paramInt1) {
- case 0:
- if (nPos.y == 0) {
- SGatAf(3, paramInt2, paramInt3);
- return;
- }
- if ((pState.getRotatedTile(nPos.x, nPos.y - 1) == paramInt2)
- || (pState.getRotatedTile(nPos.x, nPos.y - 1) == paramInt3)) {
- SGatAf(3, paramInt2, paramInt3);
- return;
- }
- Move(0);
- return;
- case 1:
- if (nPos.x == pState.width() - 1) {
- SGatAf(0, paramInt2, paramInt3);
- return;
- }
- if ((pState.getRotatedTile(nPos.x + 1, nPos.y) == paramInt2)
- || (pState.getRotatedTile(nPos.x + 1, nPos.y) == paramInt3)) {
- SGatAf(0, paramInt2, paramInt3);
- return;
- }
- Move(1);
- return;
- case 2:
- if (nPos.y == pState.height() - 1) {
- SGatAf(1, paramInt2, paramInt3);
- return;
- }
- if ((pState.getRotatedTile(nPos.x, nPos.y + 1) == paramInt2)
- || (pState.getRotatedTile(nPos.x, nPos.y + 1) == paramInt3)) {
- SGatAf(1, paramInt2, paramInt3);
- return;
- }
- Move(2);
- return;
- case 3:
- if (nPos.x == 0) {
- SGatAf(2, paramInt2, paramInt3);
- return;
- }
- if ((pState.getRotatedTile(nPos.x - 1, nPos.y) == paramInt2)
- || (pState.getRotatedTile(nPos.x - 1, nPos.y) == paramInt3)) {
- SGatAf(2, paramInt2, paramInt3);
- return;
- }
- Move(3);
- return;
- }
- }
- private RotateState StdSquare(Position paramPosition1,
- Position paramPosition2) {
- RotateState newRState = pState.getRotate().clone();
- Position pos1 = pState.rotatedPos(paramPosition1);
- Position pos2 = pState.rotatedPos(paramPosition2);
- pState.ResetRotate();
- if (pos1.y == pos2.y) {
- if (pos1.x > pos2.x)
- pState.Rotate(1);
- else
- pState.Rotate(2);
- } else {
- if (pos1.y > pos2.y) {
- pState.Rotate(4);
- }
- if (pos1.x > pos2.x) {
- pState.Rotate(3);
- }
- }
- pos1 = pState.GRel(pos1);
- pos2 = pState.GRel(pos2);
- paramPosition1.x = pos1.x;
- paramPosition1.y = pos1.y;
- paramPosition1.Error = pos1.Error;
- paramPosition2.x = pos2.x;
- paramPosition2.y = pos2.y;
- paramPosition2.Error = pos2.Error;
- return newRState;
- }
- public Schuif(int[][] data) {
- pState = new PuzzleState(data);
- LastFill = new Position();
- }
- public boolean Move(int paramInt) {
- Position nPos = findTile(0);
- switch (paramInt) {
- case North:
- if (nPos.y == 0)
- return true;
- pState.setRotatedTile(nPos,
- pState.getRotatedTile(nPos.x, nPos.y - 1));
- pState.setRotatedTile(nPos.x, nPos.y - 1, 0);
- break;
- case East:
- if (nPos.x == pState.width() - 1)
- return true;
- pState.setRotatedTile(nPos,
- pState.getRotatedTile(nPos.x + 1, nPos.y));
- pState.setRotatedTile(nPos.x + 1, nPos.y, 0);
- break;
- case South:
- if (nPos.y == pState.height() - 1)
- return true;
- pState.setRotatedTile(nPos,
- pState.getRotatedTile(nPos.x, nPos.y + 1));
- pState.setRotatedTile(nPos.x, nPos.y + 1, 0);
- break;
- case West:
- if (nPos.x == 0)
- return true;
- pState.setRotatedTile(nPos,
- pState.getRotatedTile(nPos.x - 1, nPos.y));
- pState.setRotatedTile(nPos.x - 1, nPos.y, 0);
- break;
- }
- LastFill = pState.rotatedPos(nPos);
- return false;
- }
- public int height() {
- return pState.originalWidth();
- }
- public int width() {
- return pState.originalHeight();
- }
- public Position GLastFill() {
- return LastFill;
- }
- public Position findTile(int paramInt) {
- Position nPos = new Position();
- for (int i = 0; i < pState.height(); i++)
- for (int j = 0; j < pState.width(); j++)
- if (pState.getRotatedTile(j, i) == paramInt)
- return new Position(j, i);
- return nPos.setErr();
- }
- public int GDes(Position pos) {
- Position nPos = pState.rotatedPos(pos);
- if ((nPos.x == pState.width() - 1)
- && (nPos.y == pState.height() - 1))
- return 0;
- return nPos.y * pState.originalWidth() + nPos.x + 1;
- }
- public int GDes(int x, int y) {
- return GDes(new Position(x, y));
- }
- public int getTile(Position pos) {
- return pState.getTile(pos);
- }
- public int getTile(int x, int y) {
- return getTile(new Position(x, y));
- }
- public boolean Next() {
- Position pos1 = new Position(true);
- findTile(0);
- Position pos2 = new Position();
- //Position pos3 = new Position();
- int k = 0;
- int m = 1;
- int i;
- for (int j = 0; j < pState.height() - 2; j++) {
- for (i = 0; i < pState.width(); i++) {
- if (pState.getRotatedTile(i, j) == GDes(i, j))
- continue;
- pos1.setXY(i, j);
- pos1.clearErr();
- k = GDes(i, j);
- m = i == pState.width() - 1 ? 0 : GDes(i + 1, j);
- pos2 = findTile(k);
- //pos3 = findTile(m);
- break;
- }
- if (!pos1.Error)
- break;
- }
- if (pos1.Error) {
- pos1.setErr();
- for (i = 0; i < pState.width() - 2; i++) {
- if ((pState.getRotatedTile(i, pState.height() - 2) == GDes(
- i, pState.height() - 2))
- && (pState.getRotatedTile(i,
- pState.height() - 1) == GDes(i,
- pState.height() - 1)))
- continue;
- pos1.clearErr();
- break;
- }
- if (pos1.Error) {
- if ((pState.getRotatedTile(pState.width() - 2,
- pState.height() - 2) == GDes(
- pState.width() - 2, pState.height() - 2))
- && (pState.getRotatedTile(width() - 1,
- height() - 1) == 0))
- return false;
- if (pState.getRotatedTile(width() - 2, height() - 2) == 0)
- Move(1);
- else if (pState.getRotatedTile(width() - 1,
- height() - 2) == 0)
- Move(2);
- else if (pState.getRotatedTile(width() - 1,
- height() - 1) == 0)
- Move(3);
- else if (pState.getRotatedTile(width() - 2,
- height() - 1) == 0)
- Move(0);
- return true;
- }
- RotateState newRState = pState.getRotate().clone();
- pState.Rotate(4);
- pState.Rotate(2);
- boolean bool = Next();
- pState.Rotate(newRState);
- return bool;
- }
- if ((pos1.x == pState.width() - 2)
- && (pState.getRotatedTile(pos1) == 0)
- && (pState.getRotatedTile(pos1.x + 1, pos1.y) == k)
- && (pState.getRotatedTile(pos1.x + 1, pos1.y + 1) == m)) {
- Move(1);
- } else if ((pos1.x == pState.width() - 2)
- && (pState.getRotatedTile(pos1.x + 1, pos1.y + 1) == 0)
- && (pState.getRotatedTile(pos1.x, pos1.y + 1) == k)
- && (pState.getRotatedTile(pos1.x + 1, pos1.y + 1) == m)) {
- Move(0);
- } else if ((pos1.x == pState.width() - 2)
- && (pState.getRotatedTile(pos1.x, pos1.y + 2) == 0)
- && (pState.getRotatedTile(pos1.x + 1, pos1.y) == k)
- && (pState.getRotatedTile(pos1.x + 1, pos1.y + 1) == m)) {
- Move(0);
- } else if ((pos1.x == pState.width() - 2)
- && (pState.getRotatedTile(pos1.x + 1, pos1.y + 2) == 0)
- && (pState.getRotatedTile(pos1.x + 1, pos1.y) == k)
- && (pState.getRotatedTile(pos1.x + 1, pos1.y + 1) == m)) {
- Move(3);
- } else if ((pos1.x == pState.width() - 2)
- && (pState.getRotatedTile(pos1.x + 1, pos1.y + 1) == 0)
- && (pState.getRotatedTile(pos1.x + 1, pos1.y) == k)
- && (pState.getRotatedTile(pos1.x + 1, pos1.y + 2) == m)) {
- Move(2);
- } else if ((pos1.x == pState.width() - 2)
- && (pState.getRotatedTile(pos1.x + 1, pos1.y) == 0)
- && (pState.getRotatedTile(pos1.x + 1, pos1.y + 1) == k)
- && (pState.getRotatedTile(pos1.x + 1, pos1.y + 2) == m)) {
- Move(2);
- } else if ((pos1.x == pState.width() - 2)
- && (pState.getRotatedTile(pos1) == 0)
- && (pState.getRotatedTile(pos1.x + 1, pos1.y + 1) == k)
- && (pState.getRotatedTile(pos1.x + 1, pos1.y + 2) == m)) {
- Move(1);
- } else if ((pos1.x == pState.width() - 2)
- && (pState.getRotatedTile(pos1.x, pos1.y + 1) == 0)
- && (pState.getRotatedTile(pos1.x + 1, pos1.y + 1) == k)
- && (pState.getRotatedTile(pos1.x + 1, pos1.y + 2) == m)) {
- Move(0);
- } else if ((pos1.x == pState.width() - 2)
- && (pState.getRotatedTile(pos1.x + 1, pos1.y + 1) == 0)
- && (pState.getRotatedTile(pos1.x, pos1.y + 1) == k)
- && (pState.getRotatedTile(pos1.x + 1, pos1.y + 2) == m)) {
- Move(3);
- } else if ((pos1.x == pState.width() - 2)
- && (pState.getRotatedTile(pos1.x + 1, pos1.y) == 0)
- && (pState.getRotatedTile(pos1.x, pos1.y + 1) == k)
- && (pState.getRotatedTile(pos1.x + 1, pos1.y + 2) == m)) {
- Move(2);
- } else if ((pos1.x == pState.width() - 2)
- && (pState.getRotatedTile(pos1) == 0)
- && (pState.getRotatedTile(pos1.x, pos1.y + 1) == k)
- && (pState.getRotatedTile(pos1.x + 1, pos1.y + 2) == m)) {
- Move(1);
- } else if ((pos1.x == pState.width() - 1)
- && (pState.getRotatedTile(pos1.x - 1, pos1.y + 1) == 0)
- && (pState.getRotatedTile(pos1.x, pos1.y + 2) == k)) {
- Move(0);
- } else if (pos1.x == pState.width() - 1) {
- if ((pState.getRotatedTile(pos1.x, pos1.y + 2) == k)
- && (pState.getRotatedTile(pos1.x - 1, pos1.y + 2) == 0)) {
- Move(0);
- } else if (pState.getRotatedTile(pos1) == 0) {
- Move(2);
- } else if ((pos2.x == pos1.x - 1) && (pos2.y == pos1.y + 2)) {
- LongMove(new Position(pos2.x + 1, pos2.y), pos2, k, 0);
- } else {
- pos1.x -= 1;
- pos1.y += 2;
- LongMove(pos1, pos2, k, 0);
- }
- } else {
- if (pos1.x != 0) {
- k = GDes(pos1.x - 1, pos1.y);
- }
- if (pos1.x > pos2.x) {
- pos1.y += 2;
- }
- LongMove(pos1, pos2, k, 0);
- }
- return true;
- }
- public boolean isSolved() {
- for (int i = 0; i < pState.height(); i++)
- for (int j = 0; j < pState.width(); j++)
- if (pState.getRotatedTile(j, i) != GDes(j, i))
- return false;
- return true;
- }
- }
- class RotateState {
- public int xDir;
- public int yDir;
- public RotateState(int xDir, int yDir) {
- this.xDir = xDir;
- this.yDir = yDir;
- }
- public RotateState(int xDir) {
- this.xDir = xDir;
- yDir = 1;
- }
- public RotateState() {
- xDir = 0;
- yDir = 1;
- }
- @Override
- public RotateState clone() {
- return new RotateState(xDir, yDir);
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment