├── ArdyKnights ├── Goldrunner.java └── RandomHandler.java ├── Balloon Laws ├── Law.java └── RandomHandler.java ├── Barbarian Rod Fishing ├── Barby.java └── RandomHandler.java ├── Catherby cook + catch (Tuna) └── Fishing.java ├── Dart Master └── DartSmither.java ├── Farmers Market ├── Farmer.java ├── PinSolver.java └── RandomHandler.java ├── Fletcher └── Fletch.java ├── Fossil Trees ├── RandomHandler.java └── Teaky.java ├── Garbage Combat ├── RandomHandler.java └── Slaybooty.java ├── GlassBlower └── Blow.java ├── Lova Favor └── Mine.java ├── Lum Range └── Cook.java ├── Lunar Spin Flax ├── Panties.java └── RandomHandler.java ├── NMZ ├── GUI.java ├── NMZ.java ├── PinSolver.java └── RandomHandler.java ├── README.md ├── Rogues Den Solver ├── RandomHandler.java └── Rogue.java ├── Seers Agility ├── RandomHandler.java └── Sears.java ├── Shitty Blackjack ├── RandomHandler.java └── Steal.java ├── Shitty Motherload ├── Mom.java └── RandomHandler.java ├── Slamandr Catcher ├── Hunt.java └── RandomHandler.java ├── Tabby ├── GUI.java ├── RandomHandler.java └── Tab.java ├── Veteran Void ├── RandomHandler.java └── Void.java └── WinterThot ├── RandomHandler.java └── Thot.java /ArdyKnights/Goldrunner.java: -------------------------------------------------------------------------------- 1 | import org.rspeer.runetek.adapter.scene.Npc; 2 | import org.rspeer.runetek.adapter.scene.Player; 3 | import org.rspeer.runetek.adapter.scene.SceneObject; 4 | import org.rspeer.runetek.api.commons.Time; 5 | import org.rspeer.runetek.api.component.Bank; 6 | import org.rspeer.runetek.api.component.Interfaces; 7 | import org.rspeer.runetek.api.component.tab.EquipmentSlot; 8 | import org.rspeer.runetek.api.component.tab.Inventory; 9 | import org.rspeer.runetek.api.component.tab.Skill; 10 | import org.rspeer.runetek.api.component.tab.Skills; 11 | import org.rspeer.runetek.api.local.Health; 12 | import org.rspeer.runetek.api.movement.position.Area; 13 | import org.rspeer.runetek.api.scene.Npcs; 14 | import org.rspeer.runetek.api.scene.Players; 15 | import org.rspeer.runetek.api.scene.SceneObjects; 16 | import org.rspeer.runetek.event.listeners.ChatMessageListener; 17 | import org.rspeer.runetek.event.listeners.RenderListener; 18 | import org.rspeer.runetek.event.types.ChatMessageEvent; 19 | import org.rspeer.runetek.event.types.ChatMessageType; 20 | import org.rspeer.runetek.event.types.RenderEvent; 21 | import org.rspeer.script.Script; 22 | import org.rspeer.script.ScriptCategory; 23 | import org.rspeer.script.ScriptMeta; 24 | import org.rspeer.ui.Log; 25 | 26 | import javax.imageio.ImageIO; 27 | import java.awt.*; 28 | import java.awt.image.BufferedImage; 29 | import java.io.File; 30 | import java.io.IOException; 31 | import java.security.SecureRandom; 32 | import java.text.DecimalFormat; 33 | import java.time.Instant; 34 | 35 | @ScriptMeta(name = "Ardy Knight Milker", desc = "Milks the fuk out of Ardy Knights", developer = "Koko", version = 1.0, category = ScriptCategory.THIEVING) 36 | public class Goldrunner extends Script implements RenderListener, ChatMessageListener { 37 | 38 | private int startThieveXP, startThieveLvl, steal = 0, fail = 0, eatPercent, openPouch; 39 | private boolean takeScreenie = false; 40 | private String status; 41 | private long startTime, lastSteal = 0; 42 | private RandomHandler randomEvent = new RandomHandler(); 43 | private Area westBank = Area.rectangular(2649, 3287, 2655, 3280); 44 | 45 | @Override 46 | public void onStart() { 47 | startTime = System.currentTimeMillis(); 48 | startThieveXP = Skills.getExperience(Skill.THIEVING); 49 | startThieveLvl = Skills.getLevelAt(startThieveXP); 50 | status = "Loading up!"; 51 | eatPercent = random(40, 60); 52 | openPouch = random(0, 28); 53 | } 54 | 55 | @Override 56 | public int loop() { 57 | Player Local = Players.getLocal(); 58 | randomEvent.checkLamp(); 59 | randomEvent.findNearbyRandoms(); 60 | if (randomEvent.doWeHaveRandom()) { 61 | takeScreenie = true; 62 | randomEvent.handleRandom(); 63 | } else if (Health.getPercent() > eatPercent) { 64 | status = "Looking for trouble"; 65 | if (Inventory.getFirst("Coin pouch") != null) { 66 | if (Inventory.getCount(true, "Coin pouch") == 28) { 67 | Inventory.getFirst("Coin pouch").interact(x -> true); 68 | Time.sleepUntil(() -> Inventory.getFirst("Coin pouch") == null, 1250, 10000); 69 | } 70 | } 71 | Npc knight = Npcs.getNearest(id -> id.getId() == 3108 && westBank.contains(id)); 72 | if (knight != null) { 73 | if (Local.getAnimation() == 424) { 74 | status = "Stunned"; 75 | if (Inventory.getFirst("Coin pouch") != null) { 76 | if (Inventory.getCount(true, "Coin pouch") > openPouch) { 77 | Inventory.getFirst("Coin pouch").interact(x -> true); 78 | Time.sleepUntil(() -> Inventory.getFirst("Coin pouch") == null, 1250, 10000); 79 | openPouch = random(0, 25); 80 | } 81 | } 82 | Time.sleep(random(4000, 5000)); 83 | if (EquipmentSlot.NECK.getItem() == null) { 84 | if (Inventory.contains("Dodgy necklace")) { 85 | Inventory.getFirst("Dodgy necklace").interact("Wear"); 86 | Time.sleepUntil(() -> EquipmentSlot.NECK.getItem() != null, random(200, 300), 3000); 87 | } 88 | } 89 | } else { 90 | status = "LOOT! Last action(" + (System.currentTimeMillis() - lastSteal) + "ms)"; 91 | knight.interact("Pickpocket"); 92 | lastSteal = System.currentTimeMillis(); 93 | Log.info("Stealing from knight at " + knight.getPosition()); 94 | Time.sleep(random(150, 210)); 95 | } 96 | } else { 97 | Log.info("No Knight no gold!"); 98 | setStopping(true); 99 | } 100 | } else { 101 | if (Inventory.contains(item -> item.containsAction("Drink"))) { 102 | int eat = random(2, 5); 103 | eatPercent = random(40, 60); 104 | for (int i = 0; i < eat; i++) { 105 | if (Inventory.contains(item -> item.containsAction("Drink"))) { 106 | Inventory.getFirst(item -> item.containsAction("Drink")).interact("Drink"); 107 | Time.sleepUntil(Local::isAnimating, 1250, 4000); 108 | Time.sleep(random(500, 600)); 109 | } else 110 | break; 111 | } 112 | for (int i = 0; i < 10; i++) { 113 | if (Inventory.contains("Jug")) { 114 | Inventory.getFirst("Jug").interact("Drop"); 115 | Time.sleep(random(500, 600)); 116 | } else 117 | break; 118 | } 119 | } else { 120 | status = "Getting more food!"; 121 | SceneObject booth = SceneObjects.getNearest("Bank booth"); 122 | if (booth != null) { 123 | if (!Bank.isOpen()) { 124 | booth.interact("Bank"); 125 | Time.sleepUntil(() -> Bank.isOpen() || Interfaces.isOpen(213), 500, 5000); 126 | } 127 | if (Interfaces.isOpen(213)) { 128 | status = "Waiting for Bank PIN entry"; 129 | } 130 | if (Bank.isOpen()) { 131 | if (Bank.contains("Jug of wine")) { 132 | Bank.withdraw("Jug of wine", 20); 133 | Time.sleepUntil(() -> Inventory.contains("Jug of wine"), 500, 5000); 134 | Time.sleep(random(500, 750)); 135 | } else { 136 | Log.info("Ran out of food!"); 137 | setStopping(true); 138 | } 139 | if (Bank.contains("Dodgy necklace")) { 140 | Bank.withdrawAll("Dodgy necklace"); 141 | Time.sleepUntil(() -> Inventory.contains("Dodgy necklace"), 400, 4000); 142 | } 143 | Bank.close(); 144 | } 145 | } 146 | } 147 | } 148 | return random(200, 300); 149 | } 150 | 151 | @Override 152 | public void notify(RenderEvent renderEvent) { 153 | int nextLvlXp = Skills.getExperienceToNextLevel(Skill.THIEVING); 154 | int gainedXp = Skills.getExperience(Skill.THIEVING) - startThieveXP; 155 | double ttl = (nextLvlXp / (getPerHour(gainedXp) / 60.0 / 60.0 / 1000.0)); 156 | if (nextLvlXp == 0) { 157 | ttl = 0; 158 | } 159 | Graphics g = renderEvent.getSource(); 160 | Graphics2D g2 = (Graphics2D) g; 161 | g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 162 | 163 | g2.setColor(new Color(0, 0, 0, 128)); 164 | g2.fillRect(20, 235, 200, 95); 165 | g2.setColor(Color.WHITE); 166 | g2.drawRect(20, 235, 200, 95); 167 | 168 | int x = 25; 169 | int y = 250; 170 | DecimalFormat formatter = new DecimalFormat("#,###.##"); 171 | FontMetrics metrics = g2.getFontMetrics(); 172 | 173 | double thieveRate = ((double) steal / (double) (steal + fail)) * 100; 174 | String lvlsGained = (Skills.getLevelAt(Skills.getExperience(Skill.THIEVING)) - startThieveLvl) > 0 ? " (+" + (Skills.getLevelAt(Skills.getExperience(Skill.THIEVING)) - startThieveLvl) + ")" : ""; 175 | 176 | g2.setColor(Color.WHITE); 177 | g2.drawString("Thieving lvl: ", x, y); 178 | g2.setColor(new Color(238, 130, 238)); 179 | int width = metrics.stringWidth("Thieving lvl: "); 180 | g2.drawString(Skills.getLevelAt(Skills.getExperience(Skill.THIEVING)) + lvlsGained, x + width, y); 181 | g2.setColor(Color.WHITE); 182 | width = metrics.stringWidth("Thieving lvl: " + Skills.getLevelAt(Skills.getExperience(Skill.THIEVING)) + lvlsGained); 183 | g2.drawString(" (TTL: " + formatTime(Double.valueOf(ttl).longValue()) + ")", x + width, y); 184 | 185 | g2.drawString("XP Gained: ", x, y += 15); 186 | width = metrics.stringWidth("XP Gained: "); 187 | g2.setColor(Color.YELLOW); 188 | g2.drawString(formatter.format(gainedXp), x + width, y); 189 | width = metrics.stringWidth("XP Gained: " + formatter.format(gainedXp)); 190 | g2.setColor(Color.WHITE); 191 | g2.drawString(" (" + formatter.format(getPerHour(gainedXp)) + "/hr)", x + width, y); 192 | 193 | g2.drawString("Gold Stolen: ", x, y += 15); 194 | width = metrics.stringWidth("Gold Stolen: "); 195 | g2.setColor(Color.ORANGE); 196 | g2.drawString(formatter.format(steal * 50 * 2), x + width, y); 197 | width = metrics.stringWidth("Gold Stolen: " + formatter.format(steal * 50 * 2)); 198 | g2.drawString(" (" + formatter.format(getPerHour(steal * 50 * 2)) + "/hr)", x + width, y); 199 | 200 | g2.setColor(Color.WHITE); 201 | g2.drawString("Stunner: ", x, y += 15); 202 | width = metrics.stringWidth("Stunner: "); 203 | g2.setColor(Color.YELLOW); 204 | g2.drawString(formatter.format(fail) + "/" + formatter.format(steal + fail), x + width, y); 205 | width = metrics.stringWidth("Stunner: " + formatter.format(fail) + "/" + formatter.format(steal + fail)); 206 | g2.setColor(Color.WHITE); 207 | g2.drawString(" (" + formatter.format(thieveRate) + "% success)", x + width, y); 208 | 209 | g2.setColor(Color.WHITE); 210 | g2.drawString("Elapsed Time: ", x, y += 15); 211 | width = metrics.stringWidth("Elapsed Time: "); 212 | g2.setColor(Color.PINK); 213 | g2.drawString(formatTime(System.currentTimeMillis() - startTime), x + width, y); 214 | 215 | g2.setColor(Color.WHITE); 216 | g2.drawString("Status: ", x, y += 15); 217 | width = metrics.stringWidth("Status: "); 218 | g2.setColor(Color.YELLOW); 219 | g2.drawString(status, x + width, y); 220 | 221 | 222 | //Hide username 223 | if (Players.getLocal() != null) { 224 | Color tanColor = new Color(204, 187, 154); 225 | g2.setColor(tanColor); 226 | g2.fillRect(9, 459, 91, 15); 227 | } 228 | 229 | if (takeScreenie) { 230 | TakeScreenshot(renderEvent.getProvider().getImage()); 231 | takeScreenie = false; 232 | } 233 | 234 | //Hide username 235 | if (Players.getLocal() != null) { 236 | Color tanColor = new Color(204, 187, 154); 237 | g2.setColor(tanColor); 238 | g2.fillRect(9, 459, 91, 15); 239 | } 240 | } 241 | 242 | @Override 243 | public void notify(ChatMessageEvent event) { 244 | String m = event.getMessage().toLowerCase(); 245 | if (event.getType().equals(ChatMessageType.FILTERED)) { 246 | if ((m.contains("you pick the") && (m.endsWith("pocket.")))) { 247 | steal++; 248 | } 249 | if (m.contains("you fail to pick")) { 250 | fail++; 251 | } 252 | } 253 | } 254 | 255 | @Override 256 | public void onStop() { 257 | int lvls = (Skills.getLevelAt(Skills.getExperience(Skill.THIEVING)) - startThieveLvl); 258 | Log.info("Hope you had fun stealing " + (steal * 50 * 2) + " gold! Gained " + (Skills.getExperience(Skill.THIEVING) - startThieveXP) + " thieving XP (+" + (lvls > 0 ? lvls : "0") + " levels)."); 259 | } 260 | 261 | private int random(int min, int max) { 262 | SecureRandom random = new SecureRandom(); 263 | return (random.nextInt(max - min + 1) + min); 264 | } 265 | 266 | private void TakeScreenshot(Image img) { 267 | Log.info("Attempting to take a screenshot"); 268 | BufferedImage buffered = (BufferedImage) img; 269 | 270 | //Get the current date to save in the screenshot folder 271 | long now = Instant.now().getEpochSecond(); 272 | 273 | try { 274 | //Create a folder with my forum name to tell the user which script created this folder 275 | if (!new File(getDataDirectory() + "\\Koko\\ArdyKnights\\Screenshots").exists()) { 276 | new File(getDataDirectory() + "\\Koko\\ArdyKnights\\Screenshots").mkdirs(); 277 | } 278 | //save the image to the folder and rename all player spaces with underscores 279 | try { 280 | if (ImageIO.write( 281 | buffered, 282 | "png", 283 | new File(getDataDirectory() + "\\Koko\\ArdyKnights\\Screenshots\\" + now + "-" + Players.getLocal().getName().replaceAll("\\u00a0", "_") + ".png"))) { 284 | Log.info("Saved " + getDataDirectory() + "\\Koko\\ArdyKnights\\Screenshots\\" + now + "-" + Players.getLocal().getName().replaceAll("\\u00a0", "_") + ".png"); 285 | } 286 | } catch (IOException e) { 287 | Log.info("Error! " + e.getMessage()); 288 | } 289 | } catch (Exception e) { 290 | Log.info("Error! " + e.getMessage()); 291 | } 292 | } 293 | 294 | private String formatTime(final long ms) { 295 | long s = ms / 1000, m = s / 60, h = m / 60; 296 | s %= 60; 297 | m %= 60; 298 | h %= 24; 299 | return String.format("%02d:%02d:%02d", h, m, s); 300 | } 301 | 302 | private double getPerHour(double value) { 303 | if ((System.currentTimeMillis() - startTime) > 0) { 304 | return value * 3600000d / (System.currentTimeMillis() - startTime); 305 | } else { 306 | return 0; 307 | } 308 | } 309 | } -------------------------------------------------------------------------------- /ArdyKnights/RandomHandler.java: -------------------------------------------------------------------------------- 1 | import org.rspeer.runetek.adapter.component.InterfaceComponent; 2 | import org.rspeer.runetek.adapter.scene.Npc; 3 | import org.rspeer.runetek.api.commons.Time; 4 | import org.rspeer.runetek.api.component.Dialog; 5 | import org.rspeer.runetek.api.component.Interfaces; 6 | import org.rspeer.runetek.api.component.tab.Inventory; 7 | import org.rspeer.runetek.api.scene.Npcs; 8 | import org.rspeer.runetek.api.scene.Players; 9 | import org.rspeer.script.Script; 10 | import org.rspeer.ui.Log; 11 | 12 | import javax.swing.*; 13 | import java.io.*; 14 | import java.security.SecureRandom; 15 | import java.time.LocalDateTime; 16 | import java.util.Arrays; 17 | 18 | class RandomHandler { 19 | double SCRIPT_VERSION = 1.0; 20 | 21 | private boolean showPopup = false, showSecondPopup = false; 22 | 23 | void checkLamp() { 24 | if (Inventory.contains("Lamp")) { 25 | if (!Interfaces.isOpen(134)) { 26 | Inventory.getFirst("Lamp").interact("Rub"); 27 | Time.sleepUntil(() -> Interfaces.isOpen(134), 500, 10000); 28 | } 29 | if (Interfaces.isOpen(134)) { 30 | InterfaceComponent prayer = Interfaces.getComponent(134, 9); 31 | InterfaceComponent confirm = Interfaces.getComponent(134, 26); 32 | prayer.interact("Advance Prayer"); 33 | Time.sleep(random(1000, 1500)); 34 | confirm.interact("Ok"); 35 | Time.sleepUntil(() -> !Interfaces.isOpen(134), 500, 10000); 36 | } 37 | if (Dialog.canContinue()) { 38 | Dialog.processContinue(); 39 | Time.sleep(random(200, 500)); 40 | } 41 | } 42 | } 43 | 44 | boolean findNearbyRandoms() { 45 | if (Npcs.getNearest(npc -> npc.containsAction("Dismiss")) != null) { 46 | if (!showPopup) { 47 | java.awt.EventQueue.invokeLater(() -> { 48 | JOptionPane optionPane = new JOptionPane("RANDOM EVENT DETECTED!", JOptionPane.WARNING_MESSAGE); 49 | JDialog dialog = optionPane.createDialog("Warning!"); 50 | dialog.setAlwaysOnTop(true); 51 | dialog.setVisible(true); 52 | }); 53 | showPopup = true; 54 | } 55 | Log.info("Detected random event!"); 56 | Npc event = Npcs.getNearest(npc -> npc.containsAction("Dismiss")); 57 | 58 | logChat("We have detected a random event [" + event.getName() + "] Actions: [" + Arrays.toString(event.getActions()) + "]" 59 | + " NPC Target: " + (event.getTarget() != null ? event.getTarget().getName() : "N/A") 60 | + " Message: " + (event.getOverheadText() != null ? event.getOverheadText() : "N/A")); 61 | return true; 62 | } 63 | showPopup = false; 64 | return false; 65 | } 66 | 67 | boolean doWeHaveRandom() { 68 | if (Npcs.getNearest(npc -> npc.containsAction("Dismiss") && npc.getTarget() == Players.getLocal() && npc.isPositionWalkable()) != null) { 69 | if (!showSecondPopup) { 70 | java.awt.EventQueue.invokeLater(() -> { 71 | JOptionPane optionPane = new JOptionPane("WE HAVE A RANDOM EVENT!", JOptionPane.WARNING_MESSAGE); 72 | JDialog dialog = optionPane.createDialog("Warning!!"); 73 | dialog.setAlwaysOnTop(true); 74 | dialog.setVisible(true); 75 | }); 76 | showSecondPopup = true; 77 | } 78 | return true; 79 | } 80 | showSecondPopup = false; 81 | return false; 82 | } 83 | 84 | void handleRandom() { 85 | Npc event = Npcs.getNearest(npc -> npc.containsAction("Dismiss") && npc.getTarget() == Players.getLocal()); 86 | 87 | if ((event.getName().equals("Genie") || event.getName().equals("Drunken Dwarf") || event.getName().equals("Dr Jekyll") || event.getName().equals("Rick Turpentine")) && event.isPositionWalkable()) { 88 | if (!Dialog.isOpen()) { 89 | event.interact(x -> true); 90 | Time.sleepUntil(Dialog::isOpen, 1000, 10000); 91 | } 92 | if (Dialog.canContinue()) { 93 | Dialog.processContinue(); 94 | Time.sleep(random(200, 500)); 95 | } 96 | 97 | //NEEDS TESTING 98 | } else if (event.getName().equals("Frog")) { 99 | Npc frogPrince = Npcs.getNearest(npc -> !npc.containsAction("Dismiss") && npc.getName().equals("Frog") && npc.containsAction("Talk-to")); 100 | if (!Dialog.isOpen()) { 101 | frogPrince.interact(x -> true); 102 | Time.sleepUntil(Dialog::isOpen, 1000, 10000); 103 | } 104 | if (Dialog.canContinue()) { 105 | Dialog.processContinue(); 106 | Time.sleep(random(200, 500)); 107 | } 108 | if (Dialog.isViewingChatOptions()) { 109 | Dialog.process("I suppose so, sure."); 110 | // Dialog.process(opt->opt.contains("sure")); 111 | //Dialog.process(0);//Yes? 112 | Time.sleep(random(200, 500)); 113 | } 114 | } else if (event.getName().equals("Sergeant Damien")) { 115 | Log.info("We got sergeant lets do it!"); 116 | Time.sleep(random(500, 1000)); 117 | } else { 118 | Time.sleep(random(200, 500)); 119 | event.interact("Dismiss"); 120 | Time.sleep(random(300, 500)); 121 | } 122 | 123 | } 124 | 125 | private void logChat(String text) { 126 | LocalDateTime timestamp = LocalDateTime.now(); 127 | if (!new File(Script.getDataDirectory() + "\\Koko\\Logs\\Screenshots").exists()) { 128 | new File(Script.getDataDirectory() + "\\Koko\\Logs\\Screenshots").mkdirs(); 129 | } 130 | 131 | try (FileWriter fw = new FileWriter(Script.getDataDirectory() + "\\Koko\\Logs\\Randoms.txt", true); 132 | BufferedWriter bw = new BufferedWriter(fw); 133 | PrintWriter out = new PrintWriter(bw)) { 134 | out.println(timestamp + "> " + text); 135 | } catch (IOException e) { 136 | //exception handling left as an exercise for the reader 137 | } 138 | } 139 | 140 | private int random(int min, int max) { 141 | SecureRandom random = new SecureRandom(); 142 | return (random.nextInt(max - min + 1) + min); 143 | } 144 | } -------------------------------------------------------------------------------- /Balloon Laws/RandomHandler.java: -------------------------------------------------------------------------------- 1 | import org.rspeer.runetek.adapter.component.InterfaceComponent; 2 | import org.rspeer.runetek.adapter.scene.Npc; 3 | import org.rspeer.runetek.api.commons.Time; 4 | import org.rspeer.runetek.api.component.Dialog; 5 | import org.rspeer.runetek.api.component.Interfaces; 6 | import org.rspeer.runetek.api.component.tab.Inventory; 7 | import org.rspeer.runetek.api.scene.Npcs; 8 | import org.rspeer.runetek.api.scene.Players; 9 | import org.rspeer.script.Script; 10 | import org.rspeer.ui.Log; 11 | 12 | import javax.swing.*; 13 | import java.io.*; 14 | import java.security.SecureRandom; 15 | import java.time.LocalDateTime; 16 | import java.util.Arrays; 17 | 18 | class RandomHandler { 19 | double SCRIPT_VERSION = 1.0; 20 | 21 | private boolean showPopup = false, showSecondPopup = false; 22 | 23 | void checkLamp() { 24 | if (Inventory.contains("Lamp")) { 25 | if (!Interfaces.isOpen(134)) { 26 | Inventory.getFirst("Lamp").interact("Rub"); 27 | Time.sleepUntil(() -> Interfaces.isOpen(134), 500, 10000); 28 | } 29 | if (Interfaces.isOpen(134)) { 30 | InterfaceComponent prayer = Interfaces.getComponent(134, 9); 31 | InterfaceComponent confirm = Interfaces.getComponent(134, 26); 32 | prayer.interact("Advance Prayer"); 33 | Time.sleep(random(1000, 1500)); 34 | confirm.interact("Ok"); 35 | Time.sleepUntil(() -> !Interfaces.isOpen(134), 500, 10000); 36 | } 37 | if (Dialog.canContinue()) { 38 | Dialog.processContinue(); 39 | Time.sleep(random(200, 500)); 40 | } 41 | } 42 | } 43 | 44 | boolean findNearbyRandoms() { 45 | if (Npcs.getNearest(npc -> npc.containsAction("Dismiss")) != null) { 46 | if (!showPopup) { 47 | java.awt.EventQueue.invokeLater(() -> { 48 | JOptionPane optionPane = new JOptionPane("RANDOM EVENT DETECTED!", JOptionPane.WARNING_MESSAGE); 49 | JDialog dialog = optionPane.createDialog("Warning!"); 50 | dialog.setAlwaysOnTop(true); 51 | dialog.setVisible(true); 52 | }); 53 | showPopup = true; 54 | } 55 | Log.info("Detected random event!"); 56 | Npc event = Npcs.getNearest(npc -> npc.containsAction("Dismiss")); 57 | 58 | logChat("We have detected a random event [" + event.getName() + "] Actions: [" + Arrays.toString(event.getActions()) + "]" 59 | + " NPC Target: " + (event.getTarget() != null ? event.getTarget().getName() : "N/A") 60 | + " Message: " + (event.getOverheadText() != null ? event.getOverheadText() : "N/A")); 61 | return true; 62 | } 63 | showPopup = false; 64 | return false; 65 | } 66 | 67 | boolean doWeHaveRandom() { 68 | if (Npcs.getNearest(npc -> npc.containsAction("Dismiss") && npc.getTarget() == Players.getLocal() && npc.isPositionWalkable()) != null) { 69 | if (!showSecondPopup) { 70 | java.awt.EventQueue.invokeLater(() -> { 71 | JOptionPane optionPane = new JOptionPane("WE HAVE A RANDOM EVENT!", JOptionPane.WARNING_MESSAGE); 72 | JDialog dialog = optionPane.createDialog("Warning!!"); 73 | dialog.setAlwaysOnTop(true); 74 | dialog.setVisible(true); 75 | }); 76 | showSecondPopup = true; 77 | } 78 | return true; 79 | } 80 | showSecondPopup = false; 81 | return false; 82 | } 83 | 84 | void handleRandom() { 85 | Npc event = Npcs.getNearest(npc -> npc.containsAction("Dismiss") && npc.getTarget() == Players.getLocal()); 86 | 87 | if ((event.getName().equals("Genie") || event.getName().equals("Drunken Dwarf") || event.getName().equals("Dr Jekyll") || event.getName().equals("Rick Turpentine")) && event.isPositionWalkable()) { 88 | if (!Dialog.isOpen()) { 89 | event.interact(x -> true); 90 | Time.sleepUntil(Dialog::isOpen, 1000, 10000); 91 | } 92 | if (Dialog.canContinue()) { 93 | Dialog.processContinue(); 94 | Time.sleep(random(200, 500)); 95 | } 96 | 97 | //NEEDS TESTING 98 | } else if (event.getName().equals("Frog")) { 99 | Npc frogPrince = Npcs.getNearest(npc -> !npc.containsAction("Dismiss") && npc.getName().equals("Frog") && npc.containsAction("Talk-to")); 100 | if (!Dialog.isOpen()) { 101 | frogPrince.interact(x -> true); 102 | Time.sleepUntil(Dialog::isOpen, 1000, 10000); 103 | } 104 | if (Dialog.canContinue()) { 105 | Dialog.processContinue(); 106 | Time.sleep(random(200, 500)); 107 | } 108 | if (Dialog.isViewingChatOptions()) { 109 | Dialog.process("I suppose so, sure."); 110 | // Dialog.process(opt->opt.contains("sure")); 111 | //Dialog.process(0);//Yes? 112 | Time.sleep(random(200, 500)); 113 | } 114 | } else if (event.getName().equals("Sergeant Damien")) { 115 | Log.info("We got sergeant lets do it!"); 116 | Time.sleep(random(500, 1000)); 117 | } else { 118 | Time.sleep(random(200, 500)); 119 | event.interact("Dismiss"); 120 | Time.sleep(random(300, 500)); 121 | } 122 | 123 | } 124 | 125 | private void logChat(String text) { 126 | LocalDateTime timestamp = LocalDateTime.now(); 127 | if (!new File(Script.getDataDirectory() + "\\Koko\\Logs\\Screenshots").exists()) { 128 | new File(Script.getDataDirectory() + "\\Koko\\Logs\\Screenshots").mkdirs(); 129 | } 130 | 131 | try (FileWriter fw = new FileWriter(Script.getDataDirectory() + "\\Koko\\Logs\\Randoms.txt", true); 132 | BufferedWriter bw = new BufferedWriter(fw); 133 | PrintWriter out = new PrintWriter(bw)) { 134 | out.println(timestamp + "> " + text); 135 | } catch (IOException e) { 136 | //exception handling left as an exercise for the reader 137 | } 138 | } 139 | 140 | private int random(int min, int max) { 141 | SecureRandom random = new SecureRandom(); 142 | return (random.nextInt(max - min + 1) + min); 143 | } 144 | } -------------------------------------------------------------------------------- /Barbarian Rod Fishing/RandomHandler.java: -------------------------------------------------------------------------------- 1 | import org.rspeer.runetek.adapter.component.InterfaceComponent; 2 | import org.rspeer.runetek.adapter.scene.Npc; 3 | import org.rspeer.runetek.api.commons.Time; 4 | import org.rspeer.runetek.api.component.Dialog; 5 | import org.rspeer.runetek.api.component.Interfaces; 6 | import org.rspeer.runetek.api.component.tab.Inventory; 7 | import org.rspeer.runetek.api.scene.Npcs; 8 | import org.rspeer.runetek.api.scene.Players; 9 | import org.rspeer.script.Script; 10 | import org.rspeer.ui.Log; 11 | 12 | import javax.swing.*; 13 | import java.io.*; 14 | import java.security.SecureRandom; 15 | import java.time.LocalDateTime; 16 | import java.util.Arrays; 17 | 18 | class RandomHandler { 19 | double SCRIPT_VERSION = 1.0; 20 | 21 | private boolean showPopup = false, showSecondPopup = false; 22 | 23 | void checkLamp() { 24 | if (Inventory.contains("Lamp")) { 25 | if (!Interfaces.isOpen(134)) { 26 | Inventory.getFirst("Lamp").interact("Rub"); 27 | Time.sleepUntil(() -> Interfaces.isOpen(134), 500, 10000); 28 | } 29 | if (Interfaces.isOpen(134)) { 30 | InterfaceComponent prayer = Interfaces.getComponent(134, 9); 31 | InterfaceComponent confirm = Interfaces.getComponent(134, 26); 32 | prayer.interact("Advance Prayer"); 33 | Time.sleep(random(1000, 1500)); 34 | confirm.interact("Ok"); 35 | Time.sleepUntil(() -> !Interfaces.isOpen(134), 500, 10000); 36 | } 37 | if (Dialog.canContinue()) { 38 | Dialog.processContinue(); 39 | Time.sleep(random(200, 500)); 40 | } 41 | } 42 | } 43 | 44 | boolean findNearbyRandoms() { 45 | if (Npcs.getNearest(npc -> npc.containsAction("Dismiss")) != null) { 46 | if (!showPopup) { 47 | java.awt.EventQueue.invokeLater(() -> { 48 | JOptionPane optionPane = new JOptionPane("RANDOM EVENT DETECTED!", JOptionPane.WARNING_MESSAGE); 49 | JDialog dialog = optionPane.createDialog("Warning!"); 50 | dialog.setAlwaysOnTop(true); 51 | dialog.setVisible(true); 52 | }); 53 | showPopup = true; 54 | } 55 | Log.info("Detected random event!"); 56 | Npc event = Npcs.getNearest(npc -> npc.containsAction("Dismiss")); 57 | 58 | logChat("We have detected a random event [" + event.getName() + "] Actions: [" + Arrays.toString(event.getActions()) + "]" 59 | + " NPC Target: " + (event.getTarget() != null ? event.getTarget().getName() : "N/A") 60 | + " Message: " + (event.getOverheadText() != null ? event.getOverheadText() : "N/A")); 61 | return true; 62 | } 63 | showPopup = false; 64 | return false; 65 | } 66 | 67 | boolean doWeHaveRandom() { 68 | if (Npcs.getNearest(npc -> npc.containsAction("Dismiss") && npc.getTarget() == Players.getLocal() && npc.isPositionWalkable()) != null) { 69 | if (!showSecondPopup) { 70 | java.awt.EventQueue.invokeLater(() -> { 71 | JOptionPane optionPane = new JOptionPane("WE HAVE A RANDOM EVENT!", JOptionPane.WARNING_MESSAGE); 72 | JDialog dialog = optionPane.createDialog("Warning!!"); 73 | dialog.setAlwaysOnTop(true); 74 | dialog.setVisible(true); 75 | }); 76 | showSecondPopup = true; 77 | } 78 | return true; 79 | } 80 | showSecondPopup = false; 81 | return false; 82 | } 83 | 84 | void handleRandom() { 85 | Npc event = Npcs.getNearest(npc -> npc.containsAction("Dismiss") && npc.getTarget() == Players.getLocal()); 86 | 87 | if ((event.getName().equals("Genie") || event.getName().equals("Drunken Dwarf") || event.getName().equals("Dr Jekyll") || event.getName().equals("Rick Turpentine")) && event.isPositionWalkable()) { 88 | if (!Dialog.isOpen()) { 89 | event.interact(x -> true); 90 | Time.sleepUntil(Dialog::isOpen, 1000, 10000); 91 | } 92 | if (Dialog.canContinue()) { 93 | Dialog.processContinue(); 94 | Time.sleep(random(200, 500)); 95 | } 96 | 97 | //NEEDS TESTING 98 | } else if (event.getName().equals("Frog")) { 99 | Npc frogPrince = Npcs.getNearest(npc -> !npc.containsAction("Dismiss") && npc.getName().equals("Frog") && npc.containsAction("Talk-to")); 100 | if (!Dialog.isOpen()) { 101 | frogPrince.interact(x -> true); 102 | Time.sleepUntil(Dialog::isOpen, 1000, 10000); 103 | } 104 | if (Dialog.canContinue()) { 105 | Dialog.processContinue(); 106 | Time.sleep(random(200, 500)); 107 | } 108 | if (Dialog.isViewingChatOptions()) { 109 | Dialog.process("I suppose so, sure."); 110 | // Dialog.process(opt->opt.contains("sure")); 111 | //Dialog.process(0);//Yes? 112 | Time.sleep(random(200, 500)); 113 | } 114 | } else if (event.getName().equals("Sergeant Damien")) { 115 | Log.info("We got sergeant lets do it!"); 116 | Time.sleep(random(500, 1000)); 117 | } else { 118 | Time.sleep(random(200, 500)); 119 | event.interact("Dismiss"); 120 | Time.sleep(random(300, 500)); 121 | } 122 | 123 | } 124 | 125 | private void logChat(String text) { 126 | LocalDateTime timestamp = LocalDateTime.now(); 127 | if (!new File(Script.getDataDirectory() + "\\Koko\\Logs\\Screenshots").exists()) { 128 | new File(Script.getDataDirectory() + "\\Koko\\Logs\\Screenshots").mkdirs(); 129 | } 130 | 131 | try (FileWriter fw = new FileWriter(Script.getDataDirectory() + "\\Koko\\Logs\\Randoms.txt", true); 132 | BufferedWriter bw = new BufferedWriter(fw); 133 | PrintWriter out = new PrintWriter(bw)) { 134 | out.println(timestamp + "> " + text); 135 | } catch (IOException e) { 136 | //exception handling left as an exercise for the reader 137 | } 138 | } 139 | 140 | private int random(int min, int max) { 141 | SecureRandom random = new SecureRandom(); 142 | return (random.nextInt(max - min + 1) + min); 143 | } 144 | } -------------------------------------------------------------------------------- /Catherby cook + catch (Tuna)/Fishing.java: -------------------------------------------------------------------------------- 1 | import org.rspeer.runetek.adapter.scene.Npc; 2 | import org.rspeer.runetek.adapter.scene.Player; 3 | import org.rspeer.runetek.adapter.scene.SceneObject; 4 | import org.rspeer.runetek.api.commons.Time; 5 | import org.rspeer.runetek.api.component.Bank; 6 | import org.rspeer.runetek.api.component.Dialog; 7 | import org.rspeer.runetek.api.component.Production; 8 | import org.rspeer.runetek.api.component.tab.Inventory; 9 | import org.rspeer.runetek.api.component.tab.Skill; 10 | import org.rspeer.runetek.api.component.tab.Skills; 11 | import org.rspeer.runetek.api.input.Keyboard; 12 | import org.rspeer.runetek.api.movement.Movement; 13 | import org.rspeer.runetek.api.movement.position.Area; 14 | import org.rspeer.runetek.api.movement.position.Position; 15 | import org.rspeer.runetek.api.scene.Npcs; 16 | import org.rspeer.runetek.api.scene.Players; 17 | import org.rspeer.runetek.api.scene.SceneObjects; 18 | import org.rspeer.runetek.event.listeners.ChatMessageListener; 19 | import org.rspeer.runetek.event.listeners.RenderListener; 20 | import org.rspeer.runetek.event.types.ChatMessageEvent; 21 | import org.rspeer.runetek.event.types.ChatMessageType; 22 | import org.rspeer.runetek.event.types.RenderEvent; 23 | import org.rspeer.script.Script; 24 | import org.rspeer.script.ScriptCategory; 25 | import org.rspeer.script.ScriptMeta; 26 | import org.rspeer.ui.Log; 27 | 28 | import java.awt.*; 29 | import java.security.SecureRandom; 30 | 31 | @ScriptMeta(name = "Barbarian Fishing", desc = "Fishes in Catherby via barbarian fishing", developer = "Koko", version = 2.0, category = ScriptCategory.FISHING) 32 | public class Fishing extends Script implements RenderListener, ChatMessageListener { 33 | 34 | private int startXP, fish = 0; 35 | private double sum = 0; 36 | private String status; 37 | private long startTime, nextSpaceTime = System.currentTimeMillis() / 1000; 38 | private Area stove = Area.rectangular(2816, 3443, 2818, 3441); 39 | private Area fishingArea = Area.rectangular(2836, 3437, 2860, 3427); 40 | private boolean WORKING; 41 | private Position fishingHole; 42 | 43 | @Override 44 | public void onStart() { 45 | startTime = System.currentTimeMillis(); 46 | startXP = Skills.getExperience(Skill.FISHING); 47 | WORKING = false; 48 | status = "Loading up!"; 49 | } 50 | 51 | @Override 52 | public int loop() { 53 | Player local = Players.getLocal(); 54 | 55 | //Run 56 | if (!Movement.isRunEnabled()) 57 | Movement.toggleRun(true); 58 | 59 | 60 | if (!Inventory.isFull()) { 61 | //Fish 62 | Npc fishingSpot = Npcs.getNearest(1519); //Cage + Harpoon 63 | if (fishingSpot != null) { 64 | if (!WORKING) { 65 | if (local.isAnimating()) { 66 | status = "Fishing!"; 67 | WORKING = true; 68 | } else { 69 | status = "Attempting to fish"; 70 | fishingSpot.interact("Harpoon"); 71 | recordFishingPos(fishingSpot.getPosition());//save location 72 | Time.sleepUntil(() -> local.isAnimating() || isFishingSpotDed(), 1200, 10000); 73 | } 74 | Time.sleep(random(751, 3500)); 75 | } else { 76 | if (isFishingSpotDed()) { 77 | int sleepN = random(9000, 55000); 78 | status = "Fishing spot ded. Sleeping for " + (sleepN / 1000) + " seconds"; 79 | Log.info("Fishing spot is ded! Sleeping for " + (sleepN / 1000) + " seconds"); 80 | Time.sleep(sleepN); 81 | WORKING = false; 82 | } else { 83 | int val = random(250, 1500); 84 | sum += val; 85 | status = "AFK fishing [" + (nextSpaceTime - System.currentTimeMillis() / 1000) + "s]"; 86 | Time.sleep(val); 87 | 88 | if (nextSpaceTime < System.currentTimeMillis() / 1000) { 89 | Log.info("Sending enter!"); 90 | Keyboard.pressEnter(); 91 | Time.sleep(random(500, 1000)); 92 | nextSpaceTime = System.currentTimeMillis() / 1000 + random(15, 44); 93 | Log.info("Next enter will be in " + (nextSpaceTime - System.currentTimeMillis() / 1000) + "s"); 94 | } 95 | if (Inventory.isFull()) 96 | WORKING = false; 97 | if (Dialog.isViewingChat()) { 98 | Log.info("Level up or inventory is full!"); 99 | WORKING = false; 100 | Time.sleep(random(1000, 5000)); 101 | } 102 | } 103 | } 104 | } else { 105 | status = "Walking to fishing area"; 106 | Position toFish = fishingArea.getCenter().randomize(2); 107 | //Movement.walkToRandomized(toFish); 108 | Movement.walkTo(toFish);//Something here is fucky 109 | Time.sleep(random(3000, 4000)); 110 | } 111 | } else { 112 | Position toStove = stove.getCenter().randomize(2); 113 | Position rangePos = new Position(2817, 3444, 0); 114 | SceneObject Range = SceneObjects.getNearest(SceneObject -> SceneObject.getName().equals("Range") && SceneObject.getPosition().equals(rangePos)); 115 | if (Range != null && Inventory.contains("Raw tuna") && !WORKING) { 116 | //cook 117 | status = "Cooking fish!"; 118 | if (!Production.isOpen()) { 119 | status = "Preparing food"; 120 | Range.interact("Cook"); 121 | Time.sleepUntil(Production::isOpen, random(500, 750), 10000); 122 | } else { 123 | status = "Cooking!"; 124 | Production.initiate(); 125 | Time.sleep(random(500, 1000)); 126 | } 127 | if (local.isAnimating()) 128 | WORKING = true; 129 | } else if (Range == null) { 130 | status = "Walking closer to range"; 131 | Movement.walkToRandomized(toStove); 132 | Time.sleep(random(300, 3500)); 133 | } else if (!Inventory.contains("Raw tuna")) { 134 | WORKING = false; 135 | SceneObject BankB = SceneObjects.getNearest("Bank booth"); 136 | Log.info("Opening bank"); 137 | if (BankB != null && !Bank.isOpen()) { 138 | int sleep = random(3000, 10000); 139 | status = "Banking after sleeping for " + (sleep / 1000) + " seconds"; 140 | Time.sleep(sleep); 141 | 142 | status = "Opening bank"; 143 | Time.sleep(random(300, 500)); 144 | BankB.interact("Bank"); 145 | Time.sleepUntil(Bank::isOpen, 1200, 10000); 146 | } else if (Bank.isOpen()) { 147 | status = "Depositing fish"; 148 | Time.sleep(random(500, 1000)); 149 | Bank.depositInventory(); 150 | Time.sleepUntil(Inventory::isEmpty, random(500, 750), 10000); 151 | // Time.sleep(random(150, 200)); 152 | } 153 | } else if (Dialog.isViewingChat() || Production.isOpen()) { 154 | Time.sleep(random(4000, 6000)); 155 | WORKING = false; 156 | } 157 | } 158 | return random(200, 300); 159 | } 160 | 161 | @Override 162 | public void notify(ChatMessageEvent event) { 163 | if (event.getType().equals(ChatMessageType.FILTERED)) { 164 | if (event.getMessage().endsWith("catch a tuna.")) { 165 | Log.info("Caught a fish!"); 166 | fish++; 167 | } 168 | } 169 | } 170 | 171 | @Override 172 | public void notify(RenderEvent renderEvent) { 173 | int nextLvlXp = Skills.getExperienceToNextLevel(Skill.FISHING); 174 | int gainedXp = Skills.getExperience(Skill.FISHING) - startXP; 175 | double ttl = (nextLvlXp / (getPerHour(gainedXp) / 60.0 / 60.0 / 1000.0));//TODO: FIX TTL convert hours to ms 176 | if (gainedXp == 0) 177 | ttl = 0; 178 | Graphics g = renderEvent.getSource(); 179 | g.setColor(Color.WHITE); 180 | g.drawString("Status: " + status, 30, 285); 181 | g.drawString("Elapsed Time: " + formatTime(System.currentTimeMillis() - startTime), 30, 300); 182 | g.drawString("Fishin lvl: " + Skills.getCurrentLevel(Skill.FISHING) + " (TTL: " + formatTime(Double.valueOf(ttl).longValue()) + ")", 30, 315); 183 | g.drawString("Fish caught: " + fish + " (" + String.format("%.2f", getPerHour(fish)) + "/hr)", 30, 330); 184 | } 185 | 186 | @Override 187 | public void onStop() { 188 | Log.info("Thanks for barbarian fishing! Caught " + fish + " fish this session."); 189 | // Game.logout(); 190 | } 191 | 192 | private int random(int min, int max) { 193 | SecureRandom random = new SecureRandom(); 194 | return (random.nextInt(max - min + 1) + min); 195 | } 196 | 197 | private void recordFishingPos(Position pos) { 198 | fishingHole = pos; 199 | } 200 | 201 | private Position getFishingHole() { 202 | return fishingHole; 203 | } 204 | 205 | private boolean isFishingSpotDed() { 206 | return Npcs.getNearest(npc -> npc.getPosition().equals(getFishingHole()) && npc.getId() == 1519) == null; 207 | } 208 | 209 | private String formatTime(final long ms) { 210 | long s = ms / 1000, m = s / 60, h = m / 60; 211 | s %= 60; 212 | m %= 60; 213 | h %= 24; 214 | return String.format("%02d:%02d:%02d", h, m, s); 215 | } 216 | 217 | private double getPerHour(double value) { 218 | if ((System.currentTimeMillis() - startTime) > 0) { 219 | return value * 3600000d / (System.currentTimeMillis() - startTime); 220 | } else { 221 | return 0; 222 | } 223 | } 224 | } -------------------------------------------------------------------------------- /Farmers Market/PinSolver.java: -------------------------------------------------------------------------------- 1 | import org.rspeer.runetek.adapter.component.InterfaceComponent; 2 | import org.rspeer.runetek.api.commons.Time; 3 | import org.rspeer.runetek.api.component.Interfaces; 4 | import org.rspeer.ui.Log; 5 | 6 | import java.security.SecureRandom; 7 | import java.util.ArrayList; 8 | import java.util.Arrays; 9 | import java.util.HashMap; 10 | 11 | class PinSolver { 12 | 13 | void enterPin(int pin) { 14 | HashMap pinCombination = new HashMap<>(); 15 | char[] combination = String.valueOf(pin).toCharArray(); 16 | int index = 0; 17 | int[] pinVals = {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1}; 18 | 19 | if (Interfaces.isOpen(213)) { 20 | 21 | for (int i = 16; i < 35; i += 2) { 22 | if (Interfaces.getComponent(213, i, 1) != null) { 23 | InterfaceComponent j = Interfaces.getComponent(213, i, 1); 24 | InterfaceComponent actionJ = Interfaces.getComponent(213, i, 0); 25 | if (!j.getText().equals("")) { 26 | pinCombination.put(Integer.parseInt(j.getText()), actionJ); 27 | pinVals[index] = Integer.parseInt(j.getText()); 28 | index++; 29 | } else { 30 | pinCombination.put(-1, actionJ); 31 | pinVals[index] = -1; 32 | index++; 33 | } 34 | } 35 | } 36 | int replace = getMissingNo(pinVals); 37 | //replace missing val 38 | if (pinCombination.containsKey(-1)) { 39 | Log.info("Changing -1 to " + replace); 40 | pinCombination.get(-1); 41 | pinCombination.put(replace, pinCombination.get(-1)); 42 | } 43 | 44 | if (Interfaces.getComponent(213, 3).getText().equals("?")) { 45 | Log.info("Entering stage 1"); 46 | if (pinCombination.containsKey(Integer.parseInt(String.valueOf(combination[0])))) { 47 | Log.info("Entering " + combination[0]); 48 | if (pinCombination.get(Integer.parseInt(String.valueOf(combination[0]))).interact("Select")) { 49 | Time.sleepUntil(() -> Interfaces.getComponent(213, 3).getText().equals("*"), random(300, 500), 5000); 50 | } 51 | enterPin(pin); 52 | } 53 | } else if (Interfaces.getComponent(213, 4).getText().equals("?")) { 54 | Log.info("Entering stage 2"); 55 | if (pinCombination.containsKey(Integer.parseInt(String.valueOf(combination[1])))) { 56 | Log.info("Entering " + combination[1]); 57 | if (pinCombination.get(Integer.parseInt(String.valueOf(combination[1]))).interact("Select")) { 58 | Time.sleepUntil(() -> Interfaces.getComponent(213, 4).getText().equals("*"), random(300, 500), 5000); 59 | } 60 | enterPin(pin); 61 | } 62 | } else if (Interfaces.getComponent(213, 5).getText().equals("?")) { 63 | Log.info("Entering stage 3"); 64 | if (pinCombination.containsKey(Integer.parseInt(String.valueOf(combination[2])))) { 65 | Log.info("Entering " + combination[2]); 66 | if (pinCombination.get(Integer.parseInt(String.valueOf(combination[2]))).interact("Select")) { 67 | Time.sleepUntil(() -> Interfaces.getComponent(213, 5).getText().equals("*"), random(300, 500), 5000); 68 | } 69 | enterPin(pin); 70 | } 71 | } else if (Interfaces.getComponent(213, 6).getText().equals("?")) { 72 | Log.info("Entering stage 4"); 73 | if (pinCombination.containsKey(Integer.parseInt(String.valueOf(combination[3])))) { 74 | Log.info("Entering " + combination[3]); 75 | if (pinCombination.get(Integer.parseInt(String.valueOf(combination[3]))).interact("Select")) { 76 | Time.sleepUntil(() -> Interfaces.getComponent(213, 6).getText().equals("*"), random(300, 500), 5000); 77 | } 78 | } 79 | } 80 | } 81 | } 82 | 83 | private int getMissingNo(int[] pins) { 84 | ArrayList missing = new ArrayList<>(); 85 | Arrays.sort(pins); 86 | 87 | for (int i = 1; i < pins.length; i++) { 88 | for (int j = pins[i - 1] + 1; j < pins[i]; j++) { 89 | missing.add(j); 90 | } 91 | } 92 | for (int i = pins[pins.length - 1] + 1; i <= pins[pins.length - 1]; i++) { 93 | if (i > -1) 94 | missing.add(i); 95 | } 96 | return missing.size() > 0 ? missing.get(0) : -1; 97 | } 98 | 99 | private int random(int min, int max) { 100 | SecureRandom random = new SecureRandom(); 101 | return (random.nextInt(max - min + 1) + min); 102 | } 103 | } 104 | -------------------------------------------------------------------------------- /Farmers Market/RandomHandler.java: -------------------------------------------------------------------------------- 1 | import org.rspeer.runetek.adapter.component.InterfaceComponent; 2 | import org.rspeer.runetek.adapter.scene.Npc; 3 | import org.rspeer.runetek.api.commons.Time; 4 | import org.rspeer.runetek.api.component.Dialog; 5 | import org.rspeer.runetek.api.component.Interfaces; 6 | import org.rspeer.runetek.api.component.tab.Inventory; 7 | import org.rspeer.runetek.api.scene.Npcs; 8 | import org.rspeer.runetek.api.scene.Players; 9 | import org.rspeer.script.Script; 10 | import org.rspeer.ui.Log; 11 | 12 | import javax.swing.*; 13 | import java.io.*; 14 | import java.security.SecureRandom; 15 | import java.time.LocalDateTime; 16 | import java.util.Arrays; 17 | 18 | class RandomHandler { 19 | double SCRIPT_VERSION = 1.0; 20 | 21 | private boolean showPopup = false, showSecondPopup = false; 22 | 23 | void checkLamp() { 24 | if (Inventory.contains("Lamp")) { 25 | if (!Interfaces.isOpen(134)) { 26 | Inventory.getFirst("Lamp").interact("Rub"); 27 | Time.sleepUntil(() -> Interfaces.isOpen(134), 500, 10000); 28 | } 29 | if (Interfaces.isOpen(134)) { 30 | InterfaceComponent prayer = Interfaces.getComponent(134, 9); 31 | InterfaceComponent confirm = Interfaces.getComponent(134, 26); 32 | prayer.interact("Advance Prayer"); 33 | Time.sleep(random(1000, 1500)); 34 | confirm.interact("Ok"); 35 | Time.sleepUntil(() -> !Interfaces.isOpen(134), 500, 10000); 36 | } 37 | if (Dialog.canContinue()) { 38 | Dialog.processContinue(); 39 | Time.sleep(random(200, 500)); 40 | } 41 | } 42 | } 43 | 44 | boolean findNearbyRandoms() { 45 | if (Npcs.getNearest(npc -> npc.containsAction("Dismiss")) != null) { 46 | if (!showPopup) { 47 | java.awt.EventQueue.invokeLater(() -> { 48 | JOptionPane optionPane = new JOptionPane("RANDOM EVENT DETECTED!", JOptionPane.WARNING_MESSAGE); 49 | JDialog dialog = optionPane.createDialog("Warning!"); 50 | dialog.setAlwaysOnTop(true); 51 | dialog.setVisible(true); 52 | }); 53 | showPopup = true; 54 | } 55 | Log.info("Detected random event!"); 56 | Npc event = Npcs.getNearest(npc -> npc.containsAction("Dismiss")); 57 | 58 | logChat("We have detected a random event [" + event.getName() + "] Actions: [" + Arrays.toString(event.getActions()) + "]" 59 | + " NPC Target: " + (event.getTarget() != null ? event.getTarget().getName() : "N/A") 60 | + " Message: " + (event.getOverheadText() != null ? event.getOverheadText() : "N/A")); 61 | return true; 62 | } 63 | showPopup = false; 64 | return false; 65 | } 66 | 67 | boolean doWeHaveRandom() { 68 | if (Npcs.getNearest(npc -> npc.containsAction("Dismiss") && npc.getTarget() == Players.getLocal() && npc.isPositionWalkable()) != null) { 69 | if (!showSecondPopup) { 70 | java.awt.EventQueue.invokeLater(() -> { 71 | JOptionPane optionPane = new JOptionPane("WE HAVE A RANDOM EVENT!", JOptionPane.WARNING_MESSAGE); 72 | JDialog dialog = optionPane.createDialog("Warning!!"); 73 | dialog.setAlwaysOnTop(true); 74 | dialog.setVisible(true); 75 | }); 76 | showSecondPopup = true; 77 | } 78 | return true; 79 | } 80 | showSecondPopup = false; 81 | return false; 82 | } 83 | 84 | void handleRandom() { 85 | Npc event = Npcs.getNearest(npc -> npc.containsAction("Dismiss") && npc.getTarget() == Players.getLocal()); 86 | 87 | if ((event.getName().equals("Genie") || event.getName().equals("Drunken Dwarf") || event.getName().equals("Dr Jekyll") || event.getName().equals("Rick Turpentine")) && event.isPositionWalkable()) { 88 | if (!Dialog.isOpen()) { 89 | event.interact(x -> true); 90 | Time.sleepUntil(Dialog::isOpen, 1000, 10000); 91 | } 92 | if (Dialog.canContinue()) { 93 | Dialog.processContinue(); 94 | Time.sleep(random(200, 500)); 95 | } 96 | 97 | //NEEDS TESTING 98 | } else if (event.getName().equals("Frog")) { 99 | Npc frogPrince = Npcs.getNearest(npc -> !npc.containsAction("Dismiss") && npc.getName().equals("Frog") && npc.containsAction("Talk-to")); 100 | if (!Dialog.isOpen()) { 101 | frogPrince.interact(x -> true); 102 | Time.sleepUntil(Dialog::isOpen, 1000, 10000); 103 | } 104 | if (Dialog.canContinue()) { 105 | Dialog.processContinue(); 106 | Time.sleep(random(200, 500)); 107 | } 108 | if (Dialog.isViewingChatOptions()) { 109 | Dialog.process("I suppose so, sure."); 110 | // Dialog.process(opt->opt.contains("sure")); 111 | //Dialog.process(0);//Yes? 112 | Time.sleep(random(200, 500)); 113 | } 114 | } else if (event.getName().equals("Sergeant Damien")) { 115 | Log.info("We got sergeant lets do it!"); 116 | Time.sleep(random(500, 1000)); 117 | } else { 118 | Time.sleep(random(200, 500)); 119 | event.interact("Dismiss"); 120 | Time.sleep(random(300, 500)); 121 | } 122 | 123 | } 124 | 125 | private void logChat(String text) { 126 | LocalDateTime timestamp = LocalDateTime.now(); 127 | if (!new File(Script.getDataDirectory() + "\\Koko\\Logs\\Screenshots").exists()) { 128 | new File(Script.getDataDirectory() + "\\Koko\\Logs\\Screenshots").mkdirs(); 129 | } 130 | 131 | try (FileWriter fw = new FileWriter(Script.getDataDirectory() + "\\Koko\\Logs\\Randoms.txt", true); 132 | BufferedWriter bw = new BufferedWriter(fw); 133 | PrintWriter out = new PrintWriter(bw)) { 134 | out.println(timestamp + "> " + text); 135 | } catch (IOException e) { 136 | //exception handling left as an exercise for the reader 137 | } 138 | } 139 | 140 | private int random(int min, int max) { 141 | SecureRandom random = new SecureRandom(); 142 | return (random.nextInt(max - min + 1) + min); 143 | } 144 | } -------------------------------------------------------------------------------- /Fletcher/Fletch.java: -------------------------------------------------------------------------------- 1 | import org.rspeer.runetek.adapter.scene.Player; 2 | import org.rspeer.runetek.adapter.scene.SceneObject; 3 | import org.rspeer.runetek.api.commons.Time; 4 | import org.rspeer.runetek.api.component.Bank; 5 | import org.rspeer.runetek.api.component.Production; 6 | import org.rspeer.runetek.api.component.tab.Inventory; 7 | import org.rspeer.runetek.api.component.tab.Skill; 8 | import org.rspeer.runetek.api.component.tab.Skills; 9 | import org.rspeer.runetek.api.movement.Movement; 10 | import org.rspeer.runetek.api.scene.Players; 11 | import org.rspeer.runetek.api.scene.SceneObjects; 12 | import org.rspeer.runetek.event.listeners.ChatMessageListener; 13 | import org.rspeer.runetek.event.listeners.RenderListener; 14 | import org.rspeer.runetek.event.types.ChatMessageEvent; 15 | import org.rspeer.runetek.event.types.ChatMessageType; 16 | import org.rspeer.runetek.event.types.RenderEvent; 17 | import org.rspeer.script.Script; 18 | import org.rspeer.script.ScriptCategory; 19 | import org.rspeer.script.ScriptMeta; 20 | import org.rspeer.ui.Log; 21 | 22 | import java.awt.*; 23 | import java.security.SecureRandom; 24 | 25 | @ScriptMeta(name = "Fletch Master", desc = "Fletches shit", developer = "Koko", version = 1.0, category = ScriptCategory.FLETCHING) 26 | public class Fletch extends Script implements RenderListener, ChatMessageListener { 27 | 28 | private int startXP, startLvl, lastAnimDelay; 29 | private int fletched = 0, needsFletching = 0; 30 | 31 | private String status; 32 | private long startTime, lastAnim; 33 | private RandomHandler randomEvent = new RandomHandler(); 34 | 35 | @Override 36 | public void onStart() { 37 | 38 | startTime = System.currentTimeMillis(); 39 | startXP = Skills.getExperience(Skill.FLETCHING); 40 | startLvl = Skills.getCurrentLevel(Skill.FLETCHING); 41 | lastAnimDelay = random(3000, 5000); 42 | 43 | status = "Loading up!"; 44 | } 45 | 46 | @Override 47 | public int loop() { 48 | Player Local = Players.getLocal(); 49 | 50 | //Run 51 | if (!Movement.isRunEnabled()) 52 | Movement.toggleRun(true); 53 | 54 | 55 | randomEvent.checkLamp(); 56 | if(randomEvent.findNearbyRandoms()) { 57 | Time.sleep(1000); 58 | } 59 | if (randomEvent.doWeHaveRandom()) { 60 | //we have a random 61 | if (Inventory.isFull()) { 62 | Inventory.getFirst(item -> item.getName().contains("Maple longbow")).interact("Drop"); 63 | Time.sleep(random(500, 1000)); 64 | } 65 | randomEvent.handleRandom(); 66 | } else if (Inventory.contains(item -> item.getName().endsWith("logs"))) { 67 | //Fletch 68 | status = "Fletching!"; 69 | if (Local.isAnimating()) 70 | lastAnim = System.currentTimeMillis(); 71 | 72 | long msSinceAnim = System.currentTimeMillis() - lastAnim; 73 | 74 | if (!Local.isAnimating() && msSinceAnim > lastAnimDelay) { 75 | Log.info("Not animating! Starting new fletch session."); 76 | 77 | if (Production.isOpen()) { 78 | Log.info("Production ready!"); 79 | if (Skills.getCurrentLevel(Skill.FLETCHING) < 55) 80 | Production.initiate(1);// 1 shortbow 81 | else 82 | Production.initiate(2);//2 longbow 83 | lastAnimDelay = random(3000, 5000); 84 | Time.sleep(random(1000, 1500)); 85 | } else { 86 | if (!Inventory.isItemSelected()) { 87 | Log.info("Knife selected"); 88 | Inventory.getFirst("knife").interact("Use"); 89 | Time.sleep(random(300, 700)); 90 | } 91 | if (Inventory.isItemSelected()) { 92 | Log.info("Using knife on logs"); 93 | Inventory.getFirst(item -> item.getName().endsWith("logs")).interact("Use"); 94 | } 95 | Time.sleepUntil(Production::isOpen, 500, 10000); 96 | } 97 | } 98 | } else { 99 | //Bank 100 | Log.info("We finished fletching! Banking for more logs."); 101 | status = "Finished fletching!"; 102 | SceneObject bankChest = SceneObjects.getNearest(obj -> obj.getName().equals("Chest") || obj.getName().equals("Bank booth") || obj.getName().equals("Bank chest")); 103 | if (bankChest != null) { 104 | if (!Bank.isOpen()) { 105 | int sleep = random(3000, 20000); 106 | status = "Time to bank! Sleeping for " + (sleep / 1000) + "s."; 107 | Time.sleep(sleep); 108 | 109 | Log.info("Opening bank"); 110 | status = "Opening bank"; 111 | bankChest.interact("Bank"); 112 | Time.sleepUntil(Bank::isOpen, 1000, 10000); 113 | Time.sleep(random(500, 1200)); 114 | } else { 115 | status = "Depositing bows"; 116 | Log.info("Depositing bows"); 117 | Bank.depositAllExcept("Knife"); 118 | Time.sleep(random(400, 600)); 119 | Log.info("Getting more logs to cut"); 120 | status = "Getting more logs"; 121 | if (Bank.contains("Maple logs")) { 122 | Bank.withdrawAll("Maple logs"); 123 | needsFletching = Bank.getCount("Maple logs"); 124 | Time.sleepUntil(Inventory::isFull, 1000, 10000); 125 | } else { 126 | Log.info("We ran out of logs!"); 127 | setStopping(true); 128 | } 129 | Bank.close(); 130 | Time.sleep(random(300, 500)); 131 | } 132 | } 133 | } 134 | return random(200, 300); 135 | } 136 | 137 | @Override 138 | public void notify(ChatMessageEvent event) { 139 | if (event.getType().equals(ChatMessageType.FILTERED)) { 140 | if (event.getMessage().startsWith("You carefully cut")) { 141 | fletched++; 142 | } 143 | } 144 | } 145 | 146 | @Override 147 | public void notify(RenderEvent renderEvent) { 148 | double ETA = getETA(); 149 | int nextLvlXp = Skills.getExperienceToNextLevel(Skill.FLETCHING);//500 150 | int gainedXp = Skills.getExperience(Skill.FLETCHING) - startXP;//75 151 | double ttl = (nextLvlXp / (getPerHour(gainedXp) / 60.0 / 60.0 / 1000.0)); 152 | if (gainedXp == 0) 153 | ttl = 0; 154 | 155 | Graphics g = renderEvent.getSource(); 156 | g.setColor(Color.YELLOW); 157 | 158 | String lvlsGained = (Skills.getCurrentLevel(Skill.FLETCHING) - startLvl) > 0 ? " (+" + (Skills.getCurrentLevel(Skill.FLETCHING) - startLvl) + ")" : ""; 159 | 160 | g.drawString("Status: " + status, 25, 280); 161 | g.drawString("Elapsed Time: " + formatTime(System.currentTimeMillis() - startTime) + " (ETA: " + formatTime(Double.valueOf(ETA).longValue()) + ")", 25, 295); 162 | g.drawString("Fletch lvl: " + Skills.getCurrentLevel(Skill.FLETCHING) + lvlsGained + " (TTL: " + formatTime(Double.valueOf(ttl).longValue()) + ")", 25, 310); 163 | g.drawString("XP Gained: " + gainedXp + " [" + String.format("%.2f", getPerHour(gainedXp)) + "/hr]", 25, 325); 164 | g.drawString("Fletched: " + fletched + " (" + String.format("%.2f", getPerHour(fletched)) + "/hr)", 25, 340); 165 | } 166 | 167 | @Override 168 | public void onStop() { 169 | Log.info("Thanks for fletching! Fletched " + fletched + "/" + needsFletching + " longbows this session"); 170 | } 171 | 172 | private int random(int min, int max) { 173 | SecureRandom random = new SecureRandom(); 174 | return (random.nextInt(max - min + 1) + min); 175 | } 176 | 177 | private String formatTime(final long ms) { 178 | long s = ms / 1000, m = s / 60, h = m / 60; 179 | s %= 60; 180 | m %= 60; 181 | h %= 24; 182 | return String.format("%02d:%02d:%02d", h, m, s); 183 | } 184 | 185 | private double getPerHour(double value) { 186 | if ((System.currentTimeMillis() - startTime) > 0) { 187 | return value * 3600000d / (System.currentTimeMillis() - startTime); 188 | } else { 189 | return 0; 190 | } 191 | } 192 | 193 | private double getETA() { 194 | //60 minutes in an hour, 60 seconds in 1 minute, 1000ms in 1 second 195 | return needsFletching / (getPerHour(fletched) / 60.0 / 60.0 / 1000.0); 196 | } 197 | } -------------------------------------------------------------------------------- /Fossil Trees/RandomHandler.java: -------------------------------------------------------------------------------- 1 | import org.rspeer.runetek.adapter.component.InterfaceComponent; 2 | import org.rspeer.runetek.adapter.scene.Npc; 3 | import org.rspeer.runetek.api.commons.Time; 4 | import org.rspeer.runetek.api.component.Dialog; 5 | import org.rspeer.runetek.api.component.Interfaces; 6 | import org.rspeer.runetek.api.component.tab.Inventory; 7 | import org.rspeer.runetek.api.scene.Npcs; 8 | import org.rspeer.runetek.api.scene.Players; 9 | import org.rspeer.script.Script; 10 | import org.rspeer.ui.Log; 11 | 12 | import javax.swing.*; 13 | import java.io.*; 14 | import java.security.SecureRandom; 15 | import java.time.LocalDateTime; 16 | import java.util.Arrays; 17 | 18 | class RandomHandler { 19 | double SCRIPT_VERSION = 1.0; 20 | 21 | private boolean showPopup = false, showSecondPopup = false; 22 | 23 | void checkLamp() { 24 | if (Inventory.contains("Lamp")) { 25 | if (!Interfaces.isOpen(134)) { 26 | Inventory.getFirst("Lamp").interact("Rub"); 27 | Time.sleepUntil(() -> Interfaces.isOpen(134), 500, 10000); 28 | } 29 | if (Interfaces.isOpen(134)) { 30 | InterfaceComponent prayer = Interfaces.getComponent(134, 9); 31 | InterfaceComponent confirm = Interfaces.getComponent(134, 26); 32 | prayer.interact("Advance Prayer"); 33 | Time.sleep(random(1000, 1500)); 34 | confirm.interact("Ok"); 35 | Time.sleepUntil(() -> !Interfaces.isOpen(134), 500, 10000); 36 | } 37 | if (Dialog.canContinue()) { 38 | Dialog.processContinue(); 39 | Time.sleep(random(200, 500)); 40 | } 41 | } 42 | } 43 | 44 | boolean findNearbyRandoms() { 45 | if (Npcs.getNearest(npc -> npc.containsAction("Dismiss")) != null) { 46 | if (!showPopup) { 47 | java.awt.EventQueue.invokeLater(() -> { 48 | JOptionPane optionPane = new JOptionPane("RANDOM EVENT DETECTED!", JOptionPane.WARNING_MESSAGE); 49 | JDialog dialog = optionPane.createDialog("Warning!"); 50 | dialog.setAlwaysOnTop(true); 51 | dialog.setVisible(true); 52 | }); 53 | showPopup = true; 54 | } 55 | Log.info("Detected random event!"); 56 | Npc event = Npcs.getNearest(npc -> npc.containsAction("Dismiss")); 57 | 58 | logChat("We have detected a random event [" + event.getName() + "] Actions: [" + Arrays.toString(event.getActions()) + "]" 59 | + " NPC Target: " + (event.getTarget() != null ? event.getTarget().getName() : "N/A") 60 | + " Message: " + (event.getOverheadText() != null ? event.getOverheadText() : "N/A")); 61 | return true; 62 | } 63 | showPopup = false; 64 | return false; 65 | } 66 | 67 | boolean doWeHaveRandom() { 68 | if (Npcs.getNearest(npc -> npc.containsAction("Dismiss") && npc.getTarget() == Players.getLocal() && npc.isPositionWalkable()) != null) { 69 | if (!showSecondPopup) { 70 | java.awt.EventQueue.invokeLater(() -> { 71 | JOptionPane optionPane = new JOptionPane("WE HAVE A RANDOM EVENT!", JOptionPane.WARNING_MESSAGE); 72 | JDialog dialog = optionPane.createDialog("Warning!!"); 73 | dialog.setAlwaysOnTop(true); 74 | dialog.setVisible(true); 75 | }); 76 | showSecondPopup = true; 77 | } 78 | return true; 79 | } 80 | showSecondPopup = false; 81 | return false; 82 | } 83 | 84 | void handleRandom() { 85 | Npc event = Npcs.getNearest(npc -> npc.containsAction("Dismiss") && npc.getTarget() == Players.getLocal()); 86 | 87 | if ((event.getName().equals("Genie") || event.getName().equals("Drunken Dwarf") || event.getName().equals("Dr Jekyll") || event.getName().equals("Rick Turpentine")) && event.isPositionWalkable()) { 88 | if (!Dialog.isOpen()) { 89 | event.interact(x -> true); 90 | Time.sleepUntil(Dialog::isOpen, 1000, 10000); 91 | } 92 | if (Dialog.canContinue()) { 93 | Dialog.processContinue(); 94 | Time.sleep(random(200, 500)); 95 | } 96 | 97 | //NEEDS TESTING 98 | } else if (event.getName().equals("Frog")) { 99 | Npc frogPrince = Npcs.getNearest(npc -> !npc.containsAction("Dismiss") && npc.getName().equals("Frog") && npc.containsAction("Talk-to")); 100 | if (!Dialog.isOpen()) { 101 | frogPrince.interact(x -> true); 102 | Time.sleepUntil(Dialog::isOpen, 1000, 10000); 103 | } 104 | if (Dialog.canContinue()) { 105 | Dialog.processContinue(); 106 | Time.sleep(random(200, 500)); 107 | } 108 | if (Dialog.isViewingChatOptions()) { 109 | Dialog.process("I suppose so, sure."); 110 | // Dialog.process(opt->opt.contains("sure")); 111 | //Dialog.process(0);//Yes? 112 | Time.sleep(random(200, 500)); 113 | } 114 | } else if (event.getName().equals("Sergeant Damien")) { 115 | Log.info("We got sergeant lets do it!"); 116 | Time.sleep(random(500, 1000)); 117 | } else { 118 | Time.sleep(random(200, 500)); 119 | event.interact("Dismiss"); 120 | Time.sleep(random(300, 500)); 121 | } 122 | 123 | } 124 | 125 | private void logChat(String text) { 126 | LocalDateTime timestamp = LocalDateTime.now(); 127 | if (!new File(Script.getDataDirectory() + "\\Koko\\Logs\\Screenshots").exists()) { 128 | new File(Script.getDataDirectory() + "\\Koko\\Logs\\Screenshots").mkdirs(); 129 | } 130 | 131 | try (FileWriter fw = new FileWriter(Script.getDataDirectory() + "\\Koko\\Logs\\Randoms.txt", true); 132 | BufferedWriter bw = new BufferedWriter(fw); 133 | PrintWriter out = new PrintWriter(bw)) { 134 | out.println(timestamp + "> " + text); 135 | } catch (IOException e) { 136 | //exception handling left as an exercise for the reader 137 | } 138 | } 139 | 140 | private int random(int min, int max) { 141 | SecureRandom random = new SecureRandom(); 142 | return (random.nextInt(max - min + 1) + min); 143 | } 144 | } -------------------------------------------------------------------------------- /Fossil Trees/Teaky.java: -------------------------------------------------------------------------------- 1 | import org.rspeer.runetek.adapter.component.Item; 2 | import org.rspeer.runetek.adapter.scene.Pickable; 3 | import org.rspeer.runetek.adapter.scene.Player; 4 | import org.rspeer.runetek.adapter.scene.SceneObject; 5 | import org.rspeer.runetek.api.commons.Time; 6 | import org.rspeer.runetek.api.component.tab.Combat; 7 | import org.rspeer.runetek.api.component.tab.Inventory; 8 | import org.rspeer.runetek.api.component.tab.Skill; 9 | import org.rspeer.runetek.api.component.tab.Skills; 10 | import org.rspeer.runetek.api.scene.Pickables; 11 | import org.rspeer.runetek.api.scene.Players; 12 | import org.rspeer.runetek.api.scene.SceneObjects; 13 | import org.rspeer.runetek.event.listeners.ChatMessageListener; 14 | import org.rspeer.runetek.event.listeners.RenderListener; 15 | import org.rspeer.runetek.event.types.ChatMessageEvent; 16 | import org.rspeer.runetek.event.types.ChatMessageType; 17 | import org.rspeer.runetek.event.types.RenderEvent; 18 | import org.rspeer.script.Script; 19 | import org.rspeer.script.ScriptCategory; 20 | import org.rspeer.script.ScriptMeta; 21 | import org.rspeer.ui.Log; 22 | 23 | import javax.imageio.ImageIO; 24 | import java.awt.*; 25 | import java.awt.image.BufferedImage; 26 | import java.io.File; 27 | import java.io.IOException; 28 | import java.security.SecureRandom; 29 | import java.text.DecimalFormat; 30 | import java.time.Instant; 31 | 32 | @ScriptMeta(name = "Teaky Mon", desc = "Chops Teaks n shit on fossil island patches", developer = "Koko", version = 1.0, category = ScriptCategory.WOODCUTTING) 33 | public class Teaky extends Script implements RenderListener, ChatMessageListener { 34 | 35 | private int startXP, startLvl; 36 | private int teaks = 0, nestCnt = 0, lastAnimDelay; 37 | private String status; 38 | private long startTime, lastAnim; 39 | private boolean takeScreenie = false; 40 | private RandomHandler randomEvent = new RandomHandler(); 41 | private Skill training = Skill.WOODCUTTING; 42 | 43 | @Override 44 | public void onStart() { 45 | startTime = System.currentTimeMillis(); 46 | startXP = Skills.getExperience(training); 47 | startLvl = Skills.getLevelAt(startXP); 48 | status = "Loading up!"; 49 | lastAnimDelay = random(1000, 15000); 50 | } 51 | 52 | @Override 53 | public int loop() { 54 | Player Local = Players.getLocal(); 55 | 56 | randomEvent.checkLamp(); 57 | if (randomEvent.findNearbyRandoms()) { 58 | Time.sleep(1000); 59 | } 60 | if (randomEvent.doWeHaveRandom()) { 61 | status = "Handling random event"; 62 | Time.sleep(random(3000, 6000)); 63 | takeScreenie = true; 64 | randomEvent.handleRandom(); 65 | lastAnimDelay = 0; 66 | } else if (Inventory.isFull()) { 67 | int sleep = random(1000, 20000); 68 | int timer = sleep / 1000; 69 | for (int i = 0; i < sleep / 1000; i++) { 70 | status = "Sleeping for " + timer + "s"; 71 | Time.sleep(1000); 72 | timer--; 73 | } 74 | status = "Sleeping for " + (sleep % 1000) + "ms"; 75 | Time.sleep(sleep % 1000); 76 | 77 | status = "Dropping logs"; 78 | int[] indexes = dropOrder(); 79 | for (int index : indexes) { 80 | Item log = Inventory.getItemAt(index); 81 | if (log != null && log.getName().equals("Teak logs")) { 82 | log.interact("Drop"); 83 | Time.sleep(random(200, 300)); 84 | } 85 | } 86 | lastAnimDelay = 0; 87 | } else if (SceneObjects.getNearest("Teak Tree") == null) { 88 | status = "No trees to chop! Waiting..."; 89 | Time.sleep(random(5000, 1000)); 90 | } else { 91 | if (Local.isAnimating()) 92 | lastAnim = System.currentTimeMillis(); 93 | 94 | long msSinceAnim = System.currentTimeMillis() - lastAnim; 95 | 96 | if (!Local.isAnimating() && msSinceAnim > lastAnimDelay) { 97 | if (Combat.getSpecialEnergy() == 100) { 98 | Combat.toggleSpecial(true); 99 | Time.sleep(random(200, 300)); 100 | } 101 | SceneObject tree = SceneObjects.getNearest("Teak Tree"); 102 | if (tree != null) { 103 | Log.info("Time to chop some teaks!"); 104 | status = "Ready to chop"; 105 | tree.interact("Chop down"); 106 | Time.sleepUntil(Local::isAnimating, 1000, 10000); 107 | lastAnimDelay = random(1000, 20000); 108 | } 109 | } else { 110 | status = "Chop chop!"; 111 | if (msSinceAnim > 0) 112 | status += " " + (lastAnimDelay - msSinceAnim) + "ms"; 113 | Time.sleep(random(300, 1000)); 114 | 115 | if (nestSpotted()) { 116 | Time.sleep(random(3000, 5000)); 117 | if (Inventory.isFull()) { 118 | Inventory.getFirst("Teak log").interact("Drop"); 119 | Time.sleep(random(500, 1000)); 120 | } 121 | lootNest(); 122 | lastAnimDelay = 0; 123 | } 124 | } 125 | } 126 | return random(200, 300); 127 | } 128 | 129 | @Override 130 | public void notify(RenderEvent renderEvent) { 131 | int nextLvlXp = Skills.getExperienceToNextLevel(training);//500 132 | int gainedXp = Skills.getExperience(training) - startXP;//75 133 | double ttl = (nextLvlXp / (getPerHour(gainedXp) / 60.0 / 60.0 / 1000.0)); 134 | if (gainedXp == 0) 135 | ttl = 0; 136 | 137 | Graphics g = renderEvent.getSource(); 138 | Graphics2D g2 = (Graphics2D) g; 139 | g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 140 | 141 | g2.setColor(new Color(0, 0, 0, 128)); 142 | g2.fillRect(20, 235, 196, 95); 143 | g2.setColor(Color.WHITE); 144 | g2.drawRect(20, 235, 196, 95); 145 | 146 | int x = 25; 147 | int y = 250; 148 | String wcLvlsGained = (Skills.getLevelAt(Skills.getExperience(training)) - startLvl) > 0 ? " (+" + (Skills.getLevelAt(Skills.getExperience(training)) - startLvl) + ")" : ""; 149 | 150 | DecimalFormat formatter = new DecimalFormat("#,###.##"); 151 | FontMetrics metrics = g2.getFontMetrics(); 152 | 153 | g2.setColor(Color.WHITE); 154 | g2.drawString("Status: ", x, y); 155 | int width = metrics.stringWidth("Status: "); 156 | g2.setColor(Color.YELLOW); 157 | g2.drawString(status, x + width, y); 158 | 159 | g2.setColor(Color.WHITE); 160 | g2.drawString("Elapsed Time: ", x, y += 15); 161 | width = metrics.stringWidth("Elapsed Time: "); 162 | g2.setColor(Color.PINK); 163 | g2.drawString(formatTime(System.currentTimeMillis() - startTime), x + width, y); 164 | width = metrics.stringWidth("Elapsed Time: " + formatTime(System.currentTimeMillis() - startTime)); 165 | g2.setColor(Color.WHITE); 166 | 167 | g2.drawString("Woodcut lvl: ", x, y += 15); 168 | g2.setColor(Color.GREEN); 169 | width = metrics.stringWidth("Woodcut lvl: "); 170 | g2.drawString(Skills.getLevelAt(Skills.getExperience(training)) + wcLvlsGained, x + width, y); 171 | g2.setColor(Color.WHITE); 172 | width = metrics.stringWidth("Woodcut lvl: " + Skills.getLevelAt(Skills.getExperience(training)) + wcLvlsGained); 173 | g2.drawString(" (TTL: " + formatTime(Double.valueOf(ttl).longValue()) + ")", x + width, y); 174 | 175 | g2.drawString("XP Gained: ", x, y += 15); 176 | width = metrics.stringWidth("XP Gained: "); 177 | g2.setColor(Color.YELLOW); 178 | g2.drawString(formatter.format(gainedXp), x + width, y); 179 | width = metrics.stringWidth("XP Gained: " + formatter.format(gainedXp)); 180 | g2.setColor(Color.WHITE); 181 | g2.drawString(" (" + formatter.format(getPerHour(gainedXp)) + "/hr)", x + width, y); 182 | 183 | g2.drawString("Teaks cut: ", x, y += 15); 184 | width = metrics.stringWidth("Teaks cut: "); 185 | g2.setColor(Color.ORANGE); 186 | g2.drawString(formatter.format(teaks), x + width, y); 187 | width = metrics.stringWidth("Teaks cut: " + formatter.format(teaks)); 188 | g2.setColor(Color.WHITE); 189 | g2.drawString(" (" + formatter.format(getPerHour(teaks)) + "/hr)", x + width, y); 190 | 191 | g2.drawString("Nests looted: ", x, y += 15); 192 | width = metrics.stringWidth("Nests looted: "); 193 | g2.setColor(Color.YELLOW); 194 | g2.drawString(formatter.format(nestCnt), x + width, y); 195 | width = metrics.stringWidth("Nests looted: " + formatter.format(nestCnt)); 196 | g2.setColor(Color.WHITE); 197 | g2.drawString(" (" + formatter.format(getPerHour(nestCnt)) + "/hr)", x + width, y); 198 | 199 | //Hide username 200 | if (Players.getLocal() != null) { 201 | Color tanColor = new Color(204, 187, 154); 202 | g2.setColor(tanColor); 203 | g2.fillRect(9, 459, 91, 15); 204 | } 205 | 206 | if (takeScreenie) { 207 | TakeScreenshot(renderEvent.getProvider().getImage()); 208 | takeScreenie = false; 209 | } 210 | } 211 | 212 | @Override 213 | public void notify(ChatMessageEvent event) { 214 | if (event.getType().equals(ChatMessageType.FILTERED)) { 215 | if (event.getMessage().endsWith("teak logs.")) { 216 | teaks++; 217 | } 218 | } 219 | } 220 | 221 | @Override 222 | public void onStop() { 223 | Log.info("Hope you had fun chopping teaks! Chopped " + teaks + " earning " + (Skills.getExperience(training) - startXP) + " " + training.name().toLowerCase() + " xp and looting " + nestCnt + " bird nests."); 224 | } 225 | 226 | private boolean nestSpotted() { 227 | return Pickables.getNearest("Bird nest") != null && Pickables.getNearest("Bird nest").isPositionWalkable(); 228 | } 229 | 230 | private void lootNest() { 231 | Pickable nest = Pickables.getNearest("Bird nest"); 232 | if (nest != null) { 233 | nest.interact("Take"); 234 | Time.sleepUntil(() -> !nestSpotted(), 500, 10000); 235 | nestCnt++; 236 | } 237 | } 238 | 239 | private int random(int min, int max) { 240 | SecureRandom random = new SecureRandom(); 241 | return (random.nextInt(max - min + 1) + min); 242 | } 243 | 244 | private int[] dropOrder() { 245 | int[] drop1 = new int[]{0, 4, 8, 12, 16, 20, 24, 25, 21, 17, 13, 9, 5, 1, 2, 6, 10, 14, 18, 22, 26, 27, 23, 19, 15, 11, 7, 3}; 246 | int[] drop2 = new int[]{0, 1, 4, 5, 8, 9, 12, 13, 16, 17, 20, 21, 24, 25, 26, 27, 22, 23, 18, 19, 14, 15, 10, 11, 6, 7, 2, 3}; 247 | int[] drop3 = new int[]{0, 1, 2, 3, 7, 6, 5, 4, 8, 9, 10, 11, 15, 14, 13, 12, 16, 17, 18, 19, 23, 22, 21, 20, 24, 25, 26, 27}; 248 | 249 | switch (random(1, 3)) { 250 | case 1: 251 | Log.info("Drop 1"); 252 | return drop1; 253 | case 2: 254 | Log.info("Drop 2"); 255 | return drop2; 256 | case 3: 257 | Log.info("Drop 3"); 258 | return drop3; 259 | } 260 | return dropOrder(); 261 | } 262 | 263 | private String formatTime(final long ms) { 264 | long s = ms / 1000, m = s / 60, h = m / 60; 265 | s %= 60; 266 | m %= 60; 267 | h %= 24; 268 | return String.format("%02d:%02d:%02d", h, m, s); 269 | } 270 | 271 | private void TakeScreenshot(Image img) { 272 | Log.info("Attempting to take a screenshot"); 273 | BufferedImage buffered = (BufferedImage) img; 274 | 275 | //Get the current date to save in the screenshot folder 276 | long now = Instant.now().getEpochSecond(); 277 | 278 | try { 279 | //Create a folder with my forum name to tell the user which script created this folder 280 | if (!new File(getDataDirectory() + "\\Koko\\Teak\\Screenshots").exists()) { 281 | new File(getDataDirectory() + "\\Koko\\Teak\\Screenshots").mkdirs(); 282 | } 283 | //save the image to the folder and rename all player spaces with underscores 284 | try { 285 | if (ImageIO.write( 286 | buffered, 287 | "png", 288 | new File(getDataDirectory() + "\\Koko\\Teak\\Screenshots\\" + now + "-" + Players.getLocal().getName().replaceAll("\\u00a0", "_") + ".png"))) { 289 | Log.info("Saved " + getDataDirectory() + "\\Koko\\Teak\\Screenshots\\" + now + "-" + Players.getLocal().getName().replaceAll("\\u00a0", "_") + ".png"); 290 | } 291 | } catch (IOException e) { 292 | Log.info("Error! " + e.getMessage()); 293 | } 294 | } catch (Exception e) { 295 | Log.info("Error! " + e.getMessage()); 296 | } 297 | } 298 | 299 | private double getPerHour(double value) { 300 | if ((System.currentTimeMillis() - startTime) > 0) { 301 | return value * 3600000d / (System.currentTimeMillis() - startTime); 302 | } else { 303 | return 0; 304 | } 305 | } 306 | } -------------------------------------------------------------------------------- /Garbage Combat/RandomHandler.java: -------------------------------------------------------------------------------- 1 | import org.rspeer.runetek.adapter.component.InterfaceComponent; 2 | import org.rspeer.runetek.adapter.scene.Npc; 3 | import org.rspeer.runetek.api.commons.Time; 4 | import org.rspeer.runetek.api.component.Dialog; 5 | import org.rspeer.runetek.api.component.Interfaces; 6 | import org.rspeer.runetek.api.component.tab.Inventory; 7 | import org.rspeer.runetek.api.scene.Npcs; 8 | import org.rspeer.runetek.api.scene.Players; 9 | import org.rspeer.script.Script; 10 | import org.rspeer.ui.Log; 11 | 12 | import javax.swing.*; 13 | import java.io.*; 14 | import java.security.SecureRandom; 15 | import java.time.LocalDateTime; 16 | import java.util.Arrays; 17 | 18 | class RandomHandler { 19 | double SCRIPT_VERSION = 1.0; 20 | 21 | private boolean showPopup = false, showSecondPopup = false; 22 | 23 | void checkLamp() { 24 | if (Inventory.contains("Lamp")) { 25 | if (!Interfaces.isOpen(134)) { 26 | Inventory.getFirst("Lamp").interact("Rub"); 27 | Time.sleepUntil(() -> Interfaces.isOpen(134), 500, 10000); 28 | } 29 | if (Interfaces.isOpen(134)) { 30 | InterfaceComponent prayer = Interfaces.getComponent(134, 9); 31 | InterfaceComponent confirm = Interfaces.getComponent(134, 26); 32 | prayer.interact("Advance Prayer"); 33 | Time.sleep(random(1000, 1500)); 34 | confirm.interact("Ok"); 35 | Time.sleepUntil(() -> !Interfaces.isOpen(134), 500, 10000); 36 | } 37 | if (Dialog.canContinue()) { 38 | Dialog.processContinue(); 39 | Time.sleep(random(200, 500)); 40 | } 41 | } 42 | } 43 | 44 | boolean findNearbyRandoms() { 45 | if (Npcs.getNearest(npc -> npc.containsAction("Dismiss")) != null) { 46 | if (!showPopup) { 47 | java.awt.EventQueue.invokeLater(() -> { 48 | JOptionPane optionPane = new JOptionPane("RANDOM EVENT DETECTED!", JOptionPane.WARNING_MESSAGE); 49 | JDialog dialog = optionPane.createDialog("Warning!"); 50 | dialog.setAlwaysOnTop(true); 51 | dialog.setVisible(true); 52 | }); 53 | showPopup = true; 54 | } 55 | Log.info("Detected random event!"); 56 | Npc event = Npcs.getNearest(npc -> npc.containsAction("Dismiss")); 57 | 58 | logChat("We have detected a random event [" + event.getName() + "] Actions: [" + Arrays.toString(event.getActions()) + "]" 59 | + " NPC Target: " + (event.getTarget() != null ? event.getTarget().getName() : "N/A") 60 | + " Message: " + (event.getOverheadText() != null ? event.getOverheadText() : "N/A")); 61 | return true; 62 | } 63 | showPopup = false; 64 | return false; 65 | } 66 | 67 | boolean doWeHaveRandom() { 68 | if (Npcs.getNearest(npc -> npc.containsAction("Dismiss") && npc.getTarget() == Players.getLocal() && npc.isPositionWalkable()) != null) { 69 | if (!showSecondPopup) { 70 | java.awt.EventQueue.invokeLater(() -> { 71 | JOptionPane optionPane = new JOptionPane("WE HAVE A RANDOM EVENT!", JOptionPane.WARNING_MESSAGE); 72 | JDialog dialog = optionPane.createDialog("Warning!!"); 73 | dialog.setAlwaysOnTop(true); 74 | dialog.setVisible(true); 75 | }); 76 | showSecondPopup = true; 77 | } 78 | return true; 79 | } 80 | showSecondPopup = false; 81 | return false; 82 | } 83 | 84 | void handleRandom() { 85 | Npc event = Npcs.getNearest(npc -> npc.containsAction("Dismiss") && npc.getTarget() == Players.getLocal()); 86 | 87 | if ((event.getName().equals("Genie") || event.getName().equals("Drunken Dwarf") || event.getName().equals("Dr Jekyll") || event.getName().equals("Rick Turpentine")) && event.isPositionWalkable()) { 88 | if (!Dialog.isOpen()) { 89 | event.interact(x -> true); 90 | Time.sleepUntil(Dialog::isOpen, 1000, 10000); 91 | } 92 | if (Dialog.canContinue()) { 93 | Dialog.processContinue(); 94 | Time.sleep(random(200, 500)); 95 | } 96 | 97 | //NEEDS TESTING 98 | } else if (event.getName().equals("Frog")) { 99 | Npc frogPrince = Npcs.getNearest(npc -> !npc.containsAction("Dismiss") && npc.getName().equals("Frog") && npc.containsAction("Talk-to")); 100 | if (!Dialog.isOpen()) { 101 | frogPrince.interact(x -> true); 102 | Time.sleepUntil(Dialog::isOpen, 1000, 10000); 103 | } 104 | if (Dialog.canContinue()) { 105 | Dialog.processContinue(); 106 | Time.sleep(random(200, 500)); 107 | } 108 | if (Dialog.isViewingChatOptions()) { 109 | Dialog.process("I suppose so, sure."); 110 | // Dialog.process(opt->opt.contains("sure")); 111 | //Dialog.process(0);//Yes? 112 | Time.sleep(random(200, 500)); 113 | } 114 | } else if (event.getName().equals("Sergeant Damien")) { 115 | Log.info("We got sergeant lets do it!"); 116 | Time.sleep(random(500, 1000)); 117 | } else { 118 | Time.sleep(random(200, 500)); 119 | event.interact("Dismiss"); 120 | Time.sleep(random(300, 500)); 121 | } 122 | 123 | } 124 | 125 | private void logChat(String text) { 126 | LocalDateTime timestamp = LocalDateTime.now(); 127 | if (!new File(Script.getDataDirectory() + "\\Koko\\Logs\\Screenshots").exists()) { 128 | new File(Script.getDataDirectory() + "\\Koko\\Logs\\Screenshots").mkdirs(); 129 | } 130 | 131 | try (FileWriter fw = new FileWriter(Script.getDataDirectory() + "\\Koko\\Logs\\Randoms.txt", true); 132 | BufferedWriter bw = new BufferedWriter(fw); 133 | PrintWriter out = new PrintWriter(bw)) { 134 | out.println(timestamp + "> " + text); 135 | } catch (IOException e) { 136 | //exception handling left as an exercise for the reader 137 | } 138 | } 139 | 140 | private int random(int min, int max) { 141 | SecureRandom random = new SecureRandom(); 142 | return (random.nextInt(max - min + 1) + min); 143 | } 144 | } -------------------------------------------------------------------------------- /Garbage Combat/Slaybooty.java: -------------------------------------------------------------------------------- 1 | import org.rspeer.runetek.adapter.scene.Npc; 2 | import org.rspeer.runetek.adapter.scene.Player; 3 | import org.rspeer.runetek.api.commons.Time; 4 | import org.rspeer.runetek.api.component.tab.Inventory; 5 | import org.rspeer.runetek.api.component.tab.Prayers; 6 | import org.rspeer.runetek.api.component.tab.Skill; 7 | import org.rspeer.runetek.api.component.tab.Skills; 8 | import org.rspeer.runetek.api.local.Health; 9 | import org.rspeer.runetek.api.scene.Npcs; 10 | import org.rspeer.runetek.api.scene.Players; 11 | import org.rspeer.runetek.event.listeners.ChatMessageListener; 12 | import org.rspeer.runetek.event.listeners.RenderListener; 13 | import org.rspeer.runetek.event.types.ChatMessageEvent; 14 | import org.rspeer.runetek.event.types.ChatMessageType; 15 | import org.rspeer.runetek.event.types.RenderEvent; 16 | import org.rspeer.script.Script; 17 | import org.rspeer.script.ScriptCategory; 18 | import org.rspeer.script.ScriptMeta; 19 | import org.rspeer.ui.Log; 20 | 21 | import java.awt.*; 22 | import java.security.SecureRandom; 23 | import java.text.DecimalFormat; 24 | 25 | @ScriptMeta(name = "Slayer", desc = "Shitty combat script for slayer", developer = "Koko", version = 1.0, category = ScriptCategory.SLAYER) 26 | public class Slaybooty extends Script implements RenderListener, ChatMessageListener { 27 | 28 | private int startSlayXP, startRangeXP, startSlayLvl, startRangeLvl, lastAnimDelay; 29 | 30 | private String status; 31 | private long startTime, lastAnim; 32 | // private Position fireGiantSpot = new Position(2568, 9893, 0); 33 | private RandomHandler randomEvent = new RandomHandler(); 34 | // private Area giantz = Area.rectangular(2563, 9893, 2570, 9885); 35 | private int oldSplat = 0; 36 | private String[] loot = {"Tooth half of key", "Grimy ranarr weed", "Blood rune", "Chaos rune", "Fire rune", "Rune scimitar", "Brimstone key"}; 37 | 38 | @Override 39 | public void onStart() { 40 | startTime = System.currentTimeMillis(); 41 | startSlayXP = Skills.getExperience(Skill.SLAYER); 42 | startSlayLvl = Skills.getCurrentLevel(Skill.SLAYER); 43 | startRangeXP = Skills.getExperience(Skill.RANGED); 44 | startRangeLvl = Skills.getCurrentLevel(Skill.RANGED); 45 | 46 | lastAnimDelay = random(2000, 3700); 47 | status = "Loading up!"; 48 | } 49 | 50 | @Override 51 | public int loop() { 52 | Player Local = Players.getLocal(); 53 | if (Local.isAnimating()) 54 | lastAnim = System.currentTimeMillis(); 55 | 56 | 57 | if (Health.getPercent() < 60) 58 | Inventory.getFirst("Tuna").interact("Eat"); 59 | 60 | if (Prayers.getPoints() < 10) 61 | Inventory.getFirst(item -> item.getName().startsWith("Prayer")).interact("Drink"); 62 | 63 | long msSinceAnim = System.currentTimeMillis() - lastAnim; 64 | 65 | randomEvent.checkLamp(); 66 | randomEvent.findNearbyRandoms(); 67 | if (randomEvent.doWeHaveRandom()) { 68 | randomEvent.handleRandom(); 69 | } else if ((!Local.isAnimating() && msSinceAnim > lastAnimDelay)) { 70 | status = "Attacking " + msSinceAnim + "ms reset"; 71 | //Prayers.toggleQuickPrayer(false); 72 | status = "Getting new target"; 73 | lastAnimDelay = random(2000, 3700); 74 | Log.info("Attacking now!"); 75 | Npc slay = Npcs.getNearest(task -> task.getName().equals("Hellhound") && (!task.isHealthBarVisible() || (task.getTarget() != null && task.getTarget().equals(Local)))); 76 | if (Local.getTarget() == null) { 77 | slay.interact("Attack"); 78 | Time.sleepUntil(() -> slay.isHealthBarVisible() && Local.isAnimating() || Local.isHealthBarVisible(), 10000); 79 | Time.sleep(300, 500); 80 | } 81 | } else if (Local.isHealthBarVisible()) { 82 | status = "Flick pray"; 83 | if (Local.getHitsplatCycles().length > 0 && Local.getHitsplatCycles()[0] > oldSplat) { 84 | oldSplat = Local.getHitsplatCycles()[0]; 85 | Prayers.toggleQuickPrayer(false); 86 | } else { 87 | Time.sleep(500); 88 | Npc slay = Npcs.getNearest(task -> task.getName().equals("Hellhound") && (task.getTarget() != null && task.getTarget().equals(Local))); 89 | if (slay != null) 90 | Log.info("Index: " + slay.getIndex() + " Health " + slay.getHealthPercent() + "%"); 91 | //TEST IF INDEX MATCHING FIXES DED 92 | if (slay != null && slay.getHealthPercent() == 0 || (slay != null && Npcs.getNearest(booty -> booty.getIndex() == slay.getIndex()) == null)) { 93 | Log.info("DED"); 94 | if (Prayers.isQuickPrayerActive()) 95 | Prayers.toggleQuickPrayer(true); 96 | } else 97 | Prayers.toggleQuickPrayer(true); 98 | } 99 | } 100 | return random(200, 300); 101 | } 102 | 103 | @Override 104 | public void notify(ChatMessageEvent event) { 105 | if (!event.getType().equals(ChatMessageType.PUBLIC) && !event.getType().equals(ChatMessageType.PRIVATE_RECEIVED) && !event.getType().equals(ChatMessageType.CLAN_CHANNEL)) { 106 | if (event.getMessage().endsWith("privacy mode enabled.") || event.getMessage().endsWith("do not seem to be at home.")) { 107 | Log.info("House is broken!"); 108 | setStopping(true); 109 | } 110 | } 111 | } 112 | 113 | @Override 114 | public void notify(RenderEvent renderEvent) { 115 | int nextSlayLvlXp = Skills.getExperienceToNextLevel(Skill.SLAYER);//500 116 | int gainedSlayXp = Skills.getExperience(Skill.SLAYER) - startSlayXP;//75 117 | 118 | int nextRangeLvlXp = Skills.getExperienceToNextLevel(Skill.RANGED);//500 119 | int gainedRangeXp = Skills.getExperience(Skill.RANGED) - startRangeXP;//75 120 | 121 | double ttl1 = (nextSlayLvlXp / (getPerHour(gainedSlayXp) / 60.0 / 60.0 / 1000.0)); 122 | double ttl2 = (nextRangeLvlXp / (getPerHour(gainedRangeXp) / 60.0 / 60.0 / 1000.0)); 123 | if (gainedSlayXp == 0) 124 | ttl1 = 0; 125 | if (gainedRangeXp == 0) 126 | ttl2 = 0; 127 | 128 | Graphics g = renderEvent.getSource(); 129 | Graphics2D g2 = (Graphics2D) g; 130 | g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 131 | 132 | g2.setColor(new Color(0, 0, 0, 128)); 133 | g2.fillRect(20, 235, 227, 95); 134 | g2.setColor(Color.WHITE); 135 | g2.drawRect(20, 235, 227, 95); 136 | 137 | int x = 25; 138 | int y = 250; 139 | String slaylvlsGained = (Skills.getCurrentLevel(Skill.RANGED) - startSlayLvl) > 0 ? " (+" + (Skills.getCurrentLevel(Skill.SLAYER) - startSlayLvl) + ")" : ""; 140 | String rangelvlsGained = (Skills.getCurrentLevel(Skill.RANGED) - startRangeLvl) > 0 ? " (+" + (Skills.getCurrentLevel(Skill.RANGED) - startRangeLvl) + ")" : ""; 141 | 142 | DecimalFormat formatter = new DecimalFormat("#,###.##"); 143 | FontMetrics metrics = g2.getFontMetrics(); 144 | 145 | g2.setColor(Color.WHITE); 146 | g2.drawString("Status: ", x, y); 147 | int width = metrics.stringWidth("Status: "); 148 | g2.setColor(Color.YELLOW); 149 | g2.drawString(status, x + width, y); 150 | 151 | g2.setColor(Color.WHITE); 152 | g2.drawString("Elapsed Time: ", x, y += 15); 153 | width = metrics.stringWidth("Elapsed Time: "); 154 | g2.setColor(Color.PINK); 155 | g2.drawString(formatTime(System.currentTimeMillis() - startTime), x + width, y); 156 | width = metrics.stringWidth("Elapsed Time: " + formatTime(System.currentTimeMillis() - startTime)); 157 | g2.setColor(Color.WHITE); 158 | 159 | g2.drawString("Slayer lvl: ", x, y += 15); 160 | g2.setColor(Color.CYAN); 161 | width = metrics.stringWidth("Slayer lvl: "); 162 | g2.drawString(Skills.getCurrentLevel(Skill.SLAYER) + slaylvlsGained, x + width, y); 163 | g2.setColor(Color.WHITE); 164 | width = metrics.stringWidth("Slayer lvl: " + Skills.getCurrentLevel(Skill.SLAYER) + slaylvlsGained); 165 | g2.drawString(" (TTL: " + formatTime(Double.valueOf(ttl1).longValue()) + ")", x + width, y); 166 | 167 | g2.drawString("XP Gained: ", x, y += 15); 168 | width = metrics.stringWidth("XP Gained: "); 169 | g2.setColor(Color.YELLOW); 170 | g2.drawString(formatter.format(gainedSlayXp), x + width, y); 171 | width = metrics.stringWidth("XP Gained: " + formatter.format(gainedSlayXp)); 172 | g2.setColor(Color.WHITE); 173 | g2.drawString(" (" + formatter.format(getPerHour(gainedSlayXp)) + "/hr)", x + width, y); 174 | 175 | g2.drawString("Range lvl: ", x, y += 15); 176 | g2.setColor(Color.CYAN); 177 | width = metrics.stringWidth("Range lvl: "); 178 | g2.drawString(Skills.getCurrentLevel(Skill.RANGED) + rangelvlsGained, x + width, y); 179 | g2.setColor(Color.WHITE); 180 | width = metrics.stringWidth("Slayer lvl: " + Skills.getCurrentLevel(Skill.RANGED) + rangelvlsGained); 181 | g2.drawString(" (TTL: " + formatTime(Double.valueOf(ttl2).longValue()) + ")", x + width, y); 182 | 183 | g2.drawString("XP Gained: ", x, y += 15); 184 | width = metrics.stringWidth("XP Gained: "); 185 | g2.setColor(Color.YELLOW); 186 | g2.drawString(formatter.format(gainedRangeXp), x + width, y); 187 | width = metrics.stringWidth("XP Gained: " + formatter.format(gainedRangeXp)); 188 | g2.setColor(Color.WHITE); 189 | g2.drawString(" (" + formatter.format(getPerHour(gainedRangeXp)) + "/hr)", x + width, y); 190 | 191 | //Hide username 192 | if (Players.getLocal() != null) { 193 | Color tanColor = new Color(204, 187, 154); 194 | g2.setColor(tanColor); 195 | g2.fillRect(9, 459, 91, 15); 196 | } 197 | } 198 | 199 | @Override 200 | public void onStop() { 201 | Log.info("Thanks for slayin the booty!"); 202 | } 203 | 204 | private int random(int min, int max) { 205 | SecureRandom random = new SecureRandom(); 206 | return (random.nextInt(max - min + 1) + min); 207 | } 208 | 209 | private String formatTime(final long ms) { 210 | long s = ms / 1000, m = s / 60, h = m / 60; 211 | s %= 60; 212 | m %= 60; 213 | h %= 24; 214 | return String.format("%02d:%02d:%02d", h, m, s); 215 | } 216 | 217 | private double getPerHour(double value) { 218 | if ((System.currentTimeMillis() - startTime) > 0) { 219 | return value * 3600000d / (System.currentTimeMillis() - startTime); 220 | } else { 221 | return 0; 222 | } 223 | } 224 | } -------------------------------------------------------------------------------- /GlassBlower/Blow.java: -------------------------------------------------------------------------------- 1 | import org.rspeer.runetek.adapter.scene.Player; 2 | import org.rspeer.runetek.adapter.scene.SceneObject; 3 | import org.rspeer.runetek.api.commons.Time; 4 | import org.rspeer.runetek.api.component.Bank; 5 | import org.rspeer.runetek.api.component.Production; 6 | import org.rspeer.runetek.api.component.tab.Inventory; 7 | import org.rspeer.runetek.api.component.tab.Skill; 8 | import org.rspeer.runetek.api.component.tab.Skills; 9 | import org.rspeer.runetek.api.movement.Movement; 10 | import org.rspeer.runetek.api.scene.Npcs; 11 | import org.rspeer.runetek.api.scene.Players; 12 | import org.rspeer.runetek.api.scene.SceneObjects; 13 | import org.rspeer.runetek.event.listeners.ChatMessageListener; 14 | import org.rspeer.runetek.event.listeners.RenderListener; 15 | import org.rspeer.runetek.event.types.ChatMessageEvent; 16 | import org.rspeer.runetek.event.types.ChatMessageType; 17 | import org.rspeer.runetek.event.types.RenderEvent; 18 | import org.rspeer.script.Script; 19 | import org.rspeer.script.ScriptCategory; 20 | import org.rspeer.script.ScriptMeta; 21 | import org.rspeer.ui.Log; 22 | 23 | import java.awt.*; 24 | import java.security.SecureRandom; 25 | 26 | @ScriptMeta(name = "Blow Master", desc = "Blows shit", developer = "Koko", version = 1.0, category = ScriptCategory.CRAFTING) 27 | public class Blow extends Script implements RenderListener, ChatMessageListener { 28 | 29 | private int startXP, startLvl, lastAnimDelay; 30 | private int blow = 0, needsBlowing = 0; 31 | 32 | private String status; 33 | private long startTime, lastAnim; 34 | 35 | @Override 36 | public void onStart() { 37 | 38 | startTime = System.currentTimeMillis(); 39 | startXP = Skills.getExperience(Skill.CRAFTING); 40 | startLvl = Skills.getCurrentLevel(Skill.CRAFTING); 41 | lastAnimDelay = random(3000, 5000); 42 | 43 | status = "Loading up!"; 44 | } 45 | 46 | @Override 47 | public int loop() { 48 | Player Local = Players.getLocal(); 49 | 50 | //Run 51 | if (!Movement.isRunEnabled()) 52 | Movement.toggleRun(true); 53 | 54 | if (Inventory.contains(item -> item.getName().equals("Molten glass"))) { 55 | status = "Blowing!"; 56 | if (Local.isAnimating()) 57 | lastAnim = System.currentTimeMillis(); 58 | 59 | long msSinceAnim = System.currentTimeMillis() - lastAnim; 60 | 61 | if (!Local.isAnimating() && msSinceAnim > lastAnimDelay) { 62 | Log.info("Not animating! Starting new blowjob session."); 63 | 64 | if (Production.isOpen()) { 65 | Log.info("Production ready!"); 66 | Production.initiate(5);//unPowered Orb 67 | lastAnimDelay = random(3000, 5000); 68 | Time.sleep(random(1000, 1500)); 69 | } else { 70 | if (!Inventory.isItemSelected()) { 71 | Log.info("Pipe selected"); 72 | Inventory.getFirst("Glassblowing pipe").interact("Use"); 73 | Time.sleep(random(300, 700)); 74 | } 75 | if (Inventory.isItemSelected()) { 76 | Log.info("Using pipe on molten glass"); 77 | Inventory.getFirst(item -> item.getName().equals("Molten glass")).interact("Use"); 78 | } 79 | Time.sleepUntil(Production::isOpen, 500, 10000); 80 | } 81 | } 82 | } else { 83 | //Bank 84 | Log.info("We finished blowing! Banking for more molten glass."); 85 | status = "Finished blowing!"; 86 | SceneObject bankChest = SceneObjects.getNearest("Chest"); 87 | if (bankChest != null) { 88 | if (!Bank.isOpen()) { 89 | int sleep = random(3000, 20000); 90 | status = "Time to bank! Sleeping for " + (sleep / 1000) + "s."; 91 | Time.sleep(sleep); 92 | 93 | Log.info("Opening bank"); 94 | status = "Opening bank"; 95 | bankChest.interact("Bank"); 96 | Time.sleepUntil(Bank::isOpen, 1000, 10000); 97 | Time.sleep(random(500, 1200)); 98 | } else { 99 | status = "Depositing orbs"; 100 | Log.info("Depositing orbs"); 101 | Bank.depositAllExcept("Glassblowing pipe"); 102 | Time.sleep(random(400, 600)); 103 | Log.info("Getting more molten glass to blow"); 104 | status = "Getting more molten glass to blow"; 105 | if (Bank.contains("Molten glass")) { 106 | Bank.withdrawAll("Molten glass"); 107 | needsBlowing = Bank.getCount("Molten glass"); 108 | Time.sleepUntil(Inventory::isFull, 1000, 10000); 109 | } else { 110 | Log.info("We ran out of molten glass!"); 111 | setStopping(true); 112 | } 113 | Bank.close(); 114 | Time.sleep(random(300, 500)); 115 | } 116 | } 117 | } 118 | return random(200, 300); 119 | } 120 | 121 | @Override 122 | public void notify(ChatMessageEvent event) { 123 | if (event.getType().equals(ChatMessageType.FILTERED)) { 124 | if (event.getMessage().startsWith("You make an")) { 125 | blow++; 126 | } 127 | } 128 | } 129 | 130 | @Override 131 | public void notify(RenderEvent renderEvent) { 132 | double ETA = getETA(); 133 | int nextLvlXp = Skills.getExperienceToNextLevel(Skill.CRAFTING);//500 134 | int gainedXp = Skills.getExperience(Skill.CRAFTING) - startXP;//75 135 | double ttl = (nextLvlXp / (getPerHour(gainedXp) / 60.0 / 60.0 / 1000.0)); 136 | if (gainedXp == 0) 137 | ttl = 0; 138 | 139 | Graphics g = renderEvent.getSource(); 140 | g.setColor(Color.YELLOW); 141 | 142 | String lvlsGained = (Skills.getCurrentLevel(Skill.CRAFTING) - startLvl) > 0 ? " (+" + (Skills.getCurrentLevel(Skill.CRAFTING) - startLvl) + ")" : ""; 143 | 144 | g.drawString("Status: " + status, 25, 280); 145 | g.drawString("Elapsed Time: " + formatTime(System.currentTimeMillis() - startTime) + " (ETA: " + formatTime(Double.valueOf(ETA).longValue()) + ")", 25, 295); 146 | g.drawString("Crafting lvl: " + Skills.getCurrentLevel(Skill.CRAFTING) + lvlsGained + " (TTL: " + formatTime(Double.valueOf(ttl).longValue()) + ")", 25, 310); 147 | g.drawString("XP Gained: " + gainedXp + " [" + String.format("%.2f", getPerHour(gainedXp)) + "/hr]", 25, 325); 148 | g.drawString("Orbs: " + blow + " (" + String.format("%.2f", getPerHour(blow)) + "/hr)", 25, 340); 149 | } 150 | 151 | @Override 152 | public void onStop() { 153 | Log.info("Thanks for blowing! " + blow + "/" + needsBlowing + " unpowered orbs blew this session"); 154 | } 155 | 156 | private int random(int min, int max) { 157 | SecureRandom random = new SecureRandom(); 158 | return (random.nextInt(max - min + 1) + min); 159 | } 160 | 161 | private String formatTime(final long ms) { 162 | long s = ms / 1000, m = s / 60, h = m / 60; 163 | s %= 60; 164 | m %= 60; 165 | h %= 24; 166 | return String.format("%02d:%02d:%02d", h, m, s); 167 | } 168 | 169 | private double getPerHour(double value) { 170 | if ((System.currentTimeMillis() - startTime) > 0) { 171 | return value * 3600000d / (System.currentTimeMillis() - startTime); 172 | } else { 173 | return 0; 174 | } 175 | } 176 | 177 | private double getETA() { 178 | //60 minutes in an hour, 60 seconds in 1 minute, 1000ms in 1 second 179 | return needsBlowing / (getPerHour(blow) / 60.0 / 60.0 / 1000.0); 180 | } 181 | } -------------------------------------------------------------------------------- /Lova Favor/Mine.java: -------------------------------------------------------------------------------- 1 | import org.rspeer.runetek.adapter.scene.Player; 2 | import org.rspeer.runetek.adapter.scene.SceneObject; 3 | import org.rspeer.runetek.api.commons.Time; 4 | import org.rspeer.runetek.api.commons.math.Distance; 5 | import org.rspeer.runetek.api.component.Bank; 6 | import org.rspeer.runetek.api.component.Interfaces; 7 | import org.rspeer.runetek.api.component.tab.Inventory; 8 | import org.rspeer.runetek.api.component.tab.Skill; 9 | import org.rspeer.runetek.api.component.tab.Skills; 10 | import org.rspeer.runetek.api.local.Health; 11 | import org.rspeer.runetek.api.movement.Movement; 12 | import org.rspeer.runetek.api.movement.position.Position; 13 | import org.rspeer.runetek.api.scene.Players; 14 | import org.rspeer.runetek.api.scene.SceneObjects; 15 | import org.rspeer.runetek.event.listeners.ChatMessageListener; 16 | import org.rspeer.runetek.event.listeners.RenderListener; 17 | import org.rspeer.runetek.event.types.ChatMessageEvent; 18 | import org.rspeer.runetek.event.types.ChatMessageType; 19 | import org.rspeer.runetek.event.types.RenderEvent; 20 | import org.rspeer.script.Script; 21 | import org.rspeer.script.ScriptCategory; 22 | import org.rspeer.script.ScriptMeta; 23 | import org.rspeer.ui.Log; 24 | 25 | import java.awt.*; 26 | import java.security.SecureRandom; 27 | 28 | @ScriptMeta(name = "Lovakengj", desc = "Mines volcanic sulphur and survives the poison", developer = "Koko", version = 1.0, category = ScriptCategory.MINING) 29 | public class Mine extends Script implements RenderListener, ChatMessageListener { 30 | 31 | private int startXP, startLvl, lastAnimDelay, sulphur = 0, eatAt; 32 | private String status; 33 | private long startTime, lastAnim; 34 | private double startFavour; 35 | 36 | @Override 37 | public void onStart() { 38 | startTime = System.currentTimeMillis(); 39 | startXP = Skills.getExperience(Skill.MINING); 40 | startLvl = Skills.getCurrentLevel(Skill.MINING); 41 | startFavour = Double.parseDouble(Interfaces.getComponent(245, 9, 8).getText().replace("%", "")); 42 | lastAnimDelay = random(2000, 4000); 43 | status = "Loading up!"; 44 | eatAt = random(30, 40); 45 | } 46 | 47 | @Override 48 | public int loop() { 49 | Player Local = Players.getLocal(); 50 | 51 | //Run 52 | if (!Movement.isRunEnabled()) 53 | Movement.toggleRun(true); 54 | 55 | if (Health.getCurrent() > eatAt) { 56 | if (Inventory.isFull()) { 57 | status = "Banking"; 58 | SceneObject bank = SceneObjects.getNearest("Bank chest"); 59 | if (bank != null) { 60 | bank.interact("Use"); 61 | Time.sleepUntil(Bank::isOpen, 1000, 10000); 62 | } 63 | if (Bank.isOpen()) { 64 | Bank.depositInventory(); 65 | Time.sleepUntil(Inventory::isEmpty, 1000, 10000); 66 | Bank.close(); 67 | } 68 | } else { 69 | status = "Gaining favour"; 70 | SceneObject volcanicSulphur = SceneObjects.getNearest("Volcanic sulphur"); 71 | //SceneObject volcanicSulphur = SceneObjects.getNearest(28596);red rocks 72 | SceneObject[] sorted = Distance.sort(SceneObjects.getLoaded(SceneObject -> SceneObject.getName().equals("Volcanic sulphur"))); 73 | 74 | 75 | if (Local.isAnimating()) 76 | lastAnim = System.currentTimeMillis(); 77 | 78 | long msSinceAnim = System.currentTimeMillis() - lastAnim; 79 | 80 | if (Local.isHealthBarVisible() && msSinceAnim > lastAnimDelay) { 81 | Log.info("Need a new rock!"); 82 | 83 | if (sorted.length > 0) { 84 | int index = sorted.length - 1; 85 | index = random(0, index); 86 | sorted[index].interact(x -> true); 87 | Time.sleepUntil(Local::isAnimating, 1000, 10000); 88 | } 89 | } 90 | 91 | if (!Local.isAnimating() && msSinceAnim > lastAnimDelay) { 92 | if (volcanicSulphur != null) { 93 | Position rock = volcanicSulphur.getPosition(); 94 | volcanicSulphur.interact(x -> true); 95 | Time.sleepUntil(() -> SceneObjects.getAt(rock)[0].getId() == 7468, 1000, 15000); 96 | lastAnimDelay = random(2000, 4000); 97 | } 98 | } else { 99 | if (msSinceAnim > 0) 100 | status = "Tabby! " + msSinceAnim + "ms"; 101 | } 102 | } 103 | } else { 104 | eatAt = random(30, 40); 105 | status = "Eating! Next eat at " + eatAt; 106 | Log.info("Next eat at " + eatAt); 107 | if (Inventory.contains(item -> item.containsAction("Eat"))) { 108 | for (int i = 0; i < 5; i++) { 109 | if (Inventory.contains(item -> item.containsAction("Eat"))) { 110 | Inventory.getFirst(item -> item.containsAction("Eat")).interact(x -> true); 111 | Time.sleepUntil(Local::isAnimating, 500, 10000); 112 | } else { 113 | break; 114 | } 115 | } 116 | } else { 117 | status = "Getting food"; 118 | SceneObject bank = SceneObjects.getNearest("Bank chest"); 119 | if (bank != null) { 120 | bank.interact("Use"); 121 | Time.sleepUntil(Bank::isOpen, 1000, 10000); 122 | } 123 | if (Bank.isOpen()) { 124 | Bank.depositInventory(); 125 | Time.sleepUntil(Inventory::isEmpty, 1000, 10000); 126 | Bank.withdraw("Tuna", random(3, 5)); 127 | Time.sleepUntil(() -> Inventory.contains("Tuna"), 1000, 10000); 128 | Bank.close(); 129 | } 130 | } 131 | } 132 | return random(200, 300); 133 | } 134 | 135 | @Override 136 | public void notify(ChatMessageEvent event) { 137 | if (!event.getType().equals(ChatMessageType.PUBLIC)) {//!= chatType.Public 138 | if (event.getMessage().startsWith("You manage to mine some")) { 139 | sulphur++; 140 | } 141 | } 142 | } 143 | 144 | @Override 145 | public void notify(RenderEvent renderEvent) { 146 | int nextLvlXp = Skills.getExperienceToNextLevel(Skill.MINING);//500 147 | int gainedXp = Skills.getExperience(Skill.MINING) - startXP;//75 148 | double ttl = (nextLvlXp / (getPerHour(gainedXp) / 60.0 / 60.0 / 1000.0)); 149 | if (gainedXp == 0) 150 | ttl = 0; 151 | 152 | Graphics g = renderEvent.getSource(); 153 | g.setColor(Color.YELLOW); 154 | 155 | String lvlsGained = (Skills.getCurrentLevel(Skill.MINING) - startLvl) > 0 ? " (+" + (Skills.getCurrentLevel(Skill.MINING) - startLvl) + ")" : ""; 156 | g.drawString("Status: " + status, 25, 265); 157 | g.drawString("Elapsed Time: " + formatTime(System.currentTimeMillis() - startTime), 25, 280); 158 | g.drawString("Mining lvl: " + Skills.getCurrentLevel(Skill.MINING) + lvlsGained + " (TTL: " + formatTime(Double.valueOf(ttl).longValue()) + ")", 25, 295); 159 | g.drawString("XP Gained: " + gainedXp + " [" + String.format("%.2f", getPerHour(gainedXp)) + "/hr]", 25, 310); 160 | g.drawString("Mined: " + sulphur + " (" + String.format("%.2f", getPerHour(sulphur)) + "/hr)", 25, 325); 161 | g.drawString("Favor: " + String.format("%.2f", getFavor()) + "% " + String.format("%.2f", (getPerHour(getFavor()))) + "%/hr]", 25, 340); 162 | } 163 | 164 | @Override 165 | public void onStop() { 166 | Log.info("Thanks for gaining favor! Mined " + sulphur + " sulphur this session."); 167 | } 168 | 169 | private int random(int min, int max) { 170 | SecureRandom random = new SecureRandom(); 171 | return (random.nextInt(max - min + 1) + min); 172 | } 173 | 174 | private String formatTime(final long ms) { 175 | long s = ms / 1000, m = s / 60, h = m / 60; 176 | s %= 60; 177 | m %= 60; 178 | h %= 24; 179 | return String.format("%02d:%02d:%02d", h, m, s); 180 | } 181 | 182 | private double getFavor() { 183 | //Make sure to switch to favor tab and have this open for this function to work 184 | 185 | if (Interfaces.getComponent(245, 9, 8) != null) { 186 | String flavour = Interfaces.getComponent(245, 9, 8).getText(); 187 | flavour = flavour.replace("%", ""); 188 | return Double.parseDouble(flavour) - startFavour; 189 | } 190 | return 0; 191 | } 192 | 193 | private double getPerHour(double value) { 194 | if ((System.currentTimeMillis() - startTime) > 0) { 195 | return value * 3600000d / (System.currentTimeMillis() - startTime); 196 | } else { 197 | return 0; 198 | } 199 | } 200 | } -------------------------------------------------------------------------------- /Lum Range/Cook.java: -------------------------------------------------------------------------------- 1 | import org.rspeer.runetek.adapter.scene.Player; 2 | import org.rspeer.runetek.adapter.scene.SceneObject; 3 | import org.rspeer.runetek.api.commons.Time; 4 | import org.rspeer.runetek.api.component.Bank; 5 | import org.rspeer.runetek.api.component.Production; 6 | import org.rspeer.runetek.api.component.tab.Inventory; 7 | import org.rspeer.runetek.api.component.tab.Skill; 8 | import org.rspeer.runetek.api.component.tab.Skills; 9 | import org.rspeer.runetek.api.movement.Movement; 10 | import org.rspeer.runetek.api.scene.Npcs; 11 | import org.rspeer.runetek.api.scene.Players; 12 | import org.rspeer.runetek.api.scene.SceneObjects; 13 | import org.rspeer.runetek.event.listeners.ChatMessageListener; 14 | import org.rspeer.runetek.event.listeners.RenderListener; 15 | import org.rspeer.runetek.event.types.ChatMessageEvent; 16 | import org.rspeer.runetek.event.types.ChatMessageType; 17 | import org.rspeer.runetek.event.types.RenderEvent; 18 | import org.rspeer.script.Script; 19 | import org.rspeer.script.ScriptCategory; 20 | import org.rspeer.script.ScriptMeta; 21 | import org.rspeer.ui.Log; 22 | 23 | import java.awt.*; 24 | import java.security.SecureRandom; 25 | 26 | @ScriptMeta(name = "Lumbridge Cook", desc = "Cooks at the Lumbridge range", developer = "Koko", version = 1.0, category = ScriptCategory.COOKING) 27 | public class Cook extends Script implements RenderListener, ChatMessageListener { 28 | 29 | private int startXP, startLvl, lastAnimDelay; 30 | private int cooked = 0, burnt = 0, needsCooking = 0; 31 | 32 | private String status; 33 | private long startTime, lastAnim; 34 | 35 | @Override 36 | public void onStart() { 37 | 38 | startTime = System.currentTimeMillis(); 39 | startXP = Skills.getExperience(Skill.COOKING); 40 | startLvl = Skills.getCurrentLevel(Skill.COOKING); 41 | lastAnimDelay = random(3000, 5000); 42 | 43 | status = "Loading up!"; 44 | } 45 | 46 | @Override 47 | public int loop() { 48 | Player Local = Players.getLocal(); 49 | 50 | //Run 51 | if (!Movement.isRunEnabled()) 52 | Movement.toggleRun(true); 53 | 54 | if (Inventory.contains(item -> item.getName().startsWith("Raw"))) { 55 | //COOK 56 | SceneObject range = SceneObjects.getNearest("Cooking range"); 57 | if (range != null) { 58 | status = "Cooking!"; 59 | //Cook 60 | if (Local.isAnimating()) 61 | lastAnim = System.currentTimeMillis(); 62 | 63 | long msSinceAnim = System.currentTimeMillis() - lastAnim; 64 | 65 | if (!Local.isAnimating() && msSinceAnim > lastAnimDelay) { 66 | Log.info("Not animating! Starting new cook session."); 67 | range.interact("Cook"); 68 | lastAnimDelay = random(3000, 5000); 69 | Time.sleepUntil(Production::isOpen, 500, 10000); 70 | if (Production.isOpen()) { 71 | Production.initiate(); 72 | Time.sleep(random(1000, 1500)); 73 | } 74 | } 75 | } else { 76 | Log.info("We have raw food but we can't find the range! Climbing ladder..."); 77 | status = "Getting to range"; 78 | SceneObject Bank = SceneObjects.getNearest("Chest"); 79 | SceneObject Ladder = SceneObjects.getNearest("Ladder"); 80 | if (Bank != null && Ladder != null) { 81 | Ladder.interact("Climb-up"); 82 | Time.sleepUntil(() -> SceneObjects.getNearest("Cooking range") != null, 1000, 10000); 83 | Time.sleep(random(500, 1200)); 84 | } 85 | } 86 | //Last anim 87 | } else { 88 | //Bank 89 | Log.info("We finished cooking! Banking for more raw stuff."); 90 | status = "Finished cooking!"; 91 | SceneObject bankChest = SceneObjects.getNearest("Chest"); 92 | if (bankChest != null) { 93 | if (!Bank.isOpen()) { 94 | Log.info("Opening bank"); 95 | status = "Opening bank"; 96 | bankChest.interact("Bank"); 97 | Time.sleepUntil(Bank::isOpen, 1000, 10000); 98 | Time.sleep(random(500, 1200)); 99 | } else { 100 | status = "Depositing cooked food"; 101 | Log.info("Depositing cooked food"); 102 | Bank.depositInventory(); 103 | Time.sleep(random(400, 600)); 104 | Log.info("Getting more shit to cook"); 105 | status = "Getting more stuff to cook"; 106 | if(Bank.contains(item -> item.getName().startsWith("Raw"))) { 107 | Bank.withdrawAll(item -> item.getName().startsWith("Raw")); 108 | needsCooking = Bank.getCount(item -> item.getName().startsWith("Raw")); 109 | Time.sleepUntil(Inventory::isFull, 1000, 10000); 110 | } else { 111 | Log.info("We ran out of things to cook! Stopping script..."); 112 | setStopping(true); 113 | } 114 | } 115 | } else { 116 | int sleep = random(3000, 12000); 117 | status = "Time to bank! Sleeping for " + (sleep / 1000) + "s."; 118 | Time.sleep(sleep); 119 | Log.info("Climbing down trapdoor"); 120 | SceneObject trapDoor = SceneObjects.getNearest("Trapdoor"); 121 | if (trapDoor != null) { 122 | trapDoor.interact("Climb-down"); 123 | Time.sleepUntil(() -> SceneObjects.getNearest("Chest") != null, 1000, 10000); 124 | Time.sleep(random(500, 750)); 125 | } 126 | } 127 | } 128 | 129 | 130 | SceneObject Portal = SceneObjects.getNearest(SceneObject -> SceneObject.getName().equals("Portal") && SceneObject.containsAction("Lock") && SceneObject.containsAction("Enter")); 131 | if (Portal != null) { 132 | Portal.interact("Enter"); 133 | Time.sleepUntil(() -> Npcs.getNearest("Phials") != null, 1000, 10000); 134 | } 135 | 136 | return random(200, 300); 137 | } 138 | 139 | @Override 140 | public void notify(ChatMessageEvent event) { 141 | if (event.getType().equals(ChatMessageType.FILTERED)) { 142 | if (event.getMessage().startsWith("You accidentally")) { 143 | burnt++; 144 | } else if (event.getMessage().startsWith("You successfully") || event.getMessage().startsWith("You manage") || event.getMessage().startsWith("You roast")) { 145 | cooked++; 146 | } 147 | } 148 | } 149 | 150 | @Override 151 | public void notify(RenderEvent renderEvent) { 152 | double ETA = getETA(); 153 | int nextLvlXp = Skills.getExperienceToNextLevel(Skill.COOKING);//500 154 | int gainedXp = Skills.getExperience(Skill.COOKING) - startXP;//75 155 | double ttl = (nextLvlXp / (getPerHour(gainedXp) / 60.0 / 60.0 / 1000.0)); 156 | if (gainedXp == 0) 157 | ttl = 0; 158 | 159 | Graphics g = renderEvent.getSource(); 160 | g.setColor(Color.YELLOW); 161 | 162 | String lvlsGained = (Skills.getCurrentLevel(Skill.COOKING) - startLvl) > 0 ? " (+" + (Skills.getCurrentLevel(Skill.COOKING) - startLvl) + ")" : ""; 163 | 164 | g.drawString("Status: " + status, 25, 265); 165 | g.drawString("Elapsed Time: " + formatTime(System.currentTimeMillis() - startTime) + " (ETA: " + formatTime(Double.valueOf(ETA).longValue()) + ")", 25, 280); 166 | g.drawString("Cooking lvl: " + Skills.getCurrentLevel(Skill.COOKING) + lvlsGained + " (TTL: " + formatTime(Double.valueOf(ttl).longValue()) + ")", 25, 295); 167 | g.drawString("XP Gained: " + gainedXp + " [" + String.format("%.2f", getPerHour(gainedXp)) + "/hr]", 25, 310); 168 | g.drawString("Fish cooked: " + cooked + " (" + String.format("%.2f", getPerHour(cooked)) + "/hr)", 25, 325); 169 | g.drawString("Fish burn: " + burnt + " (" + String.format("%.2f", getPerHour(burnt)) + "/hr)", 25, 340); 170 | } 171 | 172 | @Override 173 | public void onStop() { 174 | Log.info("Thanks for cooking! Yield: " + cooked + "/" + (cooked + burnt) + " cooked this session"); 175 | } 176 | 177 | private int random(int min, int max) { 178 | SecureRandom random = new SecureRandom(); 179 | return (random.nextInt(max - min + 1) + min); 180 | } 181 | 182 | private String formatTime(final long ms) { 183 | long s = ms / 1000, m = s / 60, h = m / 60; 184 | s %= 60; 185 | m %= 60; 186 | h %= 24; 187 | return String.format("%02d:%02d:%02d", h, m, s); 188 | } 189 | 190 | private double getPerHour(double value) { 191 | if ((System.currentTimeMillis() - startTime) > 0) { 192 | return value * 3600000d / (System.currentTimeMillis() - startTime); 193 | } else { 194 | return 0; 195 | } 196 | } 197 | 198 | private double getETA() { 199 | //60 minutes in an hour, 60 seconds in 1 minute, 1000ms in 1 second 200 | return needsCooking / (getPerHour(cooked + burnt) / 60.0 / 60.0 / 1000.0); 201 | } 202 | } -------------------------------------------------------------------------------- /Lunar Spin Flax/RandomHandler.java: -------------------------------------------------------------------------------- 1 | import org.rspeer.runetek.adapter.component.InterfaceComponent; 2 | import org.rspeer.runetek.adapter.scene.Npc; 3 | import org.rspeer.runetek.api.commons.Time; 4 | import org.rspeer.runetek.api.component.Dialog; 5 | import org.rspeer.runetek.api.component.Interfaces; 6 | import org.rspeer.runetek.api.component.tab.Inventory; 7 | import org.rspeer.runetek.api.scene.Npcs; 8 | import org.rspeer.runetek.api.scene.Players; 9 | import org.rspeer.script.Script; 10 | import org.rspeer.ui.Log; 11 | 12 | import javax.swing.*; 13 | import java.io.*; 14 | import java.security.SecureRandom; 15 | import java.time.LocalDateTime; 16 | import java.util.Arrays; 17 | 18 | class RandomHandler { 19 | double SCRIPT_VERSION = 1.0; 20 | 21 | private boolean showPopup = false, showSecondPopup = false; 22 | 23 | void checkLamp() { 24 | if (Inventory.contains("Lamp")) { 25 | if (!Interfaces.isOpen(134)) { 26 | Inventory.getFirst("Lamp").interact("Rub"); 27 | Time.sleepUntil(() -> Interfaces.isOpen(134), 500, 10000); 28 | } 29 | if (Interfaces.isOpen(134)) { 30 | InterfaceComponent prayer = Interfaces.getComponent(134, 9); 31 | InterfaceComponent confirm = Interfaces.getComponent(134, 26); 32 | prayer.interact("Advance Prayer"); 33 | Time.sleep(random(1000, 1500)); 34 | confirm.interact("Ok"); 35 | Time.sleepUntil(() -> !Interfaces.isOpen(134), 500, 10000); 36 | } 37 | if (Dialog.canContinue()) { 38 | Dialog.processContinue(); 39 | Time.sleep(random(200, 500)); 40 | } 41 | } 42 | } 43 | 44 | boolean findNearbyRandoms() { 45 | if (Npcs.getNearest(npc -> npc.containsAction("Dismiss")) != null) { 46 | if (!showPopup) { 47 | java.awt.EventQueue.invokeLater(() -> { 48 | JOptionPane optionPane = new JOptionPane("RANDOM EVENT DETECTED!", JOptionPane.WARNING_MESSAGE); 49 | JDialog dialog = optionPane.createDialog("Warning!"); 50 | dialog.setAlwaysOnTop(true); 51 | dialog.setVisible(true); 52 | }); 53 | showPopup = true; 54 | } 55 | Log.info("Detected random event!"); 56 | Npc event = Npcs.getNearest(npc -> npc.containsAction("Dismiss")); 57 | 58 | logChat("We have detected a random event [" + event.getName() + "] Actions: [" + Arrays.toString(event.getActions()) + "]" 59 | + " NPC Target: " + (event.getTarget() != null ? event.getTarget().getName() : "N/A") 60 | + " Message: " + (event.getOverheadText() != null ? event.getOverheadText() : "N/A")); 61 | return true; 62 | } 63 | showPopup = false; 64 | return false; 65 | } 66 | 67 | boolean doWeHaveRandom() { 68 | if (Npcs.getNearest(npc -> npc.containsAction("Dismiss") && npc.getTarget() == Players.getLocal() && npc.isPositionWalkable()) != null) { 69 | if (!showSecondPopup) { 70 | java.awt.EventQueue.invokeLater(() -> { 71 | JOptionPane optionPane = new JOptionPane("WE HAVE A RANDOM EVENT!", JOptionPane.WARNING_MESSAGE); 72 | JDialog dialog = optionPane.createDialog("Warning!!"); 73 | dialog.setAlwaysOnTop(true); 74 | dialog.setVisible(true); 75 | }); 76 | showSecondPopup = true; 77 | } 78 | return true; 79 | } 80 | showSecondPopup = false; 81 | return false; 82 | } 83 | 84 | void handleRandom() { 85 | Npc event = Npcs.getNearest(npc -> npc.containsAction("Dismiss") && npc.getTarget() == Players.getLocal()); 86 | 87 | if ((event.getName().equals("Genie") || event.getName().equals("Drunken Dwarf") || event.getName().equals("Dr Jekyll") || event.getName().equals("Rick Turpentine")) && event.isPositionWalkable()) { 88 | if (!Dialog.isOpen()) { 89 | event.interact(x -> true); 90 | Time.sleepUntil(Dialog::isOpen, 1000, 10000); 91 | } 92 | if (Dialog.canContinue()) { 93 | Dialog.processContinue(); 94 | Time.sleep(random(200, 500)); 95 | } 96 | 97 | //NEEDS TESTING 98 | } else if (event.getName().equals("Frog")) { 99 | Npc frogPrince = Npcs.getNearest(npc -> !npc.containsAction("Dismiss") && npc.getName().equals("Frog") && npc.containsAction("Talk-to")); 100 | if (!Dialog.isOpen()) { 101 | frogPrince.interact(x -> true); 102 | Time.sleepUntil(Dialog::isOpen, 1000, 10000); 103 | } 104 | if (Dialog.canContinue()) { 105 | Dialog.processContinue(); 106 | Time.sleep(random(200, 500)); 107 | } 108 | if (Dialog.isViewingChatOptions()) { 109 | Dialog.process("I suppose so, sure."); 110 | // Dialog.process(opt->opt.contains("sure")); 111 | //Dialog.process(0);//Yes? 112 | Time.sleep(random(200, 500)); 113 | } 114 | } else if (event.getName().equals("Sergeant Damien")) { 115 | Log.info("We got sergeant lets do it!"); 116 | Time.sleep(random(500, 1000)); 117 | } else { 118 | Time.sleep(random(200, 500)); 119 | event.interact("Dismiss"); 120 | Time.sleep(random(300, 500)); 121 | } 122 | 123 | } 124 | 125 | private void logChat(String text) { 126 | LocalDateTime timestamp = LocalDateTime.now(); 127 | if (!new File(Script.getDataDirectory() + "\\Koko\\Logs\\Screenshots").exists()) { 128 | new File(Script.getDataDirectory() + "\\Koko\\Logs\\Screenshots").mkdirs(); 129 | } 130 | 131 | try (FileWriter fw = new FileWriter(Script.getDataDirectory() + "\\Koko\\Logs\\Randoms.txt", true); 132 | BufferedWriter bw = new BufferedWriter(fw); 133 | PrintWriter out = new PrintWriter(bw)) { 134 | out.println(timestamp + "> " + text); 135 | } catch (IOException e) { 136 | //exception handling left as an exercise for the reader 137 | } 138 | } 139 | 140 | private int random(int min, int max) { 141 | SecureRandom random = new SecureRandom(); 142 | return (random.nextInt(max - min + 1) + min); 143 | } 144 | } -------------------------------------------------------------------------------- /NMZ/GUI.java: -------------------------------------------------------------------------------- 1 | import java.awt.*; 2 | import java.awt.event.*; 3 | import javax.swing.*; 4 | import javax.swing.border.*; 5 | /* 6 | * Created by JFormDesigner on Mon Jan 28 04:23:18 PST 2019 7 | */ 8 | 9 | 10 | 11 | /** 12 | * @author James Thomas 13 | */ 14 | class GUI extends JFrame { 15 | private boolean startedScript = false; 16 | GUI() { 17 | initComponents(); 18 | } 19 | 20 | private void startButtonMouseClicked(MouseEvent e) { 21 | setVisible(false); 22 | startedScript = true; 23 | dispose(); 24 | } 25 | 26 | private void initComponents() { 27 | panel1 = new JPanel(); 28 | panel2 = new JPanel(); 29 | combatStyle = new JComboBox<>(); 30 | label1 = new JLabel(); 31 | hpVal = new JSpinner(); 32 | label2 = new JLabel(); 33 | startButton = new JButton(); 34 | 35 | //======== this ======== 36 | setTitle("NMZ"); 37 | Container contentPane = getContentPane(); 38 | contentPane.setLayout(new GridBagLayout()); 39 | ((GridBagLayout)contentPane.getLayout()).columnWidths = new int[] {0, 0, 0}; 40 | ((GridBagLayout)contentPane.getLayout()).rowHeights = new int[] {0, 0, 0, 0}; 41 | ((GridBagLayout)contentPane.getLayout()).columnWeights = new double[] {0.0, 0.0, 1.0E-4}; 42 | ((GridBagLayout)contentPane.getLayout()).rowWeights = new double[] {0.0, 0.0, 0.0, 1.0E-4}; 43 | 44 | //======== panel1 ======== 45 | { 46 | panel1.setBorder(new TitledBorder("NMZ")); 47 | 48 | panel1.setLayout(new GridBagLayout()); 49 | ((GridBagLayout)panel1.getLayout()).columnWidths = new int[] {0, 0, 0}; 50 | ((GridBagLayout)panel1.getLayout()).rowHeights = new int[] {0, 0, 0, 0}; 51 | ((GridBagLayout)panel1.getLayout()).columnWeights = new double[] {0.0, 0.0, 1.0E-4}; 52 | ((GridBagLayout)panel1.getLayout()).rowWeights = new double[] {0.0, 0.0, 0.0, 1.0E-4}; 53 | 54 | //======== panel2 ======== 55 | { 56 | panel2.setBorder(new TitledBorder("Combat Options")); 57 | panel2.setLayout(new GridBagLayout()); 58 | ((GridBagLayout)panel2.getLayout()).columnWidths = new int[] {35, 24, 29, 0}; 59 | ((GridBagLayout)panel2.getLayout()).rowHeights = new int[] {0, 0, 0, 0}; 60 | ((GridBagLayout)panel2.getLayout()).columnWeights = new double[] {0.0, 0.0, 0.0, 1.0E-4}; 61 | ((GridBagLayout)panel2.getLayout()).rowWeights = new double[] {0.0, 0.0, 0.0, 1.0E-4}; 62 | 63 | //---- comboBox1 ---- 64 | combatStyle.setModel(new DefaultComboBoxModel<>(new String[] { 65 | "Strength", 66 | "Attack", 67 | "Defence", 68 | "Ranged", 69 | "Magic" 70 | })); 71 | panel2.add(combatStyle, new GridBagConstraints(0, 0, 3, 1, 0.0, 0.0, 72 | GridBagConstraints.CENTER, GridBagConstraints.BOTH, 73 | new Insets(0, 0, 5, 0), 0, 0)); 74 | 75 | //---- label1 ---- 76 | label1.setText("AFK to"); 77 | panel2.add(label1, new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0, 78 | GridBagConstraints.CENTER, GridBagConstraints.BOTH, 79 | new Insets(0, 0, 5, 5), 0, 0)); 80 | 81 | //---- hpVal ---- 82 | hpVal.setModel(new SpinnerNumberModel(2, 0, null, 1)); 83 | panel2.add(hpVal, new GridBagConstraints(1, 1, 1, 1, 0.0, 0.0, 84 | GridBagConstraints.CENTER, GridBagConstraints.BOTH, 85 | new Insets(0, 0, 5, 5), 0, 0)); 86 | 87 | //---- label2 ---- 88 | label2.setText("HP"); 89 | panel2.add(label2, new GridBagConstraints(2, 1, 1, 1, 0.0, 0.0, 90 | GridBagConstraints.CENTER, GridBagConstraints.BOTH, 91 | new Insets(0, 0, 5, 0), 0, 0)); 92 | } 93 | panel1.add(panel2, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0, 94 | GridBagConstraints.CENTER, GridBagConstraints.BOTH, 95 | new Insets(0, 0, 5, 5), 0, 0)); 96 | 97 | //---- startButton ---- 98 | startButton.setText("Start"); 99 | startButton.addMouseListener(new MouseAdapter() { 100 | @Override 101 | public void mouseClicked(MouseEvent e) { 102 | startButtonMouseClicked(e); 103 | } 104 | }); 105 | panel1.add(startButton, new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0, 106 | GridBagConstraints.CENTER, GridBagConstraints.BOTH, 107 | new Insets(0, 0, 5, 5), 0, 0)); 108 | } 109 | contentPane.add(panel1, new GridBagConstraints(0, 0, 2, 3, 0.0, 0.0, 110 | GridBagConstraints.CENTER, GridBagConstraints.BOTH, 111 | new Insets(0, 0, 0, 0), 0, 0)); 112 | pack(); 113 | setLocationRelativeTo(getOwner()); 114 | } 115 | 116 | boolean isStartedClicked() { 117 | return startedScript; 118 | } 119 | 120 | String getCombatStyle() { 121 | return combatStyle.getItemAt(combatStyle.getSelectedIndex()); 122 | } 123 | 124 | int getAfkHpVal() { 125 | return (Integer) hpVal.getValue(); 126 | } 127 | 128 | private JPanel panel1; 129 | private JPanel panel2; 130 | private JComboBox combatStyle; 131 | private JLabel label1; 132 | private JSpinner hpVal; 133 | private JLabel label2; 134 | private JButton startButton; 135 | } -------------------------------------------------------------------------------- /NMZ/PinSolver.java: -------------------------------------------------------------------------------- 1 | import org.rspeer.runetek.adapter.component.InterfaceComponent; 2 | import org.rspeer.runetek.api.commons.Time; 3 | import org.rspeer.runetek.api.component.Interfaces; 4 | import org.rspeer.ui.Log; 5 | 6 | import java.security.SecureRandom; 7 | import java.util.ArrayList; 8 | import java.util.Arrays; 9 | import java.util.HashMap; 10 | 11 | class PinSolver { 12 | 13 | void enterPin(int pin) { 14 | HashMap pinCombination = new HashMap<>(); 15 | char[] combination = String.valueOf(pin).toCharArray(); 16 | int index = 0; 17 | int[] pinVals = {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1}; 18 | 19 | if (Interfaces.isOpen(213)) { 20 | 21 | for (int i = 16; i < 35; i += 2) { 22 | if (Interfaces.getComponent(213, i, 1) != null) { 23 | InterfaceComponent j = Interfaces.getComponent(213, i, 1); 24 | InterfaceComponent actionJ = Interfaces.getComponent(213, i, 0); 25 | if (!j.getText().equals("")) { 26 | pinCombination.put(Integer.parseInt(j.getText()), actionJ); 27 | pinVals[index] = Integer.parseInt(j.getText()); 28 | index++; 29 | } else { 30 | pinCombination.put(-1, actionJ); 31 | pinVals[index] = -1; 32 | index++; 33 | } 34 | } 35 | } 36 | int replace = getMissingNo(pinVals); 37 | //replace missing val 38 | if (pinCombination.containsKey(-1)) { 39 | Log.info("Changing -1 to " + replace); 40 | pinCombination.get(-1); 41 | pinCombination.put(replace, pinCombination.get(-1)); 42 | } 43 | 44 | if (Interfaces.getComponent(213, 3).getText().equals("?")) { 45 | Log.info("Entering stage 1"); 46 | if (pinCombination.containsKey(Integer.parseInt(String.valueOf(combination[0])))) { 47 | Log.info("Entering " + combination[0]); 48 | if (pinCombination.get(Integer.parseInt(String.valueOf(combination[0]))).interact("Select")) { 49 | Time.sleepUntil(() -> Interfaces.getComponent(213, 3).getText().equals("*"), random(300, 500), 5000); 50 | } 51 | enterPin(pin); 52 | } 53 | } else if (Interfaces.getComponent(213, 4).getText().equals("?")) { 54 | Log.info("Entering stage 2"); 55 | if (pinCombination.containsKey(Integer.parseInt(String.valueOf(combination[1])))) { 56 | Log.info("Entering " + combination[1]); 57 | if (pinCombination.get(Integer.parseInt(String.valueOf(combination[1]))).interact("Select")) { 58 | Time.sleepUntil(() -> Interfaces.getComponent(213, 4).getText().equals("*"), random(300, 500), 5000); 59 | } 60 | enterPin(pin); 61 | } 62 | } else if (Interfaces.getComponent(213, 5).getText().equals("?")) { 63 | Log.info("Entering stage 3"); 64 | if (pinCombination.containsKey(Integer.parseInt(String.valueOf(combination[2])))) { 65 | Log.info("Entering " + combination[2]); 66 | if (pinCombination.get(Integer.parseInt(String.valueOf(combination[2]))).interact("Select")) { 67 | Time.sleepUntil(() -> Interfaces.getComponent(213, 5).getText().equals("*"), random(300, 500), 5000); 68 | } 69 | enterPin(pin); 70 | } 71 | } else if (Interfaces.getComponent(213, 6).getText().equals("?")) { 72 | Log.info("Entering stage 4"); 73 | if (pinCombination.containsKey(Integer.parseInt(String.valueOf(combination[3])))) { 74 | Log.info("Entering " + combination[3]); 75 | if (pinCombination.get(Integer.parseInt(String.valueOf(combination[3]))).interact("Select")) { 76 | Time.sleepUntil(() -> Interfaces.getComponent(213, 6).getText().equals("*"), random(300, 500), 5000); 77 | } 78 | } 79 | } 80 | } 81 | } 82 | 83 | private int getMissingNo(int[] pins) { 84 | ArrayList missing = new ArrayList<>(); 85 | Arrays.sort(pins); 86 | 87 | for (int i = 1; i < pins.length; i++) { 88 | for (int j = pins[i - 1] + 1; j < pins[i]; j++) { 89 | missing.add(j); 90 | } 91 | } 92 | for (int i = pins[pins.length - 1] + 1; i <= pins[pins.length - 1]; i++) { 93 | if (i > -1) 94 | missing.add(i); 95 | } 96 | return missing.size() > 0 ? missing.get(0) : -1; 97 | } 98 | 99 | private int random(int min, int max) { 100 | SecureRandom random = new SecureRandom(); 101 | return (random.nextInt(max - min + 1) + min); 102 | } 103 | } 104 | -------------------------------------------------------------------------------- /NMZ/RandomHandler.java: -------------------------------------------------------------------------------- 1 | import org.rspeer.runetek.adapter.component.InterfaceComponent; 2 | import org.rspeer.runetek.adapter.scene.Npc; 3 | import org.rspeer.runetek.api.commons.Time; 4 | import org.rspeer.runetek.api.component.Dialog; 5 | import org.rspeer.runetek.api.component.Interfaces; 6 | import org.rspeer.runetek.api.component.tab.Inventory; 7 | import org.rspeer.runetek.api.scene.Npcs; 8 | import org.rspeer.runetek.api.scene.Players; 9 | import org.rspeer.script.Script; 10 | import org.rspeer.ui.Log; 11 | 12 | import javax.swing.*; 13 | import java.io.*; 14 | import java.security.SecureRandom; 15 | import java.time.LocalDateTime; 16 | import java.util.Arrays; 17 | 18 | class RandomHandler { 19 | double SCRIPT_VERSION = 1.0; 20 | 21 | private boolean showPopup = false, showSecondPopup = false; 22 | 23 | void checkLamp() { 24 | if (Inventory.contains("Lamp")) { 25 | if (!Interfaces.isOpen(134)) { 26 | Inventory.getFirst("Lamp").interact("Rub"); 27 | Time.sleepUntil(() -> Interfaces.isOpen(134), 500, 10000); 28 | } 29 | if (Interfaces.isOpen(134)) { 30 | InterfaceComponent prayer = Interfaces.getComponent(134, 9); 31 | InterfaceComponent confirm = Interfaces.getComponent(134, 26); 32 | prayer.interact("Advance Prayer"); 33 | Time.sleep(random(1000, 1500)); 34 | confirm.interact("Ok"); 35 | Time.sleepUntil(() -> !Interfaces.isOpen(134), 500, 10000); 36 | } 37 | if (Dialog.canContinue()) { 38 | Dialog.processContinue(); 39 | Time.sleep(random(200, 500)); 40 | } 41 | } 42 | } 43 | 44 | boolean findNearbyRandoms() { 45 | if (Npcs.getNearest(npc -> npc.containsAction("Dismiss")) != null) { 46 | if (!showPopup) { 47 | java.awt.EventQueue.invokeLater(() -> { 48 | JOptionPane optionPane = new JOptionPane("RANDOM EVENT DETECTED!", JOptionPane.WARNING_MESSAGE); 49 | JDialog dialog = optionPane.createDialog("Warning!"); 50 | dialog.setAlwaysOnTop(true); 51 | dialog.setVisible(true); 52 | }); 53 | showPopup = true; 54 | } 55 | Log.info("Detected random event!"); 56 | Npc event = Npcs.getNearest(npc -> npc.containsAction("Dismiss")); 57 | 58 | logChat("We have detected a random event [" + event.getName() + "] Actions: [" + Arrays.toString(event.getActions()) + "]" 59 | + " NPC Target: " + (event.getTarget() != null ? event.getTarget().getName() : "N/A") 60 | + " Message: " + (event.getOverheadText() != null ? event.getOverheadText() : "N/A")); 61 | return true; 62 | } 63 | showPopup = false; 64 | return false; 65 | } 66 | 67 | boolean doWeHaveRandom() { 68 | if (Npcs.getNearest(npc -> npc.containsAction("Dismiss") && npc.getTarget() == Players.getLocal() && npc.isPositionWalkable()) != null) { 69 | if (!showSecondPopup) { 70 | java.awt.EventQueue.invokeLater(() -> { 71 | JOptionPane optionPane = new JOptionPane("WE HAVE A RANDOM EVENT!", JOptionPane.WARNING_MESSAGE); 72 | JDialog dialog = optionPane.createDialog("Warning!!"); 73 | dialog.setAlwaysOnTop(true); 74 | dialog.setVisible(true); 75 | }); 76 | showSecondPopup = true; 77 | } 78 | return true; 79 | } 80 | showSecondPopup = false; 81 | return false; 82 | } 83 | 84 | void handleRandom() { 85 | Npc event = Npcs.getNearest(npc -> npc.containsAction("Dismiss") && npc.getTarget() == Players.getLocal()); 86 | 87 | if ((event.getName().equals("Genie") || event.getName().equals("Drunken Dwarf") || event.getName().equals("Dr Jekyll") || event.getName().equals("Rick Turpentine")) && event.isPositionWalkable()) { 88 | if (!Dialog.isOpen()) { 89 | event.interact(x -> true); 90 | Time.sleepUntil(Dialog::isOpen, 1000, 10000); 91 | } 92 | if (Dialog.canContinue()) { 93 | Dialog.processContinue(); 94 | Time.sleep(random(200, 500)); 95 | } 96 | 97 | //NEEDS TESTING 98 | } else if (event.getName().equals("Frog")) { 99 | Npc frogPrince = Npcs.getNearest(npc -> !npc.containsAction("Dismiss") && npc.getName().equals("Frog") && npc.containsAction("Talk-to")); 100 | if (!Dialog.isOpen()) { 101 | frogPrince.interact(x -> true); 102 | Time.sleepUntil(Dialog::isOpen, 1000, 10000); 103 | } 104 | if (Dialog.canContinue()) { 105 | Dialog.processContinue(); 106 | Time.sleep(random(200, 500)); 107 | } 108 | if (Dialog.isViewingChatOptions()) { 109 | Dialog.process("I suppose so, sure."); 110 | // Dialog.process(opt->opt.contains("sure")); 111 | //Dialog.process(0);//Yes? 112 | Time.sleep(random(200, 500)); 113 | } 114 | } else if (event.getName().equals("Sergeant Damien")) { 115 | Log.info("We got sergeant lets do it!"); 116 | Time.sleep(random(500, 1000)); 117 | } else { 118 | Time.sleep(random(200, 500)); 119 | event.interact("Dismiss"); 120 | Time.sleep(random(300, 500)); 121 | } 122 | 123 | } 124 | 125 | private void logChat(String text) { 126 | LocalDateTime timestamp = LocalDateTime.now(); 127 | if (!new File(Script.getDataDirectory() + "\\Koko\\Logs\\Screenshots").exists()) { 128 | new File(Script.getDataDirectory() + "\\Koko\\Logs\\Screenshots").mkdirs(); 129 | } 130 | 131 | try (FileWriter fw = new FileWriter(Script.getDataDirectory() + "\\Koko\\Logs\\Randoms.txt", true); 132 | BufferedWriter bw = new BufferedWriter(fw); 133 | PrintWriter out = new PrintWriter(bw)) { 134 | out.println(timestamp + "> " + text); 135 | } catch (IOException e) { 136 | //exception handling left as an exercise for the reader 137 | } 138 | } 139 | 140 | private int random(int min, int max) { 141 | SecureRandom random = new SecureRandom(); 142 | return (random.nextInt(max - min + 1) + min); 143 | } 144 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | These are various public + private scripts I made for RSPeer 2 | -------------------------------------------------------------------------------- /Rogues Den Solver/RandomHandler.java: -------------------------------------------------------------------------------- 1 | import org.rspeer.runetek.adapter.component.InterfaceComponent; 2 | import org.rspeer.runetek.adapter.scene.Npc; 3 | import org.rspeer.runetek.api.commons.Time; 4 | import org.rspeer.runetek.api.component.Dialog; 5 | import org.rspeer.runetek.api.component.Interfaces; 6 | import org.rspeer.runetek.api.component.tab.Inventory; 7 | import org.rspeer.runetek.api.scene.Npcs; 8 | import org.rspeer.runetek.api.scene.Players; 9 | import org.rspeer.script.Script; 10 | import org.rspeer.ui.Log; 11 | 12 | import javax.swing.*; 13 | import java.io.*; 14 | import java.security.SecureRandom; 15 | import java.time.LocalDateTime; 16 | import java.util.Arrays; 17 | 18 | class RandomHandler { 19 | double SCRIPT_VERSION = 1.0; 20 | 21 | private boolean showPopup = false, showSecondPopup = false; 22 | 23 | void checkLamp() { 24 | if (Inventory.contains("Lamp")) { 25 | if (!Interfaces.isOpen(134)) { 26 | Inventory.getFirst("Lamp").interact("Rub"); 27 | Time.sleepUntil(() -> Interfaces.isOpen(134), 500, 10000); 28 | } 29 | if (Interfaces.isOpen(134)) { 30 | InterfaceComponent prayer = Interfaces.getComponent(134, 9); 31 | InterfaceComponent confirm = Interfaces.getComponent(134, 26); 32 | prayer.interact("Advance Prayer"); 33 | Time.sleep(random(1000, 1500)); 34 | confirm.interact("Ok"); 35 | Time.sleepUntil(() -> !Interfaces.isOpen(134), 500, 10000); 36 | } 37 | if (Dialog.canContinue()) { 38 | Dialog.processContinue(); 39 | Time.sleep(random(200, 500)); 40 | } 41 | } 42 | } 43 | 44 | boolean findNearbyRandoms() { 45 | if (Npcs.getNearest(npc -> npc.containsAction("Dismiss")) != null) { 46 | if (!showPopup) { 47 | java.awt.EventQueue.invokeLater(() -> { 48 | JOptionPane optionPane = new JOptionPane("RANDOM EVENT DETECTED!", JOptionPane.WARNING_MESSAGE); 49 | JDialog dialog = optionPane.createDialog("Warning!"); 50 | dialog.setAlwaysOnTop(true); 51 | dialog.setVisible(true); 52 | }); 53 | showPopup = true; 54 | } 55 | Log.info("Detected random event!"); 56 | Npc event = Npcs.getNearest(npc -> npc.containsAction("Dismiss")); 57 | 58 | logChat("We have detected a random event [" + event.getName() + "] Actions: [" + Arrays.toString(event.getActions()) + "]" 59 | + " NPC Target: " + (event.getTarget() != null ? event.getTarget().getName() : "N/A") 60 | + " Message: " + (event.getOverheadText() != null ? event.getOverheadText() : "N/A")); 61 | return true; 62 | } 63 | showPopup = false; 64 | return false; 65 | } 66 | 67 | boolean doWeHaveRandom() { 68 | if (Npcs.getNearest(npc -> npc.containsAction("Dismiss") && npc.getTarget() == Players.getLocal() && npc.isPositionWalkable()) != null) { 69 | if (!showSecondPopup) { 70 | java.awt.EventQueue.invokeLater(() -> { 71 | JOptionPane optionPane = new JOptionPane("WE HAVE A RANDOM EVENT!", JOptionPane.WARNING_MESSAGE); 72 | JDialog dialog = optionPane.createDialog("Warning!!"); 73 | dialog.setAlwaysOnTop(true); 74 | dialog.setVisible(true); 75 | }); 76 | showSecondPopup = true; 77 | } 78 | return true; 79 | } 80 | showSecondPopup = false; 81 | return false; 82 | } 83 | 84 | void handleRandom() { 85 | Npc event = Npcs.getNearest(npc -> npc.containsAction("Dismiss") && npc.getTarget() == Players.getLocal()); 86 | 87 | if ((event.getName().equals("Genie") || event.getName().equals("Drunken Dwarf") || event.getName().equals("Dr Jekyll") || event.getName().equals("Rick Turpentine")) && event.isPositionWalkable()) { 88 | if (!Dialog.isOpen()) { 89 | event.interact(x -> true); 90 | Time.sleepUntil(Dialog::isOpen, 1000, 10000); 91 | } 92 | if (Dialog.canContinue()) { 93 | Dialog.processContinue(); 94 | Time.sleep(random(200, 500)); 95 | } 96 | 97 | //NEEDS TESTING 98 | } else if (event.getName().equals("Frog")) { 99 | Npc frogPrince = Npcs.getNearest(npc -> !npc.containsAction("Dismiss") && npc.getName().equals("Frog") && npc.containsAction("Talk-to")); 100 | if (!Dialog.isOpen()) { 101 | frogPrince.interact(x -> true); 102 | Time.sleepUntil(Dialog::isOpen, 1000, 10000); 103 | } 104 | if (Dialog.canContinue()) { 105 | Dialog.processContinue(); 106 | Time.sleep(random(200, 500)); 107 | } 108 | if (Dialog.isViewingChatOptions()) { 109 | Dialog.process("I suppose so, sure."); 110 | // Dialog.process(opt->opt.contains("sure")); 111 | //Dialog.process(0);//Yes? 112 | Time.sleep(random(200, 500)); 113 | } 114 | } else if (event.getName().equals("Sergeant Damien")) { 115 | Log.info("We got sergeant lets do it!"); 116 | Time.sleep(random(500, 1000)); 117 | } else { 118 | Time.sleep(random(200, 500)); 119 | event.interact("Dismiss"); 120 | Time.sleep(random(300, 500)); 121 | } 122 | 123 | } 124 | 125 | private void logChat(String text) { 126 | LocalDateTime timestamp = LocalDateTime.now(); 127 | if (!new File(Script.getDataDirectory() + "\\Koko\\Logs\\Screenshots").exists()) { 128 | new File(Script.getDataDirectory() + "\\Koko\\Logs\\Screenshots").mkdirs(); 129 | } 130 | 131 | try (FileWriter fw = new FileWriter(Script.getDataDirectory() + "\\Koko\\Logs\\Randoms.txt", true); 132 | BufferedWriter bw = new BufferedWriter(fw); 133 | PrintWriter out = new PrintWriter(bw)) { 134 | out.println(timestamp + "> " + text); 135 | } catch (IOException e) { 136 | //exception handling left as an exercise for the reader 137 | } 138 | } 139 | 140 | private int random(int min, int max) { 141 | SecureRandom random = new SecureRandom(); 142 | return (random.nextInt(max - min + 1) + min); 143 | } 144 | } -------------------------------------------------------------------------------- /Seers Agility/RandomHandler.java: -------------------------------------------------------------------------------- 1 | import org.rspeer.runetek.adapter.component.InterfaceComponent; 2 | import org.rspeer.runetek.adapter.scene.Npc; 3 | import org.rspeer.runetek.api.commons.Time; 4 | import org.rspeer.runetek.api.component.Dialog; 5 | import org.rspeer.runetek.api.component.Interfaces; 6 | import org.rspeer.runetek.api.component.tab.Inventory; 7 | import org.rspeer.runetek.api.scene.Npcs; 8 | import org.rspeer.runetek.api.scene.Players; 9 | import org.rspeer.script.Script; 10 | import org.rspeer.ui.Log; 11 | 12 | import javax.swing.*; 13 | import java.io.*; 14 | import java.security.SecureRandom; 15 | import java.time.LocalDateTime; 16 | import java.util.Arrays; 17 | 18 | class RandomHandler { 19 | double SCRIPT_VERSION = 1.0; 20 | 21 | private boolean showPopup = false, showSecondPopup = false; 22 | 23 | void checkLamp() { 24 | if (Inventory.contains("Lamp")) { 25 | if (!Interfaces.isOpen(134)) { 26 | Inventory.getFirst("Lamp").interact("Rub"); 27 | Time.sleepUntil(() -> Interfaces.isOpen(134), 500, 10000); 28 | } 29 | if (Interfaces.isOpen(134)) { 30 | InterfaceComponent prayer = Interfaces.getComponent(134, 9); 31 | InterfaceComponent confirm = Interfaces.getComponent(134, 26); 32 | prayer.interact("Advance Prayer"); 33 | Time.sleep(random(1000, 1500)); 34 | confirm.interact("Ok"); 35 | Time.sleepUntil(() -> !Interfaces.isOpen(134), 500, 10000); 36 | } 37 | if (Dialog.canContinue()) { 38 | Dialog.processContinue(); 39 | Time.sleep(random(200, 500)); 40 | } 41 | } 42 | } 43 | 44 | boolean findNearbyRandoms() { 45 | if (Npcs.getNearest(npc -> npc.containsAction("Dismiss")) != null) { 46 | if (!showPopup) { 47 | java.awt.EventQueue.invokeLater(() -> { 48 | JOptionPane optionPane = new JOptionPane("RANDOM EVENT DETECTED!", JOptionPane.WARNING_MESSAGE); 49 | JDialog dialog = optionPane.createDialog("Warning!"); 50 | dialog.setAlwaysOnTop(true); 51 | dialog.setVisible(true); 52 | }); 53 | showPopup = true; 54 | } 55 | Log.info("Detected random event!"); 56 | Npc event = Npcs.getNearest(npc -> npc.containsAction("Dismiss")); 57 | 58 | logChat("We have detected a random event [" + event.getName() + "] Actions: [" + Arrays.toString(event.getActions()) + "]" 59 | + " NPC Target: " + (event.getTarget() != null ? event.getTarget().getName() : "N/A") 60 | + " Message: " + (event.getOverheadText() != null ? event.getOverheadText() : "N/A")); 61 | return true; 62 | } 63 | showPopup = false; 64 | return false; 65 | } 66 | 67 | boolean doWeHaveRandom() { 68 | if (Npcs.getNearest(npc -> npc.containsAction("Dismiss") && npc.getTarget() == Players.getLocal() && npc.isPositionWalkable()) != null) { 69 | if (!showSecondPopup) { 70 | java.awt.EventQueue.invokeLater(() -> { 71 | JOptionPane optionPane = new JOptionPane("WE HAVE A RANDOM EVENT!", JOptionPane.WARNING_MESSAGE); 72 | JDialog dialog = optionPane.createDialog("Warning!!"); 73 | dialog.setAlwaysOnTop(true); 74 | dialog.setVisible(true); 75 | }); 76 | showSecondPopup = true; 77 | } 78 | return true; 79 | } 80 | showSecondPopup = false; 81 | return false; 82 | } 83 | 84 | void handleRandom() { 85 | Npc event = Npcs.getNearest(npc -> npc.containsAction("Dismiss") && npc.getTarget() == Players.getLocal()); 86 | 87 | if ((event.getName().equals("Genie") || event.getName().equals("Drunken Dwarf") || event.getName().equals("Dr Jekyll") || event.getName().equals("Rick Turpentine")) && event.isPositionWalkable()) { 88 | if (!Dialog.isOpen()) { 89 | event.interact(x -> true); 90 | Time.sleepUntil(Dialog::isOpen, 1000, 10000); 91 | } 92 | if (Dialog.canContinue()) { 93 | Dialog.processContinue(); 94 | Time.sleep(random(200, 500)); 95 | } 96 | 97 | //NEEDS TESTING 98 | } else if (event.getName().equals("Frog")) { 99 | Npc frogPrince = Npcs.getNearest(npc -> !npc.containsAction("Dismiss") && npc.getName().equals("Frog") && npc.containsAction("Talk-to")); 100 | if (!Dialog.isOpen()) { 101 | frogPrince.interact(x -> true); 102 | Time.sleepUntil(Dialog::isOpen, 1000, 10000); 103 | } 104 | if (Dialog.canContinue()) { 105 | Dialog.processContinue(); 106 | Time.sleep(random(200, 500)); 107 | } 108 | if (Dialog.isViewingChatOptions()) { 109 | Dialog.process("I suppose so, sure."); 110 | // Dialog.process(opt->opt.contains("sure")); 111 | //Dialog.process(0);//Yes? 112 | Time.sleep(random(200, 500)); 113 | } 114 | } else if (event.getName().equals("Sergeant Damien")) { 115 | Log.info("We got sergeant lets do it!"); 116 | Time.sleep(random(500, 1000)); 117 | } else { 118 | Time.sleep(random(200, 500)); 119 | event.interact("Dismiss"); 120 | Time.sleep(random(300, 500)); 121 | } 122 | 123 | } 124 | 125 | private void logChat(String text) { 126 | LocalDateTime timestamp = LocalDateTime.now(); 127 | if (!new File(Script.getDataDirectory() + "\\Koko\\Logs\\Screenshots").exists()) { 128 | new File(Script.getDataDirectory() + "\\Koko\\Logs\\Screenshots").mkdirs(); 129 | } 130 | 131 | try (FileWriter fw = new FileWriter(Script.getDataDirectory() + "\\Koko\\Logs\\Randoms.txt", true); 132 | BufferedWriter bw = new BufferedWriter(fw); 133 | PrintWriter out = new PrintWriter(bw)) { 134 | out.println(timestamp + "> " + text); 135 | } catch (IOException e) { 136 | //exception handling left as an exercise for the reader 137 | } 138 | } 139 | 140 | private int random(int min, int max) { 141 | SecureRandom random = new SecureRandom(); 142 | return (random.nextInt(max - min + 1) + min); 143 | } 144 | } -------------------------------------------------------------------------------- /Shitty Blackjack/RandomHandler.java: -------------------------------------------------------------------------------- 1 | import org.rspeer.runetek.adapter.component.InterfaceComponent; 2 | import org.rspeer.runetek.adapter.scene.Npc; 3 | import org.rspeer.runetek.api.commons.Time; 4 | import org.rspeer.runetek.api.component.Dialog; 5 | import org.rspeer.runetek.api.component.Interfaces; 6 | import org.rspeer.runetek.api.component.tab.Inventory; 7 | import org.rspeer.runetek.api.scene.Npcs; 8 | import org.rspeer.runetek.api.scene.Players; 9 | import org.rspeer.script.Script; 10 | import org.rspeer.ui.Log; 11 | 12 | import javax.swing.*; 13 | import java.io.*; 14 | import java.security.SecureRandom; 15 | import java.time.LocalDateTime; 16 | import java.util.Arrays; 17 | 18 | class RandomHandler { 19 | double SCRIPT_VERSION = 1.0; 20 | 21 | private boolean showPopup = false, showSecondPopup = false; 22 | 23 | void checkLamp() { 24 | if (Inventory.contains("Lamp")) { 25 | if (!Interfaces.isOpen(134)) { 26 | Inventory.getFirst("Lamp").interact("Rub"); 27 | Time.sleepUntil(() -> Interfaces.isOpen(134), 500, 10000); 28 | } 29 | if (Interfaces.isOpen(134)) { 30 | InterfaceComponent prayer = Interfaces.getComponent(134, 9); 31 | InterfaceComponent confirm = Interfaces.getComponent(134, 26); 32 | prayer.interact("Advance Prayer"); 33 | Time.sleep(random(1000, 1500)); 34 | confirm.interact("Ok"); 35 | Time.sleepUntil(() -> !Interfaces.isOpen(134), 500, 10000); 36 | } 37 | if (Dialog.canContinue()) { 38 | Dialog.processContinue(); 39 | Time.sleep(random(200, 500)); 40 | } 41 | } 42 | } 43 | 44 | boolean findNearbyRandoms() { 45 | if (Npcs.getNearest(npc -> npc.containsAction("Dismiss")) != null) { 46 | if (!showPopup) { 47 | java.awt.EventQueue.invokeLater(() -> { 48 | JOptionPane optionPane = new JOptionPane("RANDOM EVENT DETECTED!", JOptionPane.WARNING_MESSAGE); 49 | JDialog dialog = optionPane.createDialog("Warning!"); 50 | dialog.setAlwaysOnTop(true); 51 | dialog.setVisible(true); 52 | }); 53 | showPopup = true; 54 | } 55 | Log.info("Detected random event!"); 56 | Npc event = Npcs.getNearest(npc -> npc.containsAction("Dismiss")); 57 | 58 | logChat("We have detected a random event [" + event.getName() + "] Actions: [" + Arrays.toString(event.getActions()) + "]" 59 | + " NPC Target: " + (event.getTarget() != null ? event.getTarget().getName() : "N/A") 60 | + " Message: " + (event.getOverheadText() != null ? event.getOverheadText() : "N/A")); 61 | return true; 62 | } 63 | showPopup = false; 64 | return false; 65 | } 66 | 67 | boolean doWeHaveRandom() { 68 | if (Npcs.getNearest(npc -> npc.containsAction("Dismiss") && npc.getTarget() == Players.getLocal() && npc.isPositionWalkable()) != null) { 69 | if (!showSecondPopup) { 70 | java.awt.EventQueue.invokeLater(() -> { 71 | JOptionPane optionPane = new JOptionPane("WE HAVE A RANDOM EVENT!", JOptionPane.WARNING_MESSAGE); 72 | JDialog dialog = optionPane.createDialog("Warning!!"); 73 | dialog.setAlwaysOnTop(true); 74 | dialog.setVisible(true); 75 | }); 76 | showSecondPopup = true; 77 | } 78 | return true; 79 | } 80 | showSecondPopup = false; 81 | return false; 82 | } 83 | 84 | void handleRandom() { 85 | Npc event = Npcs.getNearest(npc -> npc.containsAction("Dismiss") && npc.getTarget() == Players.getLocal()); 86 | 87 | if ((event.getName().equals("Genie") || event.getName().equals("Drunken Dwarf") || event.getName().equals("Dr Jekyll") || event.getName().equals("Rick Turpentine")) && event.isPositionWalkable()) { 88 | if (!Dialog.isOpen()) { 89 | event.interact(x -> true); 90 | Time.sleepUntil(Dialog::isOpen, 1000, 10000); 91 | } 92 | if (Dialog.canContinue()) { 93 | Dialog.processContinue(); 94 | Time.sleep(random(200, 500)); 95 | } 96 | 97 | //NEEDS TESTING 98 | } else if (event.getName().equals("Frog")) { 99 | Npc frogPrince = Npcs.getNearest(npc -> !npc.containsAction("Dismiss") && npc.getName().equals("Frog") && npc.containsAction("Talk-to")); 100 | if (!Dialog.isOpen()) { 101 | frogPrince.interact(x -> true); 102 | Time.sleepUntil(Dialog::isOpen, 1000, 10000); 103 | } 104 | if (Dialog.canContinue()) { 105 | Dialog.processContinue(); 106 | Time.sleep(random(200, 500)); 107 | } 108 | if (Dialog.isViewingChatOptions()) { 109 | Dialog.process("I suppose so, sure."); 110 | // Dialog.process(opt->opt.contains("sure")); 111 | //Dialog.process(0);//Yes? 112 | Time.sleep(random(200, 500)); 113 | } 114 | } else if (event.getName().equals("Sergeant Damien")) { 115 | Log.info("We got sergeant lets do it!"); 116 | Time.sleep(random(500, 1000)); 117 | } else { 118 | Time.sleep(random(200, 500)); 119 | event.interact("Dismiss"); 120 | Time.sleep(random(300, 500)); 121 | } 122 | 123 | } 124 | 125 | private void logChat(String text) { 126 | LocalDateTime timestamp = LocalDateTime.now(); 127 | if (!new File(Script.getDataDirectory() + "\\Koko\\Logs\\Screenshots").exists()) { 128 | new File(Script.getDataDirectory() + "\\Koko\\Logs\\Screenshots").mkdirs(); 129 | } 130 | 131 | try (FileWriter fw = new FileWriter(Script.getDataDirectory() + "\\Koko\\Logs\\Randoms.txt", true); 132 | BufferedWriter bw = new BufferedWriter(fw); 133 | PrintWriter out = new PrintWriter(bw)) { 134 | out.println(timestamp + "> " + text); 135 | } catch (IOException e) { 136 | //exception handling left as an exercise for the reader 137 | } 138 | } 139 | 140 | private int random(int min, int max) { 141 | SecureRandom random = new SecureRandom(); 142 | return (random.nextInt(max - min + 1) + min); 143 | } 144 | } -------------------------------------------------------------------------------- /Shitty Blackjack/Steal.java: -------------------------------------------------------------------------------- 1 | import org.rspeer.runetek.adapter.scene.Npc; 2 | import org.rspeer.runetek.adapter.scene.Player; 3 | import org.rspeer.runetek.adapter.scene.SceneObject; 4 | import org.rspeer.runetek.api.commons.Time; 5 | import org.rspeer.runetek.api.component.tab.Inventory; 6 | import org.rspeer.runetek.api.component.tab.Skill; 7 | import org.rspeer.runetek.api.component.tab.Skills; 8 | import org.rspeer.runetek.api.local.Health; 9 | import org.rspeer.runetek.api.movement.position.Area; 10 | import org.rspeer.runetek.api.scene.Npcs; 11 | import org.rspeer.runetek.api.scene.Players; 12 | import org.rspeer.runetek.api.component.Dialog; 13 | import org.rspeer.runetek.api.scene.SceneObjects; 14 | import org.rspeer.runetek.event.listeners.ChatMessageListener; 15 | import org.rspeer.runetek.event.listeners.RenderListener; 16 | import org.rspeer.runetek.event.types.ChatMessageEvent; 17 | import org.rspeer.runetek.event.types.ChatMessageType; 18 | import org.rspeer.runetek.event.types.RenderEvent; 19 | import org.rspeer.script.Script; 20 | import org.rspeer.script.ScriptCategory; 21 | import org.rspeer.script.ScriptMeta; 22 | import org.rspeer.ui.Log; 23 | 24 | import javax.imageio.ImageIO; 25 | import java.awt.*; 26 | import java.awt.image.BufferedImage; 27 | import java.io.File; 28 | import java.io.IOException; 29 | import java.security.SecureRandom; 30 | import java.time.Instant; 31 | 32 | @ScriptMeta(name = "Blackjack", desc = "Uses clubbing to get thieving XP", developer = "Koko", version = 1.0, category = ScriptCategory.THIEVING) 33 | public class Steal extends Script implements RenderListener, ChatMessageListener { 34 | 35 | private int startThieveXP, startThieveLvl, knockout = 0, steal = 0, failKnockout = 0, eatPercent, stealCnt = 0; 36 | private boolean takeScreenie = false, timeToEat = false, canSteal = false, unconscious = false; 37 | private String status; 38 | private long startTime; 39 | private RandomHandler randomEvent = new RandomHandler(); 40 | private Area room = Area.rectangular(3363, 3003, 3365, 3000); 41 | 42 | @Override 43 | public void onStart() { 44 | //Prefetch combat stats + exp 45 | //Get exp to handle overload potions increasing strength display 46 | startTime = System.currentTimeMillis(); 47 | startThieveXP = Skills.getExperience(Skill.THIEVING); 48 | startThieveLvl = Skills.getLevelAt(startThieveXP); 49 | status = "Loading up!"; 50 | eatPercent = random(40, 60); 51 | } 52 | 53 | @Override 54 | public int loop() { 55 | Player Local = Players.getLocal(); 56 | randomEvent.checkLamp(); 57 | randomEvent.findNearbyRandoms(); 58 | if (randomEvent.doWeHaveRandom()) { 59 | takeScreenie = true; 60 | randomEvent.handleRandom(); 61 | } else if (!timeToEat) { 62 | status = "Looking for trouble"; 63 | if (Inventory.getFirst("Coin pouch") != null) { 64 | //Log.info("We have " + Inventory.getCount(true, "Coin pouch") + " pouches!"); 65 | if (Inventory.getCount(true, "Coin pouch") == 28) { 66 | Inventory.getFirst("Coin pouch").interact(x -> true); 67 | Time.sleepUntil(() -> Inventory.getFirst("Coin pouch") == null, 1250, 10000); 68 | } 69 | } 70 | 71 | Npc bandit = Npcs.getNearest(id -> id.getId() == 735 && room.contains(id)); 72 | if (bandit != null) { 73 | if (Local.getAnimation() == 403) { 74 | status = "Stunned"; 75 | if (Inventory.getFirst("Coin pouch") != null) { 76 | //Log.info("We have " + Inventory.getCount(true, "Coin pouch") + " pouches!"); 77 | if (Inventory.getCount(true, "Coin pouch") > random(0, 2)) { 78 | Inventory.getFirst("Coin pouch").interact(x -> true); 79 | Time.sleepUntil(() -> Inventory.getFirst("Coin pouch") == null, 1250, 10000); 80 | } 81 | } 82 | Time.sleep(random(4000, 5000)); 83 | } 84 | if (bandit.getAnimation() == 838 || (bandit.getOverheadText() != null && bandit.getOverheadText().contains("zzz"))) { 85 | status = "LOOT"; 86 | 87 | if (room.contains(Local) && SceneObjects.getNearest("Curtain").containsAction("Close")) { 88 | SceneObjects.getNearest("Curtain").interact("Close"); 89 | Time.sleepUntil(() -> SceneObjects.getNearest("Curtain").containsAction("Open"), 300, 5000); 90 | Time.sleep(250, 500); 91 | } 92 | 93 | if (Health.getPercent() < eatPercent) { 94 | status = "Time to eat!"; 95 | timeToEat = true; 96 | return random(3000, 4000); 97 | } 98 | if (canSteal) { 99 | bandit.interact("Pickpocket"); 100 | } 101 | } 102 | if (bandit.getAnimation() == -1 || bandit.getAnimation() == 395 || (bandit.getOverheadText() != null && !bandit.getOverheadText().contains("zzz"))) { 103 | status = "Knocking dis bitch out"; 104 | if (unconscious) { 105 | unconscious = false; 106 | return random(1000, 2000); 107 | } 108 | bandit.interact("Knock-Out"); 109 | Time.sleep(200, 300); 110 | } 111 | } 112 | } else { 113 | if (Inventory.contains(item -> item.containsAction("Drink"))) { 114 | int eat = random(2, 5); 115 | eatPercent = random(40, 60); 116 | for (int i = 0; i < eat; i++) { 117 | if (Inventory.contains(item -> item.containsAction("Drink"))) { 118 | Inventory.getFirst(item -> item.containsAction("Drink")).interact("Drink"); 119 | Time.sleepUntil(Local::isAnimating, 1250, 10000); 120 | Time.sleep(random(350, 475)); 121 | } else 122 | break; 123 | } 124 | for (int i = 0; i < 10; i++) { 125 | if (Inventory.contains("Jug")) { 126 | Inventory.getFirst("Jug").interact("Drop"); 127 | Time.sleep(random(300, 500)); 128 | } else 129 | break; 130 | } 131 | 132 | timeToEat = false; 133 | } else { 134 | status = "Getting more food!"; 135 | SceneObject curtain = SceneObjects.getNearest("Curtain"); 136 | if (curtain != null && curtain.containsAction("Open")) { 137 | curtain.interact("Open"); 138 | Time.sleepUntil(() -> curtain.containsAction("Close"), 300, 5000); 139 | Time.sleep(250, 500); 140 | } 141 | 142 | Npc bankNoter = Npcs.getNearest(1615); 143 | if (bankNoter != null) { 144 | if (Inventory.contains(1994)) { 145 | if (!Inventory.isItemSelected() && !Dialog.isViewingChatOptions()) { 146 | Inventory.getFirst(1994).interact("Use"); 147 | Time.sleep(random(300, 700)); 148 | } 149 | if (Inventory.isItemSelected() && !Dialog.isViewingChatOptions()) { 150 | bankNoter.interact("Use"); 151 | Time.sleepUntil(Dialog::isViewingChatOptions, 1250, 5000); 152 | } 153 | 154 | if (Dialog.isViewingChatOptions()) { 155 | if (Inventory.getFirst(1994).getStackSize() <= 5) //Exchange 5 156 | Dialog.process(1); 157 | else //exchange All 158 | Dialog.process(2); 159 | Time.sleepUntil(() -> Inventory.isFull() || Inventory.contains(333), 1250, 5000); 160 | Time.sleep(random(200, 500)); 161 | } 162 | } else { 163 | Log.info("Ran out of food!"); 164 | setStopping(true); 165 | } 166 | } 167 | } 168 | } 169 | return random(200, 300); 170 | } 171 | 172 | @Override 173 | public void notify(RenderEvent renderEvent) { 174 | int nextLvlXp = Skills.getExperienceToNextLevel(Skill.THIEVING); 175 | int gainedXp = Skills.getExperience(Skill.THIEVING) - startThieveXP; 176 | double ttl = (nextLvlXp / (getPerHour(gainedXp) / 60.0 / 60.0 / 1000.0)); 177 | if (nextLvlXp == 0) { 178 | ttl = 0; 179 | } 180 | Graphics g = renderEvent.getSource(); 181 | Graphics2D g2 = (Graphics2D) g; 182 | g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 183 | g2.setColor(new Color(0, 0, 0, 128)); 184 | g2.fillRect(20, 235, 180, 95); 185 | g2.setColor(Color.WHITE); 186 | g2.drawRect(20, 235, 180, 95); 187 | 188 | if (takeScreenie) { 189 | TakeScreenshot(renderEvent.getProvider().getImage()); 190 | takeScreenie = false; 191 | } 192 | 193 | int x = 25; 194 | int y = 250; 195 | double thieveRate = ((double) steal / (double) (steal + failKnockout)) * 100; 196 | String lvlsGained = (Skills.getLevelAt(Skills.getExperience(Skill.THIEVING)) - startThieveLvl) > 0 ? " (+" + (Skills.getLevelAt(Skills.getExperience(Skill.THIEVING)) - startThieveLvl) + ")" : ""; 197 | g2.drawString("Thieve lvl: " + Skills.getLevelAt(Skills.getExperience(Skill.THIEVING)) + lvlsGained + " (TTL: " + formatTime(Double.valueOf(ttl).longValue()) + ")", x, y); 198 | g2.drawString("XP Gained: " + gainedXp + " [" + String.format("%.2f", getPerHour(gainedXp)) + "/hr]", x, y += 15); 199 | g2.drawString("Gold Stolen: " + (steal * 50) + " @ (" + String.format("%.02f", thieveRate) + "%) [" + Math.ceil(getPerHour(steal * 50)) + "/hr]", x, y += 15); 200 | g2.drawString("Stunned: " + failKnockout + ". Knockouts: " + (knockout), x, y += 15); 201 | g2.drawString("Time Ran: " + formatTime(System.currentTimeMillis() - startTime), x, y += 15); 202 | g2.drawString("Status: " + status, x, y += 15); 203 | 204 | //Hide username 205 | if (Players.getLocal() != null) { 206 | Color tanColor = new Color(204, 187, 154); 207 | g2.setColor(tanColor); 208 | g2.fillRect(9, 459, 91, 15); 209 | } 210 | } 211 | 212 | @Override 213 | public void notify(ChatMessageEvent event) { 214 | String m = event.getMessage().toLowerCase(); 215 | if (event.getType().equals(ChatMessageType.FILTERED)) { 216 | if ((m.contains("you smack the bandit") && (m.endsWith("unconscious.")))) { 217 | knockout++; 218 | canSteal = true; 219 | } 220 | if ((m.contains("you pick the") && (m.endsWith("pocket.")))) { 221 | steal++; 222 | } 223 | if ((m.contains("your blow only glances off") && (m.endsWith("head.")))) { 224 | failKnockout++; 225 | } 226 | if (m.contains("you fail to pick")) { 227 | failKnockout++; 228 | } 229 | 230 | if ((m.contains("they're") && (m.endsWith("unconscious.")))) { 231 | unconscious = true; 232 | } 233 | } 234 | } 235 | 236 | @Override 237 | public void onStop() { 238 | int lvls = (Skills.getLevelAt(Skills.getExperience(Skill.THIEVING)) - startThieveLvl); 239 | Log.info("Hope you had fun stealing! Gained " + (Skills.getExperience(Skill.THIEVING) - startThieveXP) + " thieving XP (+" + (lvls > 0 ? lvls : "0") + " levels)."); 240 | } 241 | 242 | private int random(int min, int max) { 243 | SecureRandom random = new SecureRandom(); 244 | return (random.nextInt(max - min + 1) + min); 245 | } 246 | 247 | private void TakeScreenshot(Image img) { 248 | Log.info("Attempting to take a screenshot"); 249 | BufferedImage buffered = (BufferedImage) img; 250 | 251 | //Get the current date to save in the screenshot folder 252 | long now = Instant.now().getEpochSecond(); 253 | 254 | try { 255 | //Create a folder with my forum name to tell the user which script created this folder 256 | if (!new File(getDataDirectory() + "\\Koko\\NMZ\\Screenshots").exists()) { 257 | new File(getDataDirectory() + "\\Koko\\NMZ\\Screenshots").mkdirs(); 258 | } 259 | //save the image to the folder and rename all player spaces with underscores 260 | try { 261 | if (ImageIO.write( 262 | buffered, 263 | "png", 264 | new File(getDataDirectory() + "\\Koko\\NMZ\\Screenshots\\" + now + "-" + Players.getLocal().getName().replaceAll("\\u00a0", "_") + ".png"))) { 265 | Log.info("Saved " + getDataDirectory() + "\\Koko\\NMZ\\Screenshots\\" + now + "-" + Players.getLocal().getName().replaceAll("\\u00a0", "_") + ".png"); 266 | } 267 | } catch (IOException e) { 268 | Log.info("Error! " + e.getMessage()); 269 | } 270 | } catch (Exception e) { 271 | Log.info("Error! " + e.getMessage()); 272 | } 273 | } 274 | 275 | private String formatTime(final long ms) { 276 | long s = ms / 1000, m = s / 60, h = m / 60; 277 | s %= 60; 278 | m %= 60; 279 | h %= 24; 280 | return String.format("%02d:%02d:%02d", h, m, s); 281 | } 282 | 283 | private double getPerHour(double value) { 284 | if ((System.currentTimeMillis() - startTime) > 0) { 285 | return value * 3600000d / (System.currentTimeMillis() - startTime); 286 | } else { 287 | return 0; 288 | } 289 | } 290 | } -------------------------------------------------------------------------------- /Shitty Motherload/RandomHandler.java: -------------------------------------------------------------------------------- 1 | import org.rspeer.runetek.adapter.component.InterfaceComponent; 2 | import org.rspeer.runetek.adapter.scene.Npc; 3 | import org.rspeer.runetek.api.commons.Time; 4 | import org.rspeer.runetek.api.component.Dialog; 5 | import org.rspeer.runetek.api.component.Interfaces; 6 | import org.rspeer.runetek.api.component.tab.Inventory; 7 | import org.rspeer.runetek.api.scene.Npcs; 8 | import org.rspeer.runetek.api.scene.Players; 9 | import org.rspeer.script.Script; 10 | import org.rspeer.ui.Log; 11 | 12 | import javax.swing.*; 13 | import java.io.*; 14 | import java.security.SecureRandom; 15 | import java.time.LocalDateTime; 16 | import java.util.Arrays; 17 | 18 | class RandomHandler { 19 | double SCRIPT_VERSION = 1.0; 20 | 21 | private boolean showPopup = false, showSecondPopup = false; 22 | 23 | void checkLamp() { 24 | if (Inventory.contains("Lamp")) { 25 | if (!Interfaces.isOpen(134)) { 26 | Inventory.getFirst("Lamp").interact("Rub"); 27 | Time.sleepUntil(() -> Interfaces.isOpen(134), 500, 10000); 28 | } 29 | if (Interfaces.isOpen(134)) { 30 | InterfaceComponent prayer = Interfaces.getComponent(134, 9); 31 | InterfaceComponent confirm = Interfaces.getComponent(134, 26); 32 | prayer.interact("Advance Prayer"); 33 | Time.sleep(random(1000, 1500)); 34 | confirm.interact("Ok"); 35 | Time.sleepUntil(() -> !Interfaces.isOpen(134), 500, 10000); 36 | } 37 | if (Dialog.canContinue()) { 38 | Dialog.processContinue(); 39 | Time.sleep(random(200, 500)); 40 | } 41 | } 42 | } 43 | 44 | boolean findNearbyRandoms() { 45 | if (Npcs.getNearest(npc -> npc.containsAction("Dismiss")) != null) { 46 | if (!showPopup) { 47 | java.awt.EventQueue.invokeLater(() -> { 48 | JOptionPane optionPane = new JOptionPane("RANDOM EVENT DETECTED!", JOptionPane.WARNING_MESSAGE); 49 | JDialog dialog = optionPane.createDialog("Warning!"); 50 | dialog.setAlwaysOnTop(true); 51 | dialog.setVisible(true); 52 | }); 53 | showPopup = true; 54 | } 55 | Log.info("Detected random event!"); 56 | Npc event = Npcs.getNearest(npc -> npc.containsAction("Dismiss")); 57 | 58 | logChat("We have detected a random event [" + event.getName() + "] Actions: [" + Arrays.toString(event.getActions()) + "]" 59 | + " NPC Target: " + (event.getTarget() != null ? event.getTarget().getName() : "N/A") 60 | + " Message: " + (event.getOverheadText() != null ? event.getOverheadText() : "N/A")); 61 | return true; 62 | } 63 | showPopup = false; 64 | return false; 65 | } 66 | 67 | boolean doWeHaveRandom() { 68 | if (Npcs.getNearest(npc -> npc.containsAction("Dismiss") && npc.getTarget() == Players.getLocal() && npc.isPositionWalkable()) != null) { 69 | if (!showSecondPopup) { 70 | java.awt.EventQueue.invokeLater(() -> { 71 | JOptionPane optionPane = new JOptionPane("WE HAVE A RANDOM EVENT!", JOptionPane.WARNING_MESSAGE); 72 | JDialog dialog = optionPane.createDialog("Warning!!"); 73 | dialog.setAlwaysOnTop(true); 74 | dialog.setVisible(true); 75 | }); 76 | showSecondPopup = true; 77 | } 78 | return true; 79 | } 80 | showSecondPopup = false; 81 | return false; 82 | } 83 | 84 | void handleRandom() { 85 | Npc event = Npcs.getNearest(npc -> npc.containsAction("Dismiss") && npc.getTarget() == Players.getLocal()); 86 | 87 | if ((event.getName().equals("Genie") || event.getName().equals("Drunken Dwarf") || event.getName().equals("Dr Jekyll") || event.getName().equals("Rick Turpentine")) && event.isPositionWalkable()) { 88 | if (!Dialog.isOpen()) { 89 | event.interact(x -> true); 90 | Time.sleepUntil(Dialog::isOpen, 1000, 10000); 91 | } 92 | if (Dialog.canContinue()) { 93 | Dialog.processContinue(); 94 | Time.sleep(random(200, 500)); 95 | } 96 | 97 | //NEEDS TESTING 98 | } else if (event.getName().equals("Frog")) { 99 | Npc frogPrince = Npcs.getNearest(npc -> !npc.containsAction("Dismiss") && npc.getName().equals("Frog") && npc.containsAction("Talk-to")); 100 | if (!Dialog.isOpen()) { 101 | frogPrince.interact(x -> true); 102 | Time.sleepUntil(Dialog::isOpen, 1000, 10000); 103 | } 104 | if (Dialog.canContinue()) { 105 | Dialog.processContinue(); 106 | Time.sleep(random(200, 500)); 107 | } 108 | if (Dialog.isViewingChatOptions()) { 109 | Dialog.process("I suppose so, sure."); 110 | // Dialog.process(opt->opt.contains("sure")); 111 | //Dialog.process(0);//Yes? 112 | Time.sleep(random(200, 500)); 113 | } 114 | } else if (event.getName().equals("Sergeant Damien")) { 115 | Log.info("We got sergeant lets do it!"); 116 | Time.sleep(random(500, 1000)); 117 | } else { 118 | Time.sleep(random(200, 500)); 119 | event.interact("Dismiss"); 120 | Time.sleep(random(300, 500)); 121 | } 122 | 123 | } 124 | 125 | private void logChat(String text) { 126 | LocalDateTime timestamp = LocalDateTime.now(); 127 | if (!new File(Script.getDataDirectory() + "\\Koko\\Logs\\Screenshots").exists()) { 128 | new File(Script.getDataDirectory() + "\\Koko\\Logs\\Screenshots").mkdirs(); 129 | } 130 | 131 | try (FileWriter fw = new FileWriter(Script.getDataDirectory() + "\\Koko\\Logs\\Randoms.txt", true); 132 | BufferedWriter bw = new BufferedWriter(fw); 133 | PrintWriter out = new PrintWriter(bw)) { 134 | out.println(timestamp + "> " + text); 135 | } catch (IOException e) { 136 | //exception handling left as an exercise for the reader 137 | } 138 | } 139 | 140 | private int random(int min, int max) { 141 | SecureRandom random = new SecureRandom(); 142 | return (random.nextInt(max - min + 1) + min); 143 | } 144 | } -------------------------------------------------------------------------------- /Slamandr Catcher/RandomHandler.java: -------------------------------------------------------------------------------- 1 | import org.rspeer.runetek.adapter.component.InterfaceComponent; 2 | import org.rspeer.runetek.adapter.scene.Npc; 3 | import org.rspeer.runetek.api.commons.Time; 4 | import org.rspeer.runetek.api.component.Dialog; 5 | import org.rspeer.runetek.api.component.Interfaces; 6 | import org.rspeer.runetek.api.component.tab.Inventory; 7 | import org.rspeer.runetek.api.scene.Npcs; 8 | import org.rspeer.runetek.api.scene.Players; 9 | import org.rspeer.script.Script; 10 | import org.rspeer.ui.Log; 11 | 12 | import javax.swing.*; 13 | import java.io.*; 14 | import java.security.SecureRandom; 15 | import java.time.LocalDateTime; 16 | import java.util.Arrays; 17 | 18 | class RandomHandler { 19 | double SCRIPT_VERSION = 1.0; 20 | 21 | private boolean showPopup = false, showSecondPopup = false; 22 | 23 | void checkLamp() { 24 | if (Inventory.contains("Lamp")) { 25 | if (!Interfaces.isOpen(134)) { 26 | Inventory.getFirst("Lamp").interact("Rub"); 27 | Time.sleepUntil(() -> Interfaces.isOpen(134), 500, 10000); 28 | } 29 | if (Interfaces.isOpen(134)) { 30 | InterfaceComponent prayer = Interfaces.getComponent(134, 9); 31 | InterfaceComponent confirm = Interfaces.getComponent(134, 26); 32 | prayer.interact("Advance Prayer"); 33 | Time.sleep(random(1000, 1500)); 34 | confirm.interact("Ok"); 35 | Time.sleepUntil(() -> !Interfaces.isOpen(134), 500, 10000); 36 | } 37 | if (Dialog.canContinue()) { 38 | Dialog.processContinue(); 39 | Time.sleep(random(200, 500)); 40 | } 41 | } 42 | } 43 | 44 | boolean findNearbyRandoms() { 45 | if (Npcs.getNearest(npc -> npc.containsAction("Dismiss")) != null) { 46 | if (!showPopup) { 47 | java.awt.EventQueue.invokeLater(() -> { 48 | JOptionPane optionPane = new JOptionPane("RANDOM EVENT DETECTED!", JOptionPane.WARNING_MESSAGE); 49 | JDialog dialog = optionPane.createDialog("Warning!"); 50 | dialog.setAlwaysOnTop(true); 51 | dialog.setVisible(true); 52 | }); 53 | showPopup = true; 54 | } 55 | Log.info("Detected random event!"); 56 | Npc event = Npcs.getNearest(npc -> npc.containsAction("Dismiss")); 57 | 58 | logChat("We have detected a random event [" + event.getName() + "] Actions: [" + Arrays.toString(event.getActions()) + "]" 59 | + " NPC Target: " + (event.getTarget() != null ? event.getTarget().getName() : "N/A") 60 | + " Message: " + (event.getOverheadText() != null ? event.getOverheadText() : "N/A")); 61 | return true; 62 | } 63 | showPopup = false; 64 | return false; 65 | } 66 | 67 | boolean doWeHaveRandom() { 68 | if (Npcs.getNearest(npc -> npc.containsAction("Dismiss") && npc.getTarget() == Players.getLocal() && npc.isPositionWalkable()) != null) { 69 | if (!showSecondPopup) { 70 | java.awt.EventQueue.invokeLater(() -> { 71 | JOptionPane optionPane = new JOptionPane("WE HAVE A RANDOM EVENT!", JOptionPane.WARNING_MESSAGE); 72 | JDialog dialog = optionPane.createDialog("Warning!!"); 73 | dialog.setAlwaysOnTop(true); 74 | dialog.setVisible(true); 75 | }); 76 | showSecondPopup = true; 77 | } 78 | return true; 79 | } 80 | showSecondPopup = false; 81 | return false; 82 | } 83 | 84 | void handleRandom() { 85 | Npc event = Npcs.getNearest(npc -> npc.containsAction("Dismiss") && npc.getTarget() == Players.getLocal()); 86 | 87 | if ((event.getName().equals("Genie") || event.getName().equals("Drunken Dwarf") || event.getName().equals("Dr Jekyll") || event.getName().equals("Rick Turpentine")) && event.isPositionWalkable()) { 88 | if (!Dialog.isOpen()) { 89 | event.interact(x -> true); 90 | Time.sleepUntil(Dialog::isOpen, 1000, 10000); 91 | } 92 | if (Dialog.canContinue()) { 93 | Dialog.processContinue(); 94 | Time.sleep(random(200, 500)); 95 | } 96 | 97 | //NEEDS TESTING 98 | } else if (event.getName().equals("Frog")) { 99 | Npc frogPrince = Npcs.getNearest(npc -> !npc.containsAction("Dismiss") && npc.getName().equals("Frog") && npc.containsAction("Talk-to")); 100 | if (!Dialog.isOpen()) { 101 | frogPrince.interact(x -> true); 102 | Time.sleepUntil(Dialog::isOpen, 1000, 10000); 103 | } 104 | if (Dialog.canContinue()) { 105 | Dialog.processContinue(); 106 | Time.sleep(random(200, 500)); 107 | } 108 | if (Dialog.isViewingChatOptions()) { 109 | Dialog.process("I suppose so, sure."); 110 | // Dialog.process(opt->opt.contains("sure")); 111 | //Dialog.process(0);//Yes? 112 | Time.sleep(random(200, 500)); 113 | } 114 | } else if (event.getName().equals("Sergeant Damien")) { 115 | Log.info("We got sergeant lets do it!"); 116 | Time.sleep(random(500, 1000)); 117 | } else { 118 | Time.sleep(random(200, 500)); 119 | event.interact("Dismiss"); 120 | Time.sleep(random(300, 500)); 121 | } 122 | 123 | } 124 | 125 | private void logChat(String text) { 126 | LocalDateTime timestamp = LocalDateTime.now(); 127 | if (!new File(Script.getDataDirectory() + "\\Koko\\Logs\\Screenshots").exists()) { 128 | new File(Script.getDataDirectory() + "\\Koko\\Logs\\Screenshots").mkdirs(); 129 | } 130 | 131 | try (FileWriter fw = new FileWriter(Script.getDataDirectory() + "\\Koko\\Logs\\Randoms.txt", true); 132 | BufferedWriter bw = new BufferedWriter(fw); 133 | PrintWriter out = new PrintWriter(bw)) { 134 | out.println(timestamp + "> " + text); 135 | } catch (IOException e) { 136 | //exception handling left as an exercise for the reader 137 | } 138 | } 139 | 140 | private int random(int min, int max) { 141 | SecureRandom random = new SecureRandom(); 142 | return (random.nextInt(max - min + 1) + min); 143 | } 144 | } -------------------------------------------------------------------------------- /Tabby/RandomHandler.java: -------------------------------------------------------------------------------- 1 | import org.rspeer.runetek.adapter.component.InterfaceComponent; 2 | import org.rspeer.runetek.adapter.scene.Npc; 3 | import org.rspeer.runetek.api.commons.Time; 4 | import org.rspeer.runetek.api.component.Dialog; 5 | import org.rspeer.runetek.api.component.Interfaces; 6 | import org.rspeer.runetek.api.component.tab.Inventory; 7 | import org.rspeer.runetek.api.scene.Npcs; 8 | import org.rspeer.runetek.api.scene.Players; 9 | import org.rspeer.script.Script; 10 | import org.rspeer.ui.Log; 11 | 12 | import javax.swing.*; 13 | import java.io.*; 14 | import java.security.SecureRandom; 15 | import java.time.LocalDateTime; 16 | import java.util.Arrays; 17 | 18 | class RandomHandler { 19 | double SCRIPT_VERSION = 1.0; 20 | 21 | private boolean showPopup = false, showSecondPopup = false; 22 | 23 | void checkLamp() { 24 | if (Inventory.contains("Lamp")) { 25 | if (!Interfaces.isOpen(134)) { 26 | Inventory.getFirst("Lamp").interact("Rub"); 27 | Time.sleepUntil(() -> Interfaces.isOpen(134), 500, 10000); 28 | } 29 | if (Interfaces.isOpen(134)) { 30 | InterfaceComponent prayer = Interfaces.getComponent(134, 9); 31 | InterfaceComponent confirm = Interfaces.getComponent(134, 26); 32 | prayer.interact("Advance Prayer"); 33 | Time.sleep(random(1000, 1500)); 34 | confirm.interact("Ok"); 35 | Time.sleepUntil(() -> !Interfaces.isOpen(134), 500, 10000); 36 | } 37 | if (Dialog.canContinue()) { 38 | Dialog.processContinue(); 39 | Time.sleep(random(200, 500)); 40 | } 41 | } 42 | } 43 | 44 | boolean findNearbyRandoms() { 45 | if (Npcs.getNearest(npc -> npc.containsAction("Dismiss")) != null) { 46 | if (!showPopup) { 47 | java.awt.EventQueue.invokeLater(() -> { 48 | JOptionPane optionPane = new JOptionPane("RANDOM EVENT DETECTED!", JOptionPane.WARNING_MESSAGE); 49 | JDialog dialog = optionPane.createDialog("Warning!"); 50 | dialog.setAlwaysOnTop(true); 51 | dialog.setVisible(true); 52 | }); 53 | showPopup = true; 54 | } 55 | Log.info("Detected random event!"); 56 | Npc event = Npcs.getNearest(npc -> npc.containsAction("Dismiss")); 57 | 58 | logChat("We have detected a random event [" + event.getName() + "] Actions: [" + Arrays.toString(event.getActions()) + "]" 59 | + " NPC Target: " + (event.getTarget() != null ? event.getTarget().getName() : "N/A") 60 | + " Message: " + (event.getOverheadText() != null ? event.getOverheadText() : "N/A")); 61 | return true; 62 | } 63 | showPopup = false; 64 | return false; 65 | } 66 | 67 | boolean doWeHaveRandom() { 68 | if (Npcs.getNearest(npc -> npc.containsAction("Dismiss") && npc.getTarget() == Players.getLocal() && npc.isPositionWalkable()) != null) { 69 | if (!showSecondPopup) { 70 | java.awt.EventQueue.invokeLater(() -> { 71 | JOptionPane optionPane = new JOptionPane("WE HAVE A RANDOM EVENT!", JOptionPane.WARNING_MESSAGE); 72 | JDialog dialog = optionPane.createDialog("Warning!!"); 73 | dialog.setAlwaysOnTop(true); 74 | dialog.setVisible(true); 75 | }); 76 | showSecondPopup = true; 77 | } 78 | return true; 79 | } 80 | showSecondPopup = false; 81 | return false; 82 | } 83 | 84 | void handleRandom() { 85 | Npc event = Npcs.getNearest(npc -> npc.containsAction("Dismiss") && npc.getTarget() == Players.getLocal()); 86 | 87 | if ((event.getName().equals("Genie") || event.getName().equals("Drunken Dwarf") || event.getName().equals("Dr Jekyll") || event.getName().equals("Rick Turpentine")) && event.isPositionWalkable()) { 88 | if (!Dialog.isOpen()) { 89 | event.interact(x -> true); 90 | Time.sleepUntil(Dialog::isOpen, 1000, 10000); 91 | } 92 | if (Dialog.canContinue()) { 93 | Dialog.processContinue(); 94 | Time.sleep(random(200, 500)); 95 | } 96 | 97 | //NEEDS TESTING 98 | } else if (event.getName().equals("Frog")) { 99 | Npc frogPrince = Npcs.getNearest(npc -> !npc.containsAction("Dismiss") && npc.getName().equals("Frog") && npc.containsAction("Talk-to")); 100 | if (!Dialog.isOpen()) { 101 | frogPrince.interact(x -> true); 102 | Time.sleepUntil(Dialog::isOpen, 1000, 10000); 103 | } 104 | if (Dialog.canContinue()) { 105 | Dialog.processContinue(); 106 | Time.sleep(random(200, 500)); 107 | } 108 | if (Dialog.isViewingChatOptions()) { 109 | Dialog.process("I suppose so, sure."); 110 | // Dialog.process(opt->opt.contains("sure")); 111 | //Dialog.process(0);//Yes? 112 | Time.sleep(random(200, 500)); 113 | } 114 | } else if (event.getName().equals("Sergeant Damien")) { 115 | Log.info("We got sergeant lets do it!"); 116 | Time.sleep(random(500, 1000)); 117 | } else { 118 | Time.sleep(random(200, 500)); 119 | event.interact("Dismiss"); 120 | Time.sleep(random(300, 500)); 121 | } 122 | 123 | } 124 | 125 | private void logChat(String text) { 126 | LocalDateTime timestamp = LocalDateTime.now(); 127 | if (!new File(Script.getDataDirectory() + "\\Koko\\Logs\\Screenshots").exists()) { 128 | new File(Script.getDataDirectory() + "\\Koko\\Logs\\Screenshots").mkdirs(); 129 | } 130 | 131 | try (FileWriter fw = new FileWriter(Script.getDataDirectory() + "\\Koko\\Logs\\Randoms.txt", true); 132 | BufferedWriter bw = new BufferedWriter(fw); 133 | PrintWriter out = new PrintWriter(bw)) { 134 | out.println(timestamp + "> " + text); 135 | } catch (IOException e) { 136 | //exception handling left as an exercise for the reader 137 | } 138 | } 139 | 140 | private int random(int min, int max) { 141 | SecureRandom random = new SecureRandom(); 142 | return (random.nextInt(max - min + 1) + min); 143 | } 144 | } -------------------------------------------------------------------------------- /Veteran Void/RandomHandler.java: -------------------------------------------------------------------------------- 1 | import org.rspeer.runetek.adapter.component.InterfaceComponent; 2 | import org.rspeer.runetek.adapter.scene.Npc; 3 | import org.rspeer.runetek.api.commons.Time; 4 | import org.rspeer.runetek.api.component.Dialog; 5 | import org.rspeer.runetek.api.component.Interfaces; 6 | import org.rspeer.runetek.api.component.tab.Inventory; 7 | import org.rspeer.runetek.api.scene.Npcs; 8 | import org.rspeer.runetek.api.scene.Players; 9 | import org.rspeer.script.Script; 10 | import org.rspeer.ui.Log; 11 | 12 | import javax.swing.*; 13 | import java.io.*; 14 | import java.security.SecureRandom; 15 | import java.time.LocalDateTime; 16 | import java.util.Arrays; 17 | 18 | class RandomHandler { 19 | double SCRIPT_VERSION = 1.0; 20 | 21 | private boolean showPopup = false, showSecondPopup = false; 22 | 23 | void checkLamp() { 24 | if (Inventory.contains("Lamp")) { 25 | if (!Interfaces.isOpen(134)) { 26 | Inventory.getFirst("Lamp").interact("Rub"); 27 | Time.sleepUntil(() -> Interfaces.isOpen(134), 500, 10000); 28 | } 29 | if (Interfaces.isOpen(134)) { 30 | InterfaceComponent prayer = Interfaces.getComponent(134, 9); 31 | InterfaceComponent confirm = Interfaces.getComponent(134, 26); 32 | prayer.interact("Advance Prayer"); 33 | Time.sleep(random(1000, 1500)); 34 | confirm.interact("Ok"); 35 | Time.sleepUntil(() -> !Interfaces.isOpen(134), 500, 10000); 36 | } 37 | if (Dialog.canContinue()) { 38 | Dialog.processContinue(); 39 | Time.sleep(random(200, 500)); 40 | } 41 | } 42 | } 43 | 44 | boolean findNearbyRandoms() { 45 | if (Npcs.getNearest(npc -> npc.containsAction("Dismiss")) != null) { 46 | if (!showPopup) { 47 | java.awt.EventQueue.invokeLater(() -> { 48 | JOptionPane optionPane = new JOptionPane("RANDOM EVENT DETECTED!", JOptionPane.WARNING_MESSAGE); 49 | JDialog dialog = optionPane.createDialog("Warning!"); 50 | dialog.setAlwaysOnTop(true); 51 | dialog.setVisible(true); 52 | }); 53 | showPopup = true; 54 | } 55 | Log.info("Detected random event!"); 56 | Npc event = Npcs.getNearest(npc -> npc.containsAction("Dismiss")); 57 | 58 | logChat("We have detected a random event [" + event.getName() + "] Actions: [" + Arrays.toString(event.getActions()) + "]" 59 | + " NPC Target: " + (event.getTarget() != null ? event.getTarget().getName() : "N/A") 60 | + " Message: " + (event.getOverheadText() != null ? event.getOverheadText() : "N/A")); 61 | return true; 62 | } 63 | showPopup = false; 64 | return false; 65 | } 66 | 67 | boolean doWeHaveRandom() { 68 | if (Npcs.getNearest(npc -> npc.containsAction("Dismiss") && npc.getTarget() == Players.getLocal() && npc.isPositionWalkable()) != null) { 69 | if (!showSecondPopup) { 70 | java.awt.EventQueue.invokeLater(() -> { 71 | JOptionPane optionPane = new JOptionPane("WE HAVE A RANDOM EVENT!", JOptionPane.WARNING_MESSAGE); 72 | JDialog dialog = optionPane.createDialog("Warning!!"); 73 | dialog.setAlwaysOnTop(true); 74 | dialog.setVisible(true); 75 | }); 76 | showSecondPopup = true; 77 | } 78 | return true; 79 | } 80 | showSecondPopup = false; 81 | return false; 82 | } 83 | 84 | void handleRandom() { 85 | Npc event = Npcs.getNearest(npc -> npc.containsAction("Dismiss") && npc.getTarget() == Players.getLocal()); 86 | 87 | if ((event.getName().equals("Genie") || event.getName().equals("Drunken Dwarf") || event.getName().equals("Dr Jekyll") || event.getName().equals("Rick Turpentine")) && event.isPositionWalkable()) { 88 | if (!Dialog.isOpen()) { 89 | event.interact(x -> true); 90 | Time.sleepUntil(Dialog::isOpen, 1000, 10000); 91 | } 92 | if (Dialog.canContinue()) { 93 | Dialog.processContinue(); 94 | Time.sleep(random(200, 500)); 95 | } 96 | 97 | //NEEDS TESTING 98 | } else if (event.getName().equals("Frog")) { 99 | Npc frogPrince = Npcs.getNearest(npc -> !npc.containsAction("Dismiss") && npc.getName().equals("Frog") && npc.containsAction("Talk-to")); 100 | if (!Dialog.isOpen()) { 101 | frogPrince.interact(x -> true); 102 | Time.sleepUntil(Dialog::isOpen, 1000, 10000); 103 | } 104 | if (Dialog.canContinue()) { 105 | Dialog.processContinue(); 106 | Time.sleep(random(200, 500)); 107 | } 108 | if (Dialog.isViewingChatOptions()) { 109 | Dialog.process("I suppose so, sure."); 110 | // Dialog.process(opt->opt.contains("sure")); 111 | //Dialog.process(0);//Yes? 112 | Time.sleep(random(200, 500)); 113 | } 114 | } else if (event.getName().equals("Sergeant Damien")) { 115 | Log.info("We got sergeant lets do it!"); 116 | Time.sleep(random(500, 1000)); 117 | } else { 118 | Time.sleep(random(200, 500)); 119 | event.interact("Dismiss"); 120 | Time.sleep(random(300, 500)); 121 | } 122 | 123 | } 124 | 125 | private void logChat(String text) { 126 | LocalDateTime timestamp = LocalDateTime.now(); 127 | if (!new File(Script.getDataDirectory() + "\\Koko\\Logs\\Screenshots").exists()) { 128 | new File(Script.getDataDirectory() + "\\Koko\\Logs\\Screenshots").mkdirs(); 129 | } 130 | 131 | try (FileWriter fw = new FileWriter(Script.getDataDirectory() + "\\Koko\\Logs\\Randoms.txt", true); 132 | BufferedWriter bw = new BufferedWriter(fw); 133 | PrintWriter out = new PrintWriter(bw)) { 134 | out.println(timestamp + "> " + text); 135 | } catch (IOException e) { 136 | //exception handling left as an exercise for the reader 137 | } 138 | } 139 | 140 | private int random(int min, int max) { 141 | SecureRandom random = new SecureRandom(); 142 | return (random.nextInt(max - min + 1) + min); 143 | } 144 | } -------------------------------------------------------------------------------- /WinterThot/RandomHandler.java: -------------------------------------------------------------------------------- 1 | import org.rspeer.runetek.adapter.component.InterfaceComponent; 2 | import org.rspeer.runetek.adapter.scene.Npc; 3 | import org.rspeer.runetek.api.commons.Time; 4 | import org.rspeer.runetek.api.component.Dialog; 5 | import org.rspeer.runetek.api.component.Interfaces; 6 | import org.rspeer.runetek.api.component.tab.Inventory; 7 | import org.rspeer.runetek.api.scene.Npcs; 8 | import org.rspeer.runetek.api.scene.Players; 9 | import org.rspeer.script.Script; 10 | import org.rspeer.ui.Log; 11 | 12 | import javax.swing.*; 13 | import java.io.*; 14 | import java.security.SecureRandom; 15 | import java.time.LocalDateTime; 16 | import java.util.Arrays; 17 | 18 | class RandomHandler { 19 | double SCRIPT_VERSION = 1.0; 20 | 21 | private boolean showPopup = false, showSecondPopup = false; 22 | 23 | void checkLamp() { 24 | if (Inventory.contains("Lamp")) { 25 | if (!Interfaces.isOpen(134)) { 26 | Inventory.getFirst("Lamp").interact("Rub"); 27 | Time.sleepUntil(() -> Interfaces.isOpen(134), 500, 10000); 28 | } 29 | if (Interfaces.isOpen(134)) { 30 | InterfaceComponent prayer = Interfaces.getComponent(134, 9); 31 | InterfaceComponent confirm = Interfaces.getComponent(134, 26); 32 | prayer.interact("Advance Prayer"); 33 | Time.sleep(random(1000, 1500)); 34 | confirm.interact("Ok"); 35 | Time.sleepUntil(() -> !Interfaces.isOpen(134), 500, 10000); 36 | } 37 | if (Dialog.canContinue()) { 38 | Dialog.processContinue(); 39 | Time.sleep(random(200, 500)); 40 | } 41 | } 42 | } 43 | 44 | boolean findNearbyRandoms() { 45 | if (Npcs.getNearest(npc -> npc.containsAction("Dismiss")) != null) { 46 | if (!showPopup) { 47 | java.awt.EventQueue.invokeLater(() -> { 48 | JOptionPane optionPane = new JOptionPane("RANDOM EVENT DETECTED!", JOptionPane.WARNING_MESSAGE); 49 | JDialog dialog = optionPane.createDialog("Warning!"); 50 | dialog.setAlwaysOnTop(true); 51 | dialog.setVisible(true); 52 | }); 53 | showPopup = true; 54 | } 55 | Log.info("Detected random event!"); 56 | Npc event = Npcs.getNearest(npc -> npc.containsAction("Dismiss")); 57 | 58 | logChat("We have detected a random event [" + event.getName() + "] Actions: [" + Arrays.toString(event.getActions()) + "]" 59 | + " NPC Target: " + (event.getTarget() != null ? event.getTarget().getName() : "N/A") 60 | + " Message: " + (event.getOverheadText() != null ? event.getOverheadText() : "N/A")); 61 | return true; 62 | } 63 | showPopup = false; 64 | return false; 65 | } 66 | 67 | boolean doWeHaveRandom() { 68 | if (Npcs.getNearest(npc -> npc.containsAction("Dismiss") && npc.getTarget() == Players.getLocal() && npc.isPositionWalkable()) != null) { 69 | if (!showSecondPopup) { 70 | java.awt.EventQueue.invokeLater(() -> { 71 | JOptionPane optionPane = new JOptionPane("WE HAVE A RANDOM EVENT!", JOptionPane.WARNING_MESSAGE); 72 | JDialog dialog = optionPane.createDialog("Warning!!"); 73 | dialog.setAlwaysOnTop(true); 74 | dialog.setVisible(true); 75 | }); 76 | showSecondPopup = true; 77 | } 78 | return true; 79 | } 80 | showSecondPopup = false; 81 | return false; 82 | } 83 | 84 | void handleRandom() { 85 | Npc event = Npcs.getNearest(npc -> npc.containsAction("Dismiss") && npc.getTarget() == Players.getLocal()); 86 | 87 | if ((event.getName().equals("Genie") || event.getName().equals("Drunken Dwarf") || event.getName().equals("Dr Jekyll") || event.getName().equals("Rick Turpentine")) && event.isPositionWalkable()) { 88 | if (!Dialog.isOpen()) { 89 | event.interact(x -> true); 90 | Time.sleepUntil(Dialog::isOpen, 1000, 10000); 91 | } 92 | if (Dialog.canContinue()) { 93 | Dialog.processContinue(); 94 | Time.sleep(random(200, 500)); 95 | } 96 | 97 | //NEEDS TESTING 98 | } else if (event.getName().equals("Frog")) { 99 | Npc frogPrince = Npcs.getNearest(npc -> !npc.containsAction("Dismiss") && npc.getName().equals("Frog") && npc.containsAction("Talk-to")); 100 | if (!Dialog.isOpen()) { 101 | frogPrince.interact(x -> true); 102 | Time.sleepUntil(Dialog::isOpen, 1000, 10000); 103 | } 104 | if (Dialog.canContinue()) { 105 | Dialog.processContinue(); 106 | Time.sleep(random(200, 500)); 107 | } 108 | if (Dialog.isViewingChatOptions()) { 109 | Dialog.process("I suppose so, sure."); 110 | // Dialog.process(opt->opt.contains("sure")); 111 | //Dialog.process(0);//Yes? 112 | Time.sleep(random(200, 500)); 113 | } 114 | } else if (event.getName().equals("Sergeant Damien")) { 115 | Log.info("We got sergeant lets do it!"); 116 | Time.sleep(random(500, 1000)); 117 | } else { 118 | Time.sleep(random(200, 500)); 119 | event.interact("Dismiss"); 120 | Time.sleep(random(300, 500)); 121 | } 122 | 123 | } 124 | 125 | private void logChat(String text) { 126 | LocalDateTime timestamp = LocalDateTime.now(); 127 | if (!new File(Script.getDataDirectory() + "\\Koko\\Logs\\Screenshots").exists()) { 128 | new File(Script.getDataDirectory() + "\\Koko\\Logs\\Screenshots").mkdirs(); 129 | } 130 | 131 | try (FileWriter fw = new FileWriter(Script.getDataDirectory() + "\\Koko\\Logs\\Randoms.txt", true); 132 | BufferedWriter bw = new BufferedWriter(fw); 133 | PrintWriter out = new PrintWriter(bw)) { 134 | out.println(timestamp + "> " + text); 135 | } catch (IOException e) { 136 | //exception handling left as an exercise for the reader 137 | } 138 | } 139 | 140 | private int random(int min, int max) { 141 | SecureRandom random = new SecureRandom(); 142 | return (random.nextInt(max - min + 1) + min); 143 | } 144 | } --------------------------------------------------------------------------------