Jump to content
View in the app

A better way to browse. Learn more.

OSBot :: 2007 OSRS Botting

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

MGT Madness

Members
  • Joined

  • Last visited

Everything posted by MGT Madness

  1. It's called a Tank Slapper or Speed Wobble, it usually happens at high speeds, many youtube videos of it happening and explanations
  2. 3 seconds of im fucked feels
  3. Script is fully working for me so far
  4. Same here, you'll have to patiently wait, no eta so far.
  5. I used this for 10 hours a day for 5 days, last time i used it was a week ago, i quit Osrs because membership ran out xD. If someone could provide a screenshot of it in use, would be cute. How to use: Enter the NMZ instance, use your overload and a few absorbtions. Features: - Decent anti-ban - Uses overload when needed - Uses absorbtion potions after overloading - Uses rock cake - Interface that shows experience in skill gained and xp per hour - It will stop the script when outside NMZ instance. Improvements to do yourself: - There is like a very rare chance the bot will kill itself in the NMZ instance by rockcaking then overloading - Make Randomized actions instead of randomized delays between actions - Add support for Magic/Ranged potion - Support for use of prayer - Currently you need to overload and absorbtion manually when you enter the instance. - Make it log out properly or restock when out of NMZ instance. import java.awt.BasicStroke; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Point; import java.awt.RenderingHints; import java.util.ArrayList; import java.util.List; import org.osbot.rs07.api.map.Area; import org.osbot.rs07.api.map.Position; import org.osbot.rs07.api.model.NPC; import org.osbot.rs07.api.model.Player; import org.osbot.rs07.api.ui.Skill; import org.osbot.rs07.api.ui.Tab; import org.osbot.rs07.script.Script; import org.osbot.rs07.script.ScriptManifest; @ScriptManifest(author = "Mgt Madness", info = "Nightmare Zone", name = "Nmz", version = 1.0, logo = "") public class NightmareZoneMgt extends Script { private final Color BACKGROUND_COLOUR = new Color(0, 0, 0, 80); private final Color BACKGROUND_OUTLINE_CLOUR = new Color(0, 0, 0, 80); private final Color MAIN_TEXT_COLOUR = new Color(102, 188, 255); private final BasicStroke stroke1 = new BasicStroke(1); private final Font font1 = new Font(Font.SANS_SERIF, 0, 12); private final int X = -134; private final int Y = 85; private final int BOX_ARC_AMOUNT = 8; private final String[] ABSORBTION_POTIONS = {"Absorption (1)", "Absorption (2)", "Absorption (3)", "Absorption (4)"}; private final String[] OVERLOAD_POTIONS = {"Overload (1)", "Overload (2)", "Overload (3)", "Overload (4)"}; private long timeScriptStarted = System.currentTimeMillis(); private String status = ""; private ArrayList<String> skillsExperienceStart = new ArrayList<String>(); private ArrayList<String> skillsExperienceGained = new ArrayList<String>(); private long timeToDrinkOverload; private int absorbtionDosesToDrink; private long timeCanCake; @Override public void onStart() { setStatus("Script started."); for (Skill data : Skill.values()) { skillsExperienceStart.add(data.name() + ":" + skills.getExperience(data)); } } @Override public int onLoop() throws InterruptedException { if (skills.getDynamic(Skill.HITPOINTS) == 0) { setStatus("Player is 0 hp."); } if (getClient().getLoginStateValue() == 40) { log("Connection lost"); } if (areaHasPlayers()) { setStatus("Area has players, stop script"); stop(); } updateExperienceGained(); overload(); absorbtion(); antiBan(); cake(); return random(500, 1000); } private void cake() { if (System.currentTimeMillis() < timeCanCake) { return; } if (System.currentTimeMillis() < timeToDrinkOverload) { return; } if (skills.getDynamic(Skill.STRENGTH) > skills.getStatic(Skill.STRENGTH)) { if (skills.getDynamic(Skill.HITPOINTS) > 2) { setStatus("Eat"); inventory.interact(random(1, 15) == 1 ? "Guzzle" : "Eat", "Dwarven rock cake"); moveMouse(3); } else if (skills.getDynamic(Skill.HITPOINTS) == 2) { long delay = random(61000, 170000); if (random(1, 7) == 1) { delay = random(170000, 360000); } if (random(1, 6) == 1) { // Do not guzzle. } else { setStatus("Eat"); inventory.interact("Guzzle", "Dwarven rock cake"); } moveMouse(3); timeCanCake = System.currentTimeMillis() + delay; } } } private void antiBan() throws InterruptedException { if (random(1, 200) == 1) { setStatus("Anti-ban random mouse movement"); moveMouse(1); } if (random(1, 300) == 1) { moveMouse(2); if (skills.getCombat().getSpecialPercentage() >= 55) { skills.getCombat().toggleSpecialAttack(true); setStatus("Anti-ban special attack activated"); } } if (random(1, 300) == 1) { int random = random(1, 50); if (random <= 5) { absorbtionDosesToDrink = random(1, 2); setStatus("Anti-ban drink abosrbtion"); sleep(random(2000, 10000)); skills.getMouse().moveOutsideScreen(); } else if (random <= 25) { attackRandomTarget(); } else if (random <= 30) { getWalking().walk(new Position((myPlayer().getX() - 10) + random(0, 10), (myPlayer().getY() - 10) + random(0, 10), myPlayer().getHeight())); setStatus("Anti-ban walk"); sleep(random(2000, 10000)); skills.getMouse().moveOutsideScreen(); } else if (random <= 40) { random = random(1, 10); if (random <= 4) { setStatus("Anti-ban friends"); getTabs().open(Tab.FRIENDS); sleep(random(3000, 10000)); getTabs().open(Tab.INVENTORY); } else if (random <= 7) { setStatus("Anti-ban attack tab"); getTabs().open(Tab.ATTACK); sleep(random(3000, 7000)); getTabs().open(Tab.INVENTORY); } else if (random <= 10) { setStatus("Anti-ban skills tab"); getTabs().open(Tab.SKILLS); sleep(random(2000, 4000)); skills.hoverSkill(random(1, 3) == 1 ? Skill.HITPOINTS : Skill.RANGED); sleep(random(4000, 12000)); getTabs().open(Tab.INVENTORY); } sleep(random(2000, 10000)); skills.getMouse().moveOutsideScreen(); } else if (random <= 50) { if (System.currentTimeMillis() < timeCanCake) { attackRandomTarget(); return; } if (skills.getDynamic(Skill.HITPOINTS) > 1) { setStatus("Anti-ban eat"); inventory.interact(random(1, 2) == 1 ? "Guzzle" : "Eat", "Dwarven rock cake"); } sleep(random(2000, 10000)); skills.getMouse().moveOutsideScreen(); } } } private void attackRandomTarget() throws InterruptedException { List<NPC> allNpcs = npcs.getAll(); for (int index = 0; index < allNpcs.size(); index++) { NPC npc = allNpcs.get(index); if (npc == null) { continue; } if (!npc.exists()) { continue; } if (!npc.isOnScreen()) { continue; } if (random(1, 2) == 1) { continue; } npc.interact("Attack"); setStatus("Anti-ban switch target"); sleep(random(2000, 8000)); skills.getMouse().moveRandomly(); sleep(random(2000, 10000)); skills.getMouse().moveOutsideScreen(); break; } } private void absorbtion() { if (absorbtionDosesToDrink > 0) { setStatus("Drinking absorbtion"); inventory.interact("Drink", ABSORBTION_POTIONS); moveMouse(10); absorbtionDosesToDrink--; if (absorbtionDosesToDrink == 0) { timeCanCake = System.currentTimeMillis() + random(500, 7000); } } } private void overload() throws InterruptedException { if (skills.getDynamic(Skill.HITPOINTS) < 51) { return; } if (timeToDrinkOverload == 0) { if (skills.getDynamic(Skill.STRENGTH) == skills.getStatic(Skill.STRENGTH)) { setStatus("Will overload shortly"); long delay = random(2000, 20000); if (random(1, 6) == 1) { delay = random(20000, 120000); setStatus("Will overload longly"); } timeToDrinkOverload = System.currentTimeMillis() + delay; } return; } if (System.currentTimeMillis() > timeToDrinkOverload) { setStatus("Drinking overload"); timeCanCake = System.currentTimeMillis() + random(10000, 25000); inventory.interact("Drink", OVERLOAD_POTIONS); timeToDrinkOverload = 0; moveMouse(3); sleep(random(1000, 8000)); absorbtionDosesToDrink = random(2, 7); } } private void moveMouse(int chance) { if (random(1, chance) == 1) { if (random(1, 15) == 1) { skills.getMouse().moveRandomly(); } else if (random(1, 8) == 1) { skills.getMouse().moveSlightly(); } else { skills.getMouse().moveVerySlightly(); } setStatus("Anti-ban random mouse movement"); } } @Override public void onExit() { setStatus("Script ended."); } @Override public void onPaint(Graphics2D g) { int ySize = skillsExperienceGained.size() * 16; g.setColor(BACKGROUND_COLOUR); g.fillRoundRect(143 + X, 8 + Y, 211, 40 + ySize, BOX_ARC_AMOUNT, BOX_ARC_AMOUNT); g.setColor(BACKGROUND_OUTLINE_CLOUR); g.setStroke(stroke1); g.drawRoundRect(143 + X, 8 + Y, 211, 40 + ySize, BOX_ARC_AMOUNT, BOX_ARC_AMOUNT); g.setFont(font1); g.setColor(MAIN_TEXT_COLOUR); g.drawString("Duration: " + getRuntime(), 147 + X, 24 + Y); g.drawString("Last action: " + status, 147 + X, 40 + Y); for (int index = 0; index < skillsExperienceGained.size(); index++) { g.drawString(skillsExperienceGained.get(index), 147 + X, 40 + Y + ((index + 1) * 16)); } drawMouse(g); } private void setStatus(String status) { log("Status: " + status); this.status = status; } /** * Get time since script started. */ private String getRuntime() { long seconds = (System.currentTimeMillis() - timeScriptStarted) / 1000; String time = ""; if (seconds < 60) { return seconds + "s"; } else if (seconds < 3600) { int remainder = (int) (seconds / 60); if (60 * remainder < seconds) { remainder = (int) (seconds - (60 * remainder)); } else { remainder = 0; } return (seconds / 60) + "m " + remainder + "s"; } else { int remainderMinutes = (int) seconds / 3600; int seconds1 = 0; if (3600 * remainderMinutes < seconds) { remainderMinutes = (int) (seconds - (3600 * remainderMinutes)); seconds1 = remainderMinutes; remainderMinutes /= 60; int remainder = (int) (seconds1 / 60); if (60 * remainder < seconds1) { remainder = (int) (seconds1 - (60 * remainder)); } else { remainder = 0; } seconds1 = remainder; } else { remainderMinutes = 0; } return (seconds / 3600) + "h " + remainderMinutes + "m " + seconds1 + "s"; } } /** * @return * The number in thousands with k at the end. */ private String getFormattedRunescapeNumber(int amount) { if (amount >= 1000) { return (amount / 1000) + "k"; } else { return amount + ""; } } private void updateExperienceGained() { int index = 0; skillsExperienceGained.clear(); for (Skill data : Skill.values()) { int currentXp = skills.getExperience(data); String[] parse = skillsExperienceStart.get(index).split(":"); int startXp = Integer.parseInt(parse[1]); if (currentXp > startXp) { int totalXp = currentXp - startXp; skillsExperienceGained.add(capitalize(parse[0]) + " xp: " + getFormattedRunescapeNumber(totalXp) + " (" + getFormattedRunescapeNumber(getExperienceperHour(totalXp)) + "/h)"); } index++; } } public int getExperienceperHour(int totalExperienceGained) { int minutes = (int) ((System.currentTimeMillis() - timeScriptStarted) / 60000); int beforeSeconds = 0; double multiplier = 1.0; if (minutes < 60) { beforeSeconds = (int) ((System.currentTimeMillis() - timeScriptStarted) / 1000); multiplier = 3600.0 / (double) beforeSeconds; minutes = 60; } double convert = (double) minutes; convert = convert / 60.0; return (int) ((totalExperienceGained / convert) * multiplier); } /** * Capitalize the first letter and other letters that before it is a space. * @param s * @return */ public static String capitalize(String s) { s = s.toLowerCase(); for (int i = 0; i < s.length(); i++) { if (i == 0) { s = String.format("%s%s", Character.toUpperCase(s.charAt(0)), s.substring(1)); } if (!Character.isLetterOrDigit(s.charAt(i))) { if (i + 1 < s.length()) { s = String.format("%s%s%s", s.subSequence(0, i + 1), Character.toUpperCase(s.charAt(i + 1)), s.substring(i + 2)); } } } return s; } public boolean areaHasPlayers() { Area area = myPlayer().getArea(10);//create your own area int amount = 0; for (Player player : players.getAll()) { if (player != null && !player.getName().equalsIgnoreCase(myPlayer().getName())) { if (area.contains(player)) { amount++; } } } return amount > 0; } public void drawMouse(Graphics g) { ((Graphics2D) g).setRenderingHints(new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON)); Point p = mouse.getPosition(); Graphics2D spinG = (Graphics2D) g.create(); Graphics2D spinGRev = (Graphics2D) g.create(); spinG.setColor(new Color(255, 255, 255)); spinGRev.setColor(Color.cyan); spinG.rotate(System.currentTimeMillis() % 2000d / 2000d * (360d) * 2 * Math.PI / 180.0, p.x, p.y); spinGRev.rotate(System.currentTimeMillis() % 2000d / 2000d * (-360d) * 2 * Math.PI / 180.0, p.x, p.y); final int outerSize = 20; final int innerSize = 12; spinG.setStroke(new BasicStroke(1.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)); spinGRev.setStroke(new BasicStroke(1.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)); spinG.drawArc(p.x - (outerSize / 2), p.y - (outerSize / 2), outerSize, outerSize, 100, 75); spinG.drawArc(p.x - (outerSize / 2), p.y - (outerSize / 2), outerSize, outerSize, -100, 75); spinGRev.drawArc(p.x - (innerSize / 2), p.y - (innerSize / 2), innerSize, innerSize, 100, 75); spinGRev.drawArc(p.x - (innerSize / 2), p.y - (innerSize / 2), innerSize, innerSize, -100, 75); } }
  6. As title says, this is because the closest npc is already in combat, so i'd like the bot to find the second closest npc to attack. Rather than sit there until a new close npc spawns xD - Thank you for your time
  7. I want this UI to be interactable and to be ontop of my chatbox for example. So when i click a certain spot on the chatbox, it will change a setting etc.. I just need a release that has it and i'll do the rest. - Thank you for your time
  8. Enabling it in the settings only shows my cursor trail and not the bot. I'm creating my own bots so i'd like to know how to see the cursor trail of the bot, thanks. - Thank you for your time
  9. I've followed this tutorial http://osbot.org/forum/topic/58775-a-beginners-guide-to-writing-osbot-scripts-where-to-get-started-by-apaec/ But the part where i'm suppose to run the script through the OSBot client, is where i'm stuck at, because the script doesn't show, even though i've already added the jar file to the osbot scripts folder http://prntscr.com/8zyv7n I have restart osbot a few times and refreshed the scripts page in the client and still it doesn't show. - Thank you for your time
  10. Oh, i didn't know, i'll stop bumping untill i get 100 posts, thank you.
  11. All the accounts belong to me and their email will be changed and verified to your email upon purchase. Contact "opie313" on Skype to find out about the prices and to purchase the account. I am a trusted member of two other massive Runescape related Communities which i can prove to you via Skype. All the accounts listed below are from NA/EUW/EUNE. There are many more accounts for sale that are not listed on the thread, so feel free to ask about them on Skype. By purchasing an account from us, you agree to the following: - You will not charge back the money in any shape or form. - I will not be responsible for anything that happens to the account after i hand it over to you. - You will vouch on my thread. Account #100: Region: NA Level 30 Champions: 51 IP: 460 Account #101: Region: NA Bronze 1 in season 3 Level: 30 Champions: 46 Skins: 6 RP: 215 IP: 5343 Account #102: Region: NA Level: 30 RP: 97 IP: 2309 Champions: 41 Rune pages: 3 Skins: 11 Account #103: Region: NA Level: 30 IP: 474 Champions: 43 Rune pages: 3 Account #104: Region: NA Silver 3 current season. Level: 30 Champions: 47 Skins: 6 IP: 6251 Rune pages: 4 Account #105: Region: NA Level: 30 Bronze 5 current season. RP: 106 IP: 1084 Champions: 29 Skins: 7 Account #106: Region: NA Level: 30 IP: 73301 Champions: 18 Rune pages: 3 Skins: 4 Account #107: Region: NA Level: 30 IP: 1946 Champions: 60 Skins: 2 Account #108: Region: NA Level 30 Champions: 60 Rune pages: 9 Account #109: Region: NA Level: 30 RP: 110 IP: 1252 Champions: 58 Skins: 5 Account #110: Region: NA Level: 30 Silver in Season 3. RP: 686 IP: 3254 Champions: 77 Rune pages: 5 Skins: 10 Account #111: Region: NA Level: 30 RP: 805 IP: 9274 Champions: 38 Rune pages: 3 Skins: 2 Account #112: Region: NA Level: 30 RP: 450 IP: 12028 Champions: 35 Rune pages: 6 Skins: 4 Account #200: Region: EUW Level: 30 IP: 2976 Champions: 47 Rune pages: 3 Skins: 4 Currently Bronze 4. Account #201: Region: EUW Level: 30 RP: 480 IP: 1132 Champions: 38 Skins: 3 Currently Gold 5 Account #202: Region: EUW Level: 30 IP: 2259 Champions: 48 Skins: 4 Currently Bronze 5 Account #203: Region: EUW Level: 30 RP: 225 Champions: 64 Skins: 7 Currently Silver 1 Account #204: Region: EUW Level: 30 IP: 2127 Champions: 65 Skins: 23 Currently Bronze 1 Account #300: Region: EUNE Level: 30 RP: 326 IP: 1673 Champions: 54 Skins: 3 Currently Bronze 3 Account #301: Region: EUNE Level: 30 RP: 85 IP: 4568 Champions: 39 Skins: 8
  12. Still doesn't work. - Thanks EDIT: http://prntscr.com/1tkasu EDIT2: and revision 21

Account

Navigation

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.