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.

Leaderboard

Popular Content

Showing content with the highest reputation on 06/02/14 in all areas

  1. Well I thought today I would release some of my private collection of different classes/snippets hopefully help new writers learn a little bit, and to maybe see a rise in quality of scripts throughout this forum. For my fifth release is another great learning experience I undertook last month, creating a mouse movement algorithm using a bézier curve algorithm I created with the help of Google, a tutorial on here, and @Merccy & @Swizzbeat helping me understand how the mouse interacts with the canvas, how to send my own events to the canvas. The reason I'm releasing this is because of the rise in bans as of recent, and I feel mouse movement plays a significant role in bans, though some people doubt this. I have to admit I didn't always think this was true either, and like some that still don't believe, I thought of profiling mouse movements as completely impossible due too the extensive resources that it would take to profile each player, though I will post some quotes from respected members of RS Hacking community that completely changed my thoughts about this. (Posting in text to avoid subliminal advertisement) #1 #2 #3 Those excerpts from above are some of the better material I have found regarding bans, but there is much much more on the topic, just a matter of digging deep enough to find it! Though a mouse change alone won't completely remove the chances of a ban, it gives you a better chance of going undetected. Now lets get started! What does this actually do? Well simply make your mouse completely different, using a bézier curve algorithm I created using a framework Swizzbeat and Merccy supplied me with. The final result, should look somewhat like this: Though this could be highly improved upon, it is a huge improvement to the default, and there are also other mouse controllers such as the SRL Mouse and WindMouse which are available on Google, just may require some porting over. How does is work? Well when creating this instead of starting by looking through RS examples, I instead went and study the math behind bézier curves, to find out they were quite simple to grasp. Then after seeing a idea for a mouse controller posted that I thought would be suited perfect for my use, I decided to replicate it. This is the basic guideline I followed when creating this. Finally, how the hell do I use this?: Well even though I took out most of the work, it still takes some on your side, just mostly copy/pasting, thought I recommend that you edit this mouse algorithm because the more similar patterns the more chances of you being detected. Well this tutorial will partially coincide with @Merccy's tutorial on Creating your own Mouse Controller, though I have made edits and extended some other areas he did not. First off we need to create a interface which we can use later to create new mouse algorithms easily and making changing them a snap. In Merccy's tutorial he creates a MouseController class which handles moveMouse and moveMouseTo methods, though this is also where we assign our new MouseController as well. We are adding this class becasue it seems that Merccy didn't mention it, though we need a class that can send our new mouse events to the canvas to have it move the mouse. Now we Object hold this new mouse we created, so for this I created ModMouse, which basically reflects and sets our mouse controller to replace the original. This is similar to Merccy's though we also set our MouseEvent as well. Finally we have everything we need to set use our own mouse algorithm, but we need a Mouse algorithm to use it! I named this NotoriousMouse purely to change the name other a Mouse controller sent by Swizz beat, which I then ripped all the internals out and rewrote using the new found knowledge I learned while studying bézier curves! This may not be the best, but it's a big step up! So we have all these files ready to go, and you should have something looking like this: For the hardest part of all is implementing it, please pay attention as this may be difficult for some to understand. @Override public void onStart() { new ModMouse(this); } Done. If you manage to follow all the directions and copy/pasted everything just right you should have a whole new mouse in your script! You now are on the road to having a more diverse mouse controller, though please be warned this is only for OSBot1, I have already tried implementing this into OSBot2 but the mouse methods are now declared as final and are no longer able to be overridden (If there's another way please let me know). I really hope you enjoyed the read, and I hope it helps all of you! I would post my sources and references but I withheld from doing so in fear of ban due to accidentally advertising, though I'm sure could be found with someone interested in the subject. Questions/Comments?: If you see anything I messed up on, or should be improved, please let me know, but be respectful about it, we have too many keyboard warriors thinking their hot shit, yet do nothing but bash others and never give any useful resources. Even if you have a question, free to ask me, just please refrain from asking me blatant obvious questions, or ones you did little to no research on before asking, I'm not here to spoon feed you, though I am willing to help someone is trying.
  2. http://osbot.org/forum/topic/50406- @Divinity - newfag trial. @Nick - Got promoted instead of demoted...wtf? @Pikachu - He's banned. O.o @Acerd - #Acerd4CBA!! AHFSHASGINVAIOERHBGA @No1 - Scamquitted. O.o @Millenium - Got unbanned and twc removed. inb4scam @James - Got twc removed, along with his ability to join the chatbox. @Asuna - Got CBA! ;D @Smart - Got demoted. - @Occazn - Just came back and now he's banned...seems legit. @mehul112 - Failed scam attempt? @RoomScape - being reviewed and his position is in danger. @Catastrophe - Surpassed @XavierM in total time online. @Jack - has just become my new best friend. @Timekeeper & @Jeffy Jeff - Both declared themselves to be the king of VIP/Sponsor/Donors. A fight to the death shall suffice to determine which one is better suited for that position, don't you think? @lolmanden - Has just declared himself the Leader of TWCs! @Master Chief - Got TWC removed. @Laz - Talked about some OSBot 2 stuff which I have no clue about: http://osbot.org/forum/topic/51910- @Mikasa - Surpassed @Smart as the user with the most posts! @Ericthecmh - Got Script Manager, gratz!! - Still a shit scripter.
  3. And this is why I don't understand why the emulator doesn't port it over like it was designed to, what's the point of the emulator if it doesn't do what it's supposed to do
  4. Not gonna argue with this. This man speaks the truth. Pathetic. I'd like a full recovery on ALL of my so called "life-time" scripts that I paid for.
  5. For the people arguing that writers should be forced to port over our scripts, is honestly the stupidest thing I ever read... That's like saying if I have the same script on multiple clients, you deserve access to them all since you bought one already. When I wrote my scripts, I used the OSBot1 API, not OSBot2... I would of understood if they had made a major change to our original API, though they chose to use a new one all together, making somethings that were once easy, impossible to do now. Almost the same feeling you get when trying another clients API, trying to port something, it's doesn't always work. Honestly about 45% of my private collection of snippets, and recreation of the OSBot1 API, has now outdated and am unable to rewrite due to the change in API. For example: Mouse method are now made final, blocking any chance of overriding them for use of custom controllers. GF Mouse Algorithms. You are no longer able to instantiate items, and when trying to use the legacy import, it has been depreciated. GF Inventory Monitor. Don't even get me started on the changes made to walking. GF Walking snippets. Banking is now reworked, and am getting nothing but errors trying to port over my custom Banking API. GF 5 days of work. Yea it does have some improvements, but it feels like a completely new API just with a similar naming convention to OSBot. Those are just to name a few of the major parts of my scripts for OSBot1 that are now broken with OSBot2. So literally it is almost impossible to recreate my scripts for OSBot1 using the OSBot2 API, they would need be completely rewritten, and would result in a completely different functioning script. So I don't see why users who bought OSBot 1 scripts, should get what would be a completely new script, in terms of functionality, and code, just with the original name. It's almost as if our users feels entitled to tell us what we can and cannot do with our work. If you think it is so easy to port something over, especially when your dealing with scripts that are 10k+ lines long and directly manipulating the OSBot client, by all means be my guest, I wouldn't mind some more competition.
  6. What's the best way to get the best walkable tile (which is the highlighted one) dynamically? This is not hard when the entity is 1x1 but when its larger it gets bit harder. I know we got DynamicCircularPathFinder but its painfully slow and wrong many times. I tried to backport an old script by Zalgo but could not get it to work. http://pastebin.com/kaxySJPT http://pastebin.com/84myWrSk I can get the size & orientation then array thru all the postions the entity covers and array once more the area around those postions for tiles with 0 flag but I don't think that's an efficient or ideal way to do it.
  7. Everything about this picture is amazing. I was still using Safari. That post count. My old main before he was banned. That price. That OSBot version. (Jordan) was still going by the alias Jason and had me set as his avatar. This photo was taken June 1st, 2013 at 2:57 PM. That was a year ago today Oh how time flies by. PS here's the finished product incase anyone wanted to see:
  8. skills.getStatic(Skill.ATTACK); skills.getDynamic(Skill.ATTACK); sorry dynamic changes and static stays the same
  9. to everybody who is annoyed by this guy: Why? he is doing an experiment and he is doing us a favor by posting his findings. he is on our side. thanks dude
  10. Try to get it out this time lol, I lost count of all the ETA's. If it does this time though then it sounds promising. Just don't screw this up again -_- You are the one with minimal knowlegde of the source of OSBot's revenue lol. No scripters = no scripts = no members = no VIP's. Conclusion: No scripts = OSBot dies. So altough Sponsor/VIP brings them in the most, without scripts there would be completey nothing. So he's right.
  11. If you look at my post *cough cough*, he apparently scammed someone who filed a scam report and his account then had TWC placed upon it, so he made a new account. Not because he is trying to bot multiple accounts - unless he has extra accounts.
  12. People think graphics are easy to make. Uhm no, haha. You're so lucky to get cheap signatures. Signatures can take 1-2+ straight hours for a good one. Plus it takes a high amount of skill.
  13. OSBot does not store your runescape account information anywhere. The only place it would be stored is your local.dat file, which only you can access. It is under the data subfolder of your OSBot folder. If the account is not in there, you cannot find the information anywhere else.
  14. Disregard what I posted, they just hit me with a hot two day ban l0l.
  15. 2 points
    http://thebest404pageever.com/swf/house.swf http://thebest404pageever.com/swf/house.swf
  16. 2 points
    Congratulations to @Freak for winning this week's SOTW competition!
  17. Typical reaction by a teenager denying their love towards their crush.
  18. You guys don't understand that the developers of the OSBot 1 lifetime scripts will not be updating their scripts because they will not be on the market. Which makes the OSBot 1 emulator useless after a month or so except for a very few amount of scripts.
  19. Not overpriced. I agree it´s not complicated banner, but it´s totally fucked up to think that "professional" artists with real life clients would keep doing quality graphics for as low price as kids with for example 1 year experience making basic signatures. Who wants to spend hour/s making a nice piece of graphics for 5-10$? That´s like a damn god scripter making the most complicated script and then gives it out for almost free. Nice work @Dex!
  20. Fuck you, fucking cunt, you recoverd my account.
  21. 1 point
    Shop V2 Port Shop Item V2 Port I'll update more in the future, and feel free to contribute! Shop.scr import java.awt.Graphics2D; import java.util.HashSet; import java.util.Set; import org.osbot.script.MethodProvider; import org.osbot.script.Script; import org.osbot.script.rs2.model.Item; import org.osbot.script.rs2.model.NPC; import org.osbot.script.rs2.ui.RS2Interface; import org.osbot.script.rs2.ui.RS2InterfaceChild; /** * * @author LiveRare * * Shop class that provides simple access mechanisms to purchase items * from a shop interface. * */ public class Shop { /* * CONSTANT VARIABLES */ /** * Common parent ID of most (if not all) shops. */ public static final int COMMON_PARENT_ID = 300; /** * Common child ID for the component that contains the data for the items. */ public static final int COMMON_CONTENT_CHILD_ID = 75; /** * Common child ID for the shop's title. */ public static final int COMMON_TITLE_CHILD_ID = 76; /** * Common child ID for the shop's close button. */ public static final int COMMON_CLOSE_CHILD_ID = 92; /** * Maximum amount of slots available in a shop interface */ public static final int MAXIMUM_SLOT_AMOUNT = 40; /* * DYNAMIC VARIABLES */ /** * Script instance that will be accessing the interfaces from. */ private final Script script; /** * A cache of 40 available items. * * Note: 40 Is the maximum amount of item slots a shop can hold. */ private final ShopItem[] items; /** * ID values for the parent interface and child components. */ private final int parentID, childContentID, childTitleID, childCloseID; /** * Parent instance that will be accessed elsewhere in this class. */ private RS2Interface parent; /** * Name of the clerk to interact with. */ private String npcName; /* * Constructors */ public Shop(Script script, String npcName, int parentID, int childContentID, int childTitleID, int childCloseID) { this.script = script; this.npcName = npcName; this.parentID = parentID; this.childContentID = childContentID; this.childTitleID = childTitleID; this.childCloseID = childCloseID; this.items = new ShopItem[MAXIMUM_SLOT_AMOUNT]; init(); } public Shop(Script script, String npcName) { this(script, npcName, COMMON_PARENT_ID, COMMON_CONTENT_CHILD_ID, COMMON_TITLE_CHILD_ID, COMMON_CLOSE_CHILD_ID); } /* * Analytics methods */ /** * This class provides a property for an NPC name. This will allow the * {@link Shop#open(String)} function to execute with a viable NPC name. * * @param npcName * Name of the NPC to find */ public void setNPCName(String npcName) { this.npcName = npcName; } /** * This method will initialise the ShopItem 2D array that can contain up to * 40 ({@link Shop#MAXIMUM_SLOT_AMOUNT}). */ public void init() { for (int i = 0; i < MAXIMUM_SLOT_AMOUNT; i++) items[i] = new ShopItem(script, i); } /** * @Deprecated this method is really inefficient usage of the item cache * acquired from the shop interface. Since only one index is * required, the rest are disregarded. This method should only * be regarded if it's absolutely necessary! * * @param slot * Slot to validate * @return <tt>Validation was successful</tt> */ @Deprecated public boolean validate(int slot) { try { Item[] items = getItems(); this.items[slot].setDate(slot < items.length ? items[slot] : null); return true; } catch (Exception e) { this.items[slot].setDate(null); e.printStackTrace(); return false; } } /** * This method will analyse the shop's contents and stores the data in the * 2D ShopItem array. * * @return <tt>Successfully validated the shop's content</tt> */ public boolean validate() { try { Item[] items = getItems(); for (int i = 0; i < MAXIMUM_SLOT_AMOUNT; i++) this.items[i].setDate(i < items.length ? items[i] : null); return true; } catch (Exception e) { // If error occurs reset all ShopItem cache init(); e.printStackTrace(); return false; } } /** * * @return <tt>Shop interface is valid, thus; shop is open</tt> */ public boolean isOpen() { return (parent = script.client.getInterface(parentID)) != null && parent.isValid() && parent.isVisible(); } /** * * @return Shop's title */ public String getTitle() { return parent.getChild(childTitleID).getMessage(); } /** * * @return Items in the shop */ public Item[] getItems() { return parent.getItems(childContentID); } public int getAmount(int... itemIDs) { if (itemIDs == null || itemIDs.length == 0) return -1; int amount = 0; i: for (ShopItem item : items) if (item != null) for (int id : itemIDs) { if (item.getID() == id) { amount += item.getAmount(); continue i; } } return amount; } public int getAmount(String... itemNames) { if (itemNames == null || itemNames.length == 0) return -1; int amount = 0; i: for (ShopItem item : items) if (item != null && isStringValid(item.getName())) for (String name : itemNames) if (isStringValid(name)) { if (item.getName().equalsIgnoreCase(name)) { amount += item.getAmount(); continue i; } } return amount; } /** * Acquire an item based on its slot in the shop interface. * * ONLY USE THIS METHOD IF YOU <u>KNOW</u> FOR CERTAIN THE SLOT'S ITEM WILL * BE CONSISTENT, OTHERWISE USE ANOTHER GETTER. * * @param slot * Slot position within the shop * @return ShopItem by index */ public ShopItem getItemBySlot(int slot) { return slot >= 0 && slot < MAXIMUM_SLOT_AMOUNT ? this.items[slot] : null; } /** * Acquire an item based on item ID. * * @param ids * IDs of the item to search for * @return First shop item with a corresponding ID */ public ShopItem getItemByID(int... ids) { if (ids != null && ids.length > 0) for (ShopItem nextItem : items) for (int nextID : ids) if (nextItem.getID() == nextID) return nextItem; return null; } public ShopItem[] getItemsByID(int... ids) { Set<ShopItem> cache = new HashSet<>(); if (ids != null && ids.length > 0) for (ShopItem nextItem : items) for (int nextID : ids) if (nextItem.getID() == nextID) cache.add(nextItem); return cache.isEmpty() ? null : cache .toArray(new ShopItem[cache.size()]); } /** * Acquire an item based on item name. * * @param names * Names of the item to search for * @return First shop item with a corresponding name */ public ShopItem getItemByName(String... names) { if (names != null && names.length > 0) for (ShopItem nextItem : items) { String name = nextItem.getName(); if (!isStringValid(name)) continue; else for (String nextName : names) if (isStringValid(nextName) && name.equalsIgnoreCase(nextName)) return nextItem; } return null; } public ShopItem[] getItemsByName(String... names) { Set<ShopItem> cache = new HashSet<>(); if (names != null && names.length > 0) for (ShopItem nextItem : items) { String name = nextItem.getName(); if (!isStringValid(name)) continue; else for (String nextName : names) if (isStringValid(nextName) && name.equalsIgnoreCase(nextName)) cache.add(nextItem); } return cache.isEmpty() ? null : cache .toArray(new ShopItem[cache.size()]); } public void paint(Graphics2D g) { for (ShopItem next : items) next.draw(g); } /* * Interact methods */ public int tryPurchaseInvAmount(ShopItem item) throws InterruptedException { final int empty = script.client.getInventory() .getEmptySlots(); return tryPurchase(item, item.getAmount() > empty ? empty : item.getAmount()); } public int tryPurchase(ShopItem item, int amount) throws InterruptedException { if (item != null && amount > 0 && this.isOpen()) { this.validate(); int total = amount, onesPurchase = 0, fivesPurchase = 0, tensPurchase = 0; if (total >= 10) { tensPurchase = total / 10; total -= tensPurchase * 10; } if (total >= 5) { fivesPurchase = 1; total -= 5; } onesPurchase = total; int count = 0; try { for (int i = 0; i < tensPurchase; i++) if (purchase(item, 10)) count += 10; for (int i = 0; i < fivesPurchase; i++) if (purchase(item, 5)) count += 5; for (int i = 0; i < onesPurchase; i++) if (purchase(item, 1)) count += 1; } catch (RuntimeException e) { script.log(e.getMessage()); } return amount - count; } return -1; } private boolean purchase(ShopItem item, int amount) throws InterruptedException { final int oldID = item.getID(); validate(item.getSlot()); if (oldID != item.getID()) throw new RuntimeException("Inconsistent item! Required: " + oldID + ", but found: " + item.getID()); else if (item.getAmount() <= 0) return false; switch (amount) { case 1: return item.purchaseOne(); case 5: return item.purchaseFive(); case 10: return item.purchaseTen(); } return false; } public int trySell(Item item, int amount) throws InterruptedException { if (item != null && amount > 0 && this.isOpen()) { this.validate(); int total = amount, onesPurchase = 0, fivesPurchase = 0, tensPurchase = 0; if (total >= 10) { tensPurchase = total / 10; total -= tensPurchase * 10; } if (total >= 5) { fivesPurchase = 1; total -= 5; } onesPurchase = total; int count = 0; try { for (int i = 0; i < tensPurchase; i++) if (sell(item, 10)) count += 10; for (int i = 0; i < fivesPurchase; i++) if (sell(item, 5)) count += 5; for (int i = 0; i < onesPurchase; i++) if (sell(item, 1)) count += 1; } catch (RuntimeException e) { script.log(e.getMessage()); } return amount - count; } return -1; } private boolean sell(Item item, int amount) throws InterruptedException { return script.client.getInventory().interactWithId(item.getId(), "Sell " + amount); } /** * This method requires a pre-initialised <i>valid</i> NPC name or one needs * to be provided on the constructor. * * @param altNPCName * Alternative NPC to search for * @return <tt>Shop is open</tt> */ public boolean tryOpen(String altNPCName) throws InterruptedException { boolean open = isOpen(); try { if (open) return true; NPC npc = script .closestNPCForName(isStringValid(altNPCName) ? altNPCName : npcName); if (npc != null && npc.exists() && npc.interact("Trade")) script.sleep(MethodProvider.random(350, 600)); return open = isOpen(); } catch (Exception e) { e.printStackTrace(); return false; } finally { if (open) validate(); } } public boolean tryOpen() throws InterruptedException { return tryOpen(null); } public boolean close() throws InterruptedException { if (!isOpen()) // Prevent unnecessary re-closing return false; RS2InterfaceChild child = parent.getChild(childCloseID); return child != null && child.interact("Close"); } /* * Static methods */ private static boolean isStringValid(String arg0) { return arg0 != null && !arg0.isEmpty(); } } ShopItem.scr import java.awt.BasicStroke; import java.awt.Color; import java.awt.Dimension; import java.awt.FontMetrics; import java.awt.Graphics2D; import java.awt.Point; import java.awt.Rectangle; import java.awt.RenderingHints; import java.awt.Stroke; import org.osbot.script.Script; import org.osbot.script.mouse.RectangleDestination; import org.osbot.script.rs2.model.Item; /** * * @author LiveRare * * This class is designed to store the details for every item * within a shop interface. There should be only 40 instances * of this object stored in an array because there's a maximum * of 40 available item slots in a shop interface. * */ public class ShopItem { public static final Stroke STROKE = new BasicStroke(0.655f); public static final Color FOREGROUND_COLOR = new Color(255, 255, 255, 150); public static final Point ITEM_STARTING_POSITION = new Point(80, 70); public static final Dimension ITEM_BOUNDS = new Dimension(30, 25); public static final Dimension SPACE_MARGIN = new Dimension(17, 23); private final Script script; private final int slot; private final int slotColumn; private final int slotRow; private final Rectangle slotBounds; private final RectangleDestination slotDestination; private int id; private String name; private int amount; public ShopItem(Script script, int slot) { this.script = script; this.slot = slot; this.slotColumn = (slot % 8); this.slotRow = (int) (slot / (double) 8); this.slotBounds = new Rectangle( ITEM_STARTING_POSITION.x + (ITEM_BOUNDS.width + SPACE_MARGIN.width) * (slotColumn), ITEM_STARTING_POSITION.y + (ITEM_BOUNDS.height + SPACE_MARGIN.height) * (slotRow), ITEM_BOUNDS.width, ITEM_BOUNDS.height); this.slotDestination = new RectangleDestination(slotBounds); } @Override public boolean equals(Object obj) { return obj != null && obj instanceof ShopItem && ((ShopItem) obj).getSlot() == getSlot(); } @Override public String toString() { return "[Slot: " + slot + " | Name: " + name + " | Item ID: " + id + " | Amount: " + amount + "]"; } /* * Item profile values */ public int getSlot() { return slot; } public int getID() { return id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public void setID(int id) { this.id = id; } public int getAmount() { return amount; } public void setAmount(int amount) { this.amount = amount; } public int getSlotColumn() { return slotColumn; } public void setDate(Item item) { if (item != null) { this.id = item.getId(); this.name = item.getName(); this.amount = item.getAmount(); } else { this.id = -1; this.name = "null"; this.amount = -1; } } /* * Other methods */ public int getSlotRow() { return slotRow; } public Rectangle getSlotBounds() { return slotBounds; } public RectangleDestination getSlotDestination() { return slotDestination; } public boolean interact(String interact) throws InterruptedException { script.client.moveMouse(getSlotDestination(), false); return script.selectOption(null, getSlotDestination(), interact); } public boolean purchaseOne() throws InterruptedException { return interact("Buy 1"); } public boolean purchaseFive() throws InterruptedException { return interact("Buy 5"); } public boolean purchaseTen() throws InterruptedException { return interact("Buy 10"); } public void draw(Graphics2D g) { Rectangle r = new Rectangle(slotBounds.x - 4, slotBounds.y - 6, slotBounds.width + 4, slotBounds.height + 10); { // Draw bounding box g.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE); g.setStroke(STROKE); g.setColor(FOREGROUND_COLOR); g.draw(r); g.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_DEFAULT); } { // Draw text g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); FontMetrics fm = g.getFontMetrics(); String id = String.valueOf(this.id); int width = (int) fm.getStringBounds(id, g).getWidth(); Point p = new Point(r.x + ((r.width - width) / 2), r.y + 32); g.setColor(Color.BLACK); g.drawString(id, p.x - 1, p.y - 1); g.drawString(id, p.x - 1, p.y + 1); g.drawString(id, p.x + 1, p.y - 1); g.drawString(id, p.x + 1, p.y + 1); g.setColor(Color.WHITE); g.drawString(id, p.x, p.y); g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_OFF); } } } Example of usage: Shop shop; @Override public void onStart() { shop = new Shop(this, "Shop keeper"); // Shop keeper in the Varrock general store } @Override public int onLoop() throws InterruptedException { if (shop.isOpen() && shop.validate()) { //Validate method is required to launch at least once before item profiling ShopItem item = shop.getItemByName("Willow shortbow (u)"); // Common item dumped in that store if (item != null) { // ENSURE TO NULL-CHECK int failedToPurchaseCount = shop.tryPurchase(item, 26); // Item amount that wasn't purchased! log("Need to purchase: " + failedToPurchaseCount + " more..."); // Debug string } } else { shop.tryOpen(); // shop.tryOpen(String) can be used instead if you didn't already assign ab NPC name on constructor } return 300; } @Override public void onPaint(Graphics arg0) { Graphics2D g = (Graphics2D) arg0; if (shop != null && shop.isOpen()) { shop.paint(g); } } Note: There may be a problem with items with a quantity of 0. I will look into this tomorrow.
  22. Free trial: Want to try out a premium minigame script for free? Script's thread: http://osbot.org/forum/topic/47006-catapult-room-flawless-warriors-guild-token-farming-700h-released/ Rules: 100+ post count users only for security reason. Leave a comment on this thread. Leave a comment on the script's thread (see link above). Like the script's thread (not required but much appreciated) (see link above). Maximum one 12h trial per user. Maximum 3 trials per 12h.
  23. If you're talkin about item ID I think toolkit is #1? or is that private servers haha
  24. Oh trust me, it's does sound ridiculous to me too. Just both of us have two major issues though: You: Lose all your one-time scripts. Me: I lose all my income from OSBot (Yes I do need it.) If I don't either port mine, or write new ones. Honestly this entire situation is between a rock and a hard place right now.
  25. 1. Pictures of the account stats: http://gyazo.com/20a...104636f3e2c21c8 2. Pictures of the login details: http://gyazo.com/d78...e7781d8b788d6cb 3. Pictures of the total wealth (if there is any): http://gyazo.com/014...afbcb17f81c3800 Bank is also full up junk. worth a little bit, lots of skilling materials. 4. Pictures of the quests completed: ill post a picture of the top, then list the rest. http://gyazo.com/e8b...d34a62e771c6b4a Cooks's Assistant, Dragon Slayer, Ernest The Chicken, Goblin Diplomacy, Imp Catcher, The Knight's Sword, Romeo And Juliet, Rune Mysteries, Shield of Arrav, Druidic Ritual, Dwarf Cannon, The Fremennik Trials, The Grand Tree, Lost City, Merlin's Crystal, Monkey Madness, Priest in Peril, Sheep Herder, Tree Gnome Village, Waterfall Quest. 5. The price you will be starting bids at: I have a Buy it now price lol. 6. The A/W (Auto-win) for your account: $70. or 30m. 7. The methods of payment you are accepting: Paypal (If you are trusted) or RSGP. 8. Your trading conditions: I'll go first if you are trusted. If not, we will use a middleman. 9. Account status: http://gyazo.com/47bad54f8e7c526082f943288032d450 10. Original/previous owners AND Original Email Address: I cannot give the original email of the account as it is my main one used for everything, but when you buy the account, i will transfer all of the runescape information to your email, and unlink the mobile phone and everything, we can get a mm to make sure it isn't recovorable.
  26. 1 point
    Dear OSBot community, It was a pleasure working for you all in the past months. I cannot explain how much it burdens me to make this thread, but sadly due to personal complications I am obligated to do so. Being apart of the Staff Team and the community has taught me a lot and has allowed for exponential self growth. Even though I am leaving, @Maldesto is an excellent leader and you all will be in good hands in unison with the current Staff Team. You all have molded me to the person I am now, and I am forever thankful for this wonderful experience. This is by no means a farewell, and I will try my best to keep in contact with you all. Sincerely, @Smart
  27. Bans will be high due to the F2P trial. They are monitoring all accounts
  28. ROFL at the one, I wanna be in these but I'm shit at everything
  29. Account status http://i58.tinypic.com/amuuqg.png EOC login http://i61.tinypic.com/2803gh.png EOC stats http://i61.tinypic.com/23sj0qp.png EOC bank http://i60.tinypic.com/muiohf.png EOC loyalty http://i60.tinypic.com/2ic8pqg.png EOC Quests http://i57.tinypic.com/2lxtkba.png OSlogin http://i58.tinypic.com/51eoat.png OS stats http://i59.tinypic.com/xmrgqa.png OSbank1 http://i57.tinypic.com/2r3vw50.png OSbank2 http://i57.tinypic.com/21otzz5.png OSbank3 http://i58.tinypic.com/34ovfbo.png OSbank4 http://i61.tinypic.com/nysb2v.png OSbank5 http://i58.tinypic.com/2qum4k1.png Completed OSRS quests: Cook's Assistant Ernest the Chicken The REstless Ghost Romeo & Juliet Rune Mysteries Sheep shearer Witch's Potion Gertrude's Cat Lost City Waterfall Quest Starting price: 5M Auto-Win: 40M Payment method: RS07 GP / PayPal(Only if trusted) Payment:If you're trusted I will go first. Original E-mail: You'll get it when you bought the account Original Owner: Me
  30. Amazing read. I think mouse movements are a crucial part of Jagex's bot watch. Since all scripts use the same API methods with the same mouse controller, all bots would have the same profile. If, according to your first quote, it would be possible for Jagex to compare profiles of different players, it would explain why Jagex is so good at detecting bots nowadays. What I think that needs to be implemented in OSBot: let all accounts have different bot profiles (different mouse speed, accuracy and mouse movement patterns). What also would be a nice addition, is that each bot could change its behavior at random times. For example, sometimes your concentration is good, at other moments you like to afk a lot or you are tired (thereby decreasing your mouse speed and accuracy). I thought about writing my own mouse controller too, but I failed (seeing your code, I can imagine why). So an amazing thanks for these snippets. I personally had the idea of recording my own mouse movements (say 300+ different paths). Then every time the bot moves the mouse, a random path is picked based on the distance that needs to be covered. Of course you will need to rotate and scale this path, but that's not a problem. Add some extra randomization and you would have amazingly realistic and undetectable mouse movements.
  31. That isn't our choice, most of the scripters were against the release and work on osbot 2 and wanted to keep osbot 1 as the main client. Now we are forced to do alot of work (porting,scripting) without any return and the customers will have to pay again. Don't bash on the scripters, in the end this whole thing is coming from the stuborness of some developers that wanted that osbot 2 really became a thing (if the same time that was invested in osbot 2 was invested in osbot 1 the client would be equally good)
  32. Nice! You guys can also take a look at: http://www.isot.ece.uvic.ca/publications/behavioral-biometricsx/IJPRAI2203_P461.pdf http://en.wikipedia.org/wiki/Fitts%27s_law#Derivation http://cherokeeengine.svn.sourceforge.net/viewvc/cherokeeengine/src/com/cherokee/event/mouse/
  33. 1 point
    i smirked at that tho
  34. I made a Puush Dumper a few months ago. Multi threaded and everything. http://superscriptfactory.com/downloads/PuushDumper1_0.jar
  35. For people who don't know, Rs07 has a detection system they announced just a month ago. I dont remember if it's still up on the homepage, but a friend of mine saw the post and told me about it. This is what i got in my message center regarding the ban. I got banned 1 time before this as well, for "macroing minor ban" which lasted for 2 weeks. and now this ban for 2 days.
  36. if you care about the account at all, then dont bot on it. Your ip is now flagged so your next time botting might be your last.
  37. You can still use custom mouse. bot.getMouseEventHandler().generateBotMouseEvent(503,System.currentTimeMillis(),0,aPath.x,aPath.y,0,false,0,true);
  38. 1 point
    @Ericthecmh has just recently been promoted so I'm sure he must have a lot on his plate for the time being, this section is for scripts which haven't been updated for more than 7-14 days and those scripts from inactive scripters. Eric is very much still active so please allow for some more time, he does have a busy schedule. Thank you for your patience.
  39. 1 point
    People say thats my issue ;/
  40. Not be an ass, But this is realy realy basic after effects No offence dex, i like u alot. But OT, its nice but not worth 80$ Sorry
  41. This. Script writers are dissatisfied because of the lack of strong financial incentives (the ability to resell a ported OSB1 script as a new product would have been beneficial to everyone including the customer, if you want me to expand on this I gladly will). On top of the financial dissatisfaction they would get penalized by you because they refuse to upgrade all their products for free. Customers will be dissatisfied because their scripts won't be working anymore even though you promised them they would.(most premium script writers won't update their scripts if there's no financial incentive, you can threaten us with demotions as much as you want, low move by the way) I'm not saying none of the script writers will update their scripts (matter of fact I ported 2 out of my 3 scripts already), but the ones getting one sale per week because they reached 99% of their target market just won't bother. Your strategy is disappointing, I wish you would have discussed this with the community and script writers. There were numerous threads full of suggestions and questions in the script dev forum yet you chose to ignore those, I can't say I'm surprised about that. I'm absolutely grateful and have a lot of respect for your work on the bot but the lack of communication and proper business management is seriously starting to irritate me. Respectfully False: (quote by Laz)
  42. Nice read. I remember the windmouse created by Ben for SRL wich was quite amazing. I have already seen a similar code in pascal but I am gonna take a closer look at your new implentation that I bet will be teh shit. It was about time that someone started discussing about the obvious problem that the actual OSbot mouse represents. Most interesting post I have read on this forum since I joined.
  43. 1 point
    Heyo, I've decided to finally post my farewell, now that things have calmed down. There's not much to say, I also don't really feel like posting my side of the story, there's just one thing I want to share and that is that I wasn't (and still am not) part of the other bot's administrative team, however, I did got asked to develop their new SDN and I did accept that job. So no, I wasn't a 'spy' as many of you thought, it was an one-time job. Anyways, enough of that, I'm not here for forgiveness (nor to safe my alias) but to post my farewell. If there's one thing that I could change, then I would have resigned before all of this could even happen. Why? I realized, a few weeks after my promotion to administrator, that I couldn't hold the job for long. The motivation and drive I used to have last summer for community management was (and still is) gone. That's why most of you only saw me doing the SDN upload requests, I barely did anything else. I felt bad for @Maldesto, my position was meant to take some load of his shoulders, and I don't think that he could ever feel that in the time that I was an administrator again. I noticed this myself as well. That's why I started to guide the person some more that did (and still does) deserve my position, @Smart. I teached him how the OSBot SDN works, and I would help him with any ACP problems. I notified Smart that I was going to resign soon and that I wanted him to replace me, about a few days before I got demoted (several people can confirm this). My demote ruined his chances, the developers are more strict with @Maldesto now and they don't want him to promote a second admin on this moment. So yep, if I could change one thing then I would have resigned earlier so that you guys could have probably had @Smart as second community manager now on this very moment. Anyways, enough of that as well. Now my actual farewell. I've decided to really move on with life, I've had a great time here, especially last summer. OSBot was a really big part of my life and I'm thankful that I was ever given the opertunity to join the OSBot staff team, it was a great experience and it has really changed me as a person. I've had alot of fun here and I've met alot of great people. It's time for me to let this all go, I've spent alot of time on the computer past years, especially in 2013. It's time to focus on my IRL and to follow my dreams. My biggest dream ever is to be a pilot and I'm really going to spent most of my time now to study and follow this dream. I'm currently following computer science and I'm going to do Flight Training right after my IT graduation. It's a really hard training and a really expensive study so I have a long path ahead. But I'm going to do this ;D I wish you all the best of luck in life and in the Runescape botting scene. Thanks for reading and farewell! Special thanks to: for ever giving me a chance, I would have missed this whole experience without you. @Maldesto for giving me another shot, and I'm really sorry that I've damaged your trust. I wish you the best of luck with OSBot. @Smart simply because I love him @Catastrophe for the great times, and I will definately check your facebook every now and then because you really make me laugh. @Anne also for the great time here at OSBot, and I will definately stay in touch with you @Mikasa for still being loyal and awesome @Alek I know you hate me, but stay awesome man, OSBot needs you The rest of the staff team, goodluck guys & alot of other people, I can really make a list of ~100 people but I'll keep it at this for now. Goodbye, Raflesia.

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.