Jump to content

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.
    6 points
  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.
    6 points
  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 points
  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.
    3 points
  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.
    3 points
  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.
    2 points
  7. skills.getStatic(Skill.ATTACK); skills.getDynamic(Skill.ATTACK); sorry dynamic changes and static stays the same
    2 points
  8. 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
    2 points
  9. 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.
    2 points
  10. 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.
    2 points
  11. 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.
    2 points
  12. 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.
    2 points
  13. Disregard what I posted, they just hit me with a hot two day ban l0l.
    2 points
  14. http://thebest404pageever.com/swf/house.swf http://thebest404pageever.com/swf/house.swf
    2 points
  15. Congratulations to @Freak for winning this week's SOTW competition!
    2 points
  16. Typical reaction by a teenager denying their love towards their crush.
    2 points
  17. 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.
    2 points
  18. 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!
    2 points
  19. Give the poor fella CBA, would ya? Supporters list: @RoomScape @Acerd @Epsilon @Timekeeper @Eliot @Trustmybet @puzzle @Smart @Target @Tyler @roomscape jr @Trinity @vl4d4s @Probemas @G4ng @DeAndre @Scotty @Th3 @Lloyd @BawsZ @Hoodie Allen @Novak @LeKhane @Pink Clay @Master Awesome @lolmanden @Quaz @Sex @led @Alex @Realist @YinZ
    1 point
  20. 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.
    1 point
  21. //current level skills.getDynamic(Skill.ATTACK); //real level skills.getStatic(Skill.ATTACK); //xp skills.getExperience(Skill.ATTACK);
    1 point
  22. 1 point
  23. Well the problem seen here is pretty much un-fixable considering the developers will do what they want. You see, there are a few things working in their favor, and they are in place specifically to benefit the company itself while overall damaging the customers - 1. Developers make a monthly payment for scriptwriters in OSBot 2 -> They make more money on a consistent basis, and so do the scriptwriters 2. Developers make scriptwriters port over scripts, and make OSBot 1 scripts useless -> They make more money from re-purchases Results - 1. Developers make more money than before. 2. Scriptwriters make more money after they invest time into porting over scripts. 3. Customers within OSBot suffer from losing a so called - "life-time" subscription due to the same company creating an alternate tool. Note: Please keep in mind I am just stating what is happening, and am in no way trying to start debates/arguments. Edit: Fixed some grammatical mistakes.
    1 point
  24. you really hate people doing that so much that you take the effort to make a thread?
    1 point
  25. IMHO,mouse movements are not cause of bans. The cause o ban are hot spots where you click. If you ban 100 bots you and you have recorded their mouse hot spots, you can easily ban another 100 comparing them. The thing is to make mouse not herping derping around one point.
    1 point
  26. Stop leech, learn something all your topics are shit like this one... Member since ocotber 2013 and you only have 8 posts....members like you should don't have access to the bot. If in this topic you sayd your paypal account is closed how can Osbot charge you for vip???
    1 point
  27. Torrent download lol
    1 point
  28. You must not have had a fun childhood. Quick, go unlike some random fag's post and come back to like mine!
    1 point
  29. i botted like 100 hours at chocolate dust w/ no bans script is like 2$ @ no requirements besides like 10k gp/h or osmething like that.. i always just put 200k on the accounts when i traded the chocolate off of them
    1 point
  30. james: got banned from chatbox
    1 point
  31. http://thebest404pageever.com/swf/Super_Spice_Bros_2.swf
    1 point
  32. Just went from 30-70 range today, using a range guild script. Haven't had any issues as of late.
    1 point
  33. http://prntscr.com/3otiib shows me this i got in, close this please
    1 point
  34. I am the graphics god, he's at best my apprentice. Especially when it comes to animation, lols.
    1 point
  35. The OP was poorly worded, so I don't think anyone besides the developers even know what's going on, but in overall it seems that were going to have to rewrite our scripts for free. Even if they just get it for 30 days that's still a free month of access to our scripts and only like 5% of buyers actually renew a script. Don't quote me if the topic doesn't even concern you. Just manage the forum big boy.
    1 point
  36. 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.
    1 point
×
×
  • Create New...