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 02/16/18 in all areas

  1. ๐Ÿ‘‘CzarScripts #1 Bots ๐Ÿ‘‘ ๐Ÿ‘‘ LATEST BOTS ๐Ÿ‘‘ If you want a trial - just post below with the script name, you can choose multiple too. ๐Ÿ‘‘ Requirements ๐Ÿ‘‘ Hit 'like' ๐Ÿ‘ on this thread
  2. Aye. Beat my old record by a single minute lol. Mith gloves from tut island in 3h 56m. This run would have been 3h 45m most likely but I severely fucked up 3 times during Pirate Pete subquest (forgetting kelp costing me like 3-4 minutes) and during Fishing Contest (not finishing Pirate Pete so couldnt start quest, did this 2 times in a row and then not having fishing pass with me, costing me like 5-6 minutes)
  3. Ability to set custom Magic and Ranged armour sets โœ“ No limits on Kills per trip โœ“ Using a mix of user inputs and built-in logic, the script will determine if you have enough supplies for another kill without banking. Options to decide how much food youโ€™re like to take into the next fight as a minimum. Customisable Stop Conditions Stop after 'x' kills Stop after 'x' profit Stop after 'x' runtime Stop after 'x' consecutive deaths Efficient Zulrah Fight Executor โœ“ Knows what have, is and will happen Longrange mode, gain defence XP passively with no time loss โœ“ Multiple Travel Routines Zul-Andra teleport scrolls VIA Clan Wars โœ“ Zul-Andra Teleports VIA PoH โœ“ Charter Travel โœ“ Caterby charter [via Camelot teleports] Fairy Rings โœ“ Ability to select staff to use or not use one at all for fairy rings โœ“ Summer Pie Support (72+ Agility recommended) โœ“ Fairy ring via Slayer Ring โœ“ Fairy ring via House Teleport โœ“ Ornate pool support โœ“ Jewellery box Support โœ“ Mounted Glory Support โœ“ Construction Cape Support โœ“ Ability to select Magic Only โœ“ Changes Rotations and Phases for the best possible fight experience. No need to quest for Avaโ€™s or Level range. Swaps prayers & equipment efficiently โœ“ Option to use quick switch mode, removes mouse travel time for even faster switching Prayer Flicking on Jad Phases โœ“ Supports Raids Prayers โœ“ 55 Prayer โœ“ 74 Prayer โœ“ 77 Prayer โœ“ Options to Dynamically pray against Snakelings when Zulrah is not focused on player. โœ“ Calculates: Total loot value โœ“ Total cost of supplies used โœ“ Profit after costs โœ“ Ability to sell all your loot when you run out of supplies โœ“ Ability to top up your supplies if you run out with auto-exchange โœ“ Death-walking โœ“ Safe death boss Rechargeable item support Trident of Seas โœ“ Trident of Swamp โœ“ Blowpipe โœ“ Dynamically detects darts used (Must start with darts inside the blowpipe for it to work!) Serpentine Helm โœ“ Ring of suffering โœ“ Barrows Repairing โœ“ Using Lumbridge teleports or the Home teleport, the script will withdraw coins, travel to Bob and repair your armour then continue to run. Potion Decanting โœ“ Efficiently decants all types of potions allowing FruityZulrah to run for longer. Inventory Organising โœ“ Organises your inventory to minimise mouse movement, increasing time spent elsewhere. Combo eating Karambwams โœ“ Will combo eat karambwams to help prevent death from Zulrah and Snakelings stacks Supports blowpipe special attack โœ“ Uses the Blowpipe special attack to help replenish HP Multiple stat boosts supported Prayer โœ“ Super Restore โœ“ Magic โœ“ Ranging โœ“ Bastion โœ“ Stamina โœ“ Anti-venom+ โœ“ Imbued Heart โœ“ Supports Lunars โ€˜Cure Meโ€™ spell to cure Venom โœ“ Requires: 1 2 2 Ability to use rune pouch Level 71 Magic Lunars Quest Ideal for Ironman accounts with no access to anti-venom+ Supports Lunars Vengeance spell โœ“ Requires: 2 4 10 Perfectly times vengeance casts to Magic Phase ranged attacks for best results. Ability to use rune pouch Level 94 Magic World hopping support โœ“ Options to hop world between x and x minutes. will randomly select a time every hop. Ability to skip rotations by Hopping worlds Ability to decide on your own custom world list or just to hop to any P2P world Grand Exchange Add-on โœ“ Add-on script for free Save/load buy/sell presets Ability to dump all zulrah loot in 2 clicks Command Line Support โœ“ Start the script on multiple accounts with a single click Script ID - 903 Command: -script "903:profile=Test hours_limit=10 kills_limit=5 deaths_limit=5 profit_limit=1m" profile = saved profile name, if you've been using CLI to run the script, this will need to be updated to suit. hours_limit = Complete after 'x' run hours. kills_limit = Complete after 'x' zulrah kills deaths_limit = Complete after 'x' deaths. profit_limit = Complete after 'x' accumulated profit Pro-active calculations โœ“ Calculates next mouse position for next action whilst first action is being performed Asynchronous actions โœ“ Can perform multiple tasks at once saving time Banks Pet drops โœ“ Loot table โœ“ http://fruityscripts.com/zulrah/loot/ Displays total loot as well as a live feed of drops Hiscores โœ“ http://fruityscripts.com/zulrah/hiscores/ Compare and compete against other users Dynamic Signatures โœ“ Show off your gains with FruityZulrah url: http://fruityscripts.com/zulrah/signature/signature.php?username={USERNAME} Replace {USERNAME} with your username http://fruityscripts.com/zulrah/signature/signature.php Notifications Get Notifications for: Valuable drops โœ“ Deaths โœ“ On Exit โœ“ Timely Data dumps (GP, GP/HR, Kills, Kills/HR, Deaths, Runtime) โœ“ Types of Notifications Email โœ“ Discord ~ Desktop โœ“ โœ“ Implemented into the script ~ Work in progress View a collection of Screenshots posted by FruityZulrah users showing their progress with the script. Watch a collection of FruityZulrah videos below If you have a video you'd like to be added to the Playlist, send me a pm with a link. Videos must of course include the FruityZulrah script. If you wish to purchase FruityZulrah VIA PayPal, please follow the store link below: If you'd like to purchase FruityZulrah using OSRS GP, SEND ME A PM and i can give you my current $$:GP Rates! Discord Community: https://discord.gg/WzXRk2bWTV Trial bot has been implemented (100 post count required if you're not VIP/Sponsor!) @fruityscripts on Discord
  4. I suggest trying to recover it and ruin the account and suicide bot it if he gave you any information or report the username to mod weath.
  5. waste of time 2 add
  6. NEW! supports new south + east shortcuts, new hopper (upstairs), and mouse invokes!!! (just like runelite!) 'the intelligent choice' By Czar 34-99 Mining on video!! Agility Shortcut Setup Window Preview 70 hours run time https://i.imgur.com/wiF6VPO.png
  7. This is a simple afker script. The script clicks between inventory and skill tabs at random intervals to prevent logout. The intervals are 3-4,5 minutes. Put the jar file to C:\Users\USERNAME\OSBot\Scripts and the script should appear on your script list in the client. Download: StyxAfker.jar v1.01 Source: Credits: Thanks to Apaec for the beginners guide on OSBot scripting: A Beginners Guide to Writing OSBot Scripts (where to get started!) by Apaec Thanks to Explv for the paint tutorial: Explv's Dank Paint Tutorial changelog:
  8. Title. Not going first unless I deem you trusted enough, includes doing paypal. Leave your offer or PM me, no I won't add your Skype. Note: selling all of it in one go.
  9. 1 point
    I can do โ‚ฌ.85/m via iDeal(ING Bank). Skype = Flax.TB edit: sold him the goodies! ty mate
  10. 1 point
    Buying 50M, verified paypal, skrill or ideal/bank transfer I have 200+ offsite vouches but will go first if your trusted here. add me on skype if interested: Johan95PB
  11. Script is not working. This is what i got from logger: [INFO][Bot #1][02/16 09:48:19 PM]: Loaded 2 built-in random solvers! [INFO][Bot #1][02/16 09:48:21 PM]: Definitions loaded: 22288 [INFO][Bot #1][02/16 09:48:21 PM]: 23 APIs loaded [INFO][Bot #1][02/16 09:48:21 PM]: "force_web" changed to "1" [INFO][Bot #1][02/16 09:48:21 PM]: "force_path" changed to "1" [INFO][Bot #1][02/16 09:48:23 PM]: Banks added: [43] [INFO][Bot #1][02/16 09:48:24 PM]: Floors added: [13] [INFO][Bot #1][02/16 09:48:24 PM]: Scenery added: [2] [INFO][Bot #1][02/16 09:48:24 PM]: Entrances added: [48] [INFO][Bot #1][02/16 09:48:24 PM]: Carpet rides added: [4] [INFO][Bot #1][02/16 09:48:24 PM]: Ships added: [5] [INFO][Bot #1][02/16 09:48:24 PM]: Agility shortcuts added: [10] [INFO][Bot #1][02/16 09:48:24 PM]: Fairy teleport added: [38] [INFO][Bot #1][02/16 09:48:24 PM]: Teleport items added: [36] [INFO][Bot #1][02/16 09:48:25 PM]: Teleport spells added: [12] [INFO][Bot #1][02/16 09:48:25 PM]: Stronghold added [INFO][Bot #1][02/16 09:48:25 PM]: NPC teleports added: [1] [INFO][Bot #1][02/16 09:48:25 PM]: Added al-kharid gate (free) [INFO][Bot #1][02/16 09:48:25 PM]: Added 11500 nodes to graph in [2410ms]. [ERROR][Bot #1][02/16 09:48:25 PM]: Error in script onStart(): Perfect Woodcutting java.lang.NullPointerException at java.util.concurrent.ConcurrentHashMap.putVal(Unknown Source) at java.util.concurrent.ConcurrentHashMap.put(Unknown Source) at java.util.Collections$SetFromMap.add(Unknown Source) at org.osbot.rs07.Bot.addMouseListener(un:434) at b.a.a.nuL.onStart(ph:186) at org.osbot.rs07.event.ScriptExecutor.IiiiiiiiIiIi(hj:160) at org.osbot.rs07.event.ScriptExecutor.start(hj:195) at org.osbot.cB.run(kf:112) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source) [INFO][Bot #1][02/16 09:48:25 PM]: Terminating script Perfect Woodcutting... [ERROR][Bot #1][02/16 09:48:25 PM]: Error in script onExit(): Perfect Woodcutting java.lang.NullPointerException at java.util.concurrent.ConcurrentHashMap.replaceNode(Unknown Source) at java.util.concurrent.ConcurrentHashMap.remove(Unknown Source) at java.util.Collections$SetFromMap.remove(Unknown Source) at org.osbot.rs07.Bot.removeMouseListener(un:467) at b.a.a.nuL.onExit(ph:694) at org.osbot.rs07.event.ScriptExecutor.IiiiiiiiIiIi(hj:34) at org.osbot.rs07.event.ScriptExecutor.stop(hj:246) at org.osbot.rs07.event.ScriptExecutor.stop(hj:116) at org.osbot.rs07.event.ScriptExecutor.start(hj:28) at org.osbot.cB.run(kf:112) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source) [INFO][Bot #1][02/16 09:48:25 PM]: Script Perfect Woodcutting has exited!
  12. Thanks for the reply, your comment really makes me want to fix this free script immediately as it's such an easy bug to fix, i've got nothing else to do in my life and giving free scripts out to people is my top priority edit: I'm getting around to it... (:
  13. Their magic defence is so shitty that it doesn't matter what you wear, it'll be like using a flame thrower with your Charizard on a little Bulbasaur.
  14. put full ancestral on it and a twisted bow and go make that 3m/H
  15. Just a heads up, if you're going to use Fruitys zulrah script then stealth injection is the only smooth client to run it on.
  16. hmm I'll make changes to the prices asap. ^^ Activated all trials gl guys
  17. A script that switches weapons/gear for you, for noobs who can't tribrid!
  18. Gz! Saw your reddit post
  19. Try this link: https://support.runescape.com/hc/en-gb/articles/115002238729 - I can't remember where to exactly find it on www.runescape.com but it's there somewhere. I've got a few accounts unbanned using it.
  20. Nvm

    1 point
  21. Glad this could be resolved, closing this now.
  22. looks like a snowflake, not worried in the slightest
  23. it's working, i dunno what everyone's problem is
  24. Don't let alek see this post
  25. Only 18m mining xp? What a fucking noob.
  26. What i think is abit unfair is, we the people who pay for the service are left with out and the only working instance is the one for the people who dont pay for vip. shouldn't the people who contribute be there priority? instead the people who just leach the free use are sweet to keep botting. and this isn't the first time osbot has been down to mirror mode and stealth is still working. why not make the people who are paying money to use something the priority? osbot is great, but i pay for premium on other clients and there is never this issue, there priority is the people who contribute... maybe im wrong but if i was running a shop or a company of any kind id be looking after the people buying stuff not the one out side begging for more free shit.
  27. Thanks for the report, if Viston ever wishes to stop creating ban evader accounts and actually return he'll need to refund you the full cost of the account. Sorry for your loss.
  28. Hello sir, could I try this out please?
  29. From what i heard this is a private script play normal on home ip for some time doing quest and so on Then bot on proxies there are alot of people who can sell you some proxies in this community. Hope this helps:)
  30. Most definitely is asking for a ban, I don't have to explain myself if you know you know. And thanks for the link.
  31. You should ask @Eagle Scripts or others who make private scripts, there is a whole section on the forum dedicated to private scripting.
  32. I don't really call that advanced. It's also not smart to not have a check to see if you're trading the right player. My muling system will send a request from the bot to one of the mules, the mule will log in and return with his username, both will check if they are trading the right player. This is the only right way to handle a muling system.
  33. Loving the script so far but for some reason, the gp/h for the paint isn't being accurate. For example, the profit per hour usually says I'm making around 2k/h when each full inventory is around 9k.
  34. 1 point
    petition to implement antiban
  35. Hi can i have trial. loved your other scripts
  36. I'll take a trial, looking for an AIO fishing script.
  37. Just purchased your fishing script, would love a trial for this script before I buy though! Love your work.
  38. Hey may i try a trial before i purchase?
  39. Hey im new on the osbot community i want to try trial motherload mine and will give you a feedback
  40. 1 point
    import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.graphics.Point; Your problem is that OSBot doesn't come packaged with the SWT ("org.eclipse.swt") library. Your solutions are either: Ask a @Zach or @Alek to see if they can add the library into OSBot. This is unlikely due to it being more overhead for something that's likely to be very niche. Find the library's source code and include that into your script. Use the Swing ("javax.swing") library, because that is packaged with Java by default. You can look into JOptionPane to achieve what it is you're after, but in quite literally one line of code. I'd chose no.3 just because it's the easiest and doesn't add any additional overhead. You can literally just do: String[] trees = { "normal", "oak", "willow" }; Object input = JOptionPane.showInputDialog(bot.getCanvas(), "Select a tree", "Woodcutter", JOptionPane.QUESTION_MESSAGE, null, trees, trees[0]); String tree = null; if (input != null) { tree = input.toString(); }
  41. Yeah not in lumbridge no quests started sounds good, I know this is a free script and I don't understand how it's written, but if randomisation of quest order could be implemented would be perfect. Although I already use this script alot and despite a few of it's issues which you've said you're working on (the mugger one and coffin one still an issue sometimes) it's free and is incredibly useful even with just slight manual interaction and script resets sometimes. Goodluck on fixing the issues and again, thanks for the script. Edit again - I have found the issue I believe, the door works if script is ran from beginning, if it's paused and it can't open a door (which as people are buying the tuts that start in varrock, I assume they are manually teleporting to lumby and then unpausing, it gets stuck in a loop spamming walking in logger and will stay stuck at that tile, restarting script and it's fine. Hope I was helpful and not just talking nonsense Sorry for any grammar or if I don't make sense I'm what one may call crossfaded fucking millionth edit, i lied ignore everything I say maybe idk why its getting stuck, stuck at coffin again too, I'll stop wasting everyones time with my posts lol. Mad Caspar v2
  42. Because Jagex is going to release trading posts in the near future, I decided to dump the source code form my zybez mercher. I used java because I wanted to implement it into a merching script. //Main.java package aiomercher.util.zybez; import aiomercher.util.zybez.stages.Login; import aiomercher.util.zybez.stages.Offer; import aiomercher.util.zybez.utils.ZybezOffer; /** * Created by Xerion on 19-8-2014. */ public class Main { static Login login; public static void main(String args[]) throws Exception{ long time = System.currentTimeMillis(); login = new Login("***","****"); System.out.println("Logged-in in " + (System.currentTimeMillis() - time + 1) + " ms"); //You can add extra stuff here. For example adding an offer. } } Stages//Login.java package aiomercher.util.zybez.stages; import aiomercher.util.zybez.utils.Requests; import aiomercher.util.zybez.utils.Character; import aiomercher.util.zybez.utils.ZybezOffer; import aiomercher.util.zybez.utils.OfferType; import java.net.*; import java.util.LinkedList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * Created by Xerion on 19-8-2014. */ public class Login { public static boolean debug = false; private String username,password; /*Zybez Cookies*/ private String __cfduid,z_session_id,network_cookie,z_rteStatus,z_member_id,z_pass_hash; public Login(String Username, String Password){ try { /*Set Cookie manager*/ CookieManager manager = new CookieManager(); manager.setCookiePolicy(CookiePolicy.ACCEPT_ALL); CookieHandler.setDefault(manager); /*Login - Change this to post request for safety*/ Requests.sendGet("http://forums.zybez.net/index.php?app=curseauth&module=global&section=login&do=process?auth_key=" + getAuth() + "&rememberMe=1&ips_username=" + URLEncoder.encode(Username, "UTF-8") + "&ips_password=" + URLEncoder.encode(Password, "UTF-8") + "&submit=Login"); //Requests.sendPost("http://forums.zybez.net/index.php?app=curseauth&module=global&section=login&do=process","auth_key=" + getAuth() +"&rememberMe=1&ips_username=" + URLEncoder.encode(username, "UTF-8") + "&ips_password=" + URLEncoder.encode(password, "UTF-8") + "&submit=Login"); /*Fake this cookie*/ this.z_rteStatus = "rte"; /*Set all the variables*/ CookieStore cookieJar = manager.getCookieStore(); List<HttpCookie> cookies = cookieJar.getCookies(); for (HttpCookie cookie: cookies) { if (cookie.getDomain().contains((".zybez.net"))) { if(cookie.getName().equals("__cfduid")){ __cfduid = cookie.getValue(); }else if(cookie.getName().equals("z_session_id")){ z_session_id = cookie.getValue(); }else if(cookie.getName().equals("network_cookie")){ network_cookie = cookie.getValue(); }else if(cookie.getName().equals("z_member_id")) { z_member_id = cookie.getValue(); }else if(cookie.getName().equals("z_pass_hash")){ z_pass_hash = cookie.getValue(); }else{ if(debug) System.out.println("Unknown cookie : " + cookie.getName() + "\t" + cookie.getDomain()); } }else{ if(debug) System.out.println("Unknown website : " + cookie.getName() + "\t" + cookie.getDomain()); } } }catch (Exception ex){ ex.printStackTrace(); } if(z_member_id == null || z_pass_hash == null){ throw new RuntimeException("Failed to login!"); } } private String getAuth() throws Exception{ String pattern = "<input type='hidden' name='auth_key' value='"; String response = Requests.sendGet("http://forums.zybez.net/index.php?app=curseauth&module=global&section=login"); int beginIndex = response.indexOf(pattern) + pattern.length(); int endIndex = response.indexOf("' />", beginIndex); return response.substring(beginIndex, endIndex); } public String getCookie(){ StringBuilder sb = new StringBuilder(); sb.append("__cfduid=" + __cfduid + "; "); sb.append("network_cookie=" + network_cookie + "; "); sb.append("z_rteStatus=" + z_rteStatus + "; "); sb.append("z_member_id=" + z_member_id + "; "); sb.append("z_pass_hash=" + z_pass_hash + "; "); sb.append("z_session_id" + z_session_id + "; "); return sb.toString(); } public Character[] getCharacters(){ List<Character> character = new LinkedList<>(); try { String response = Requests.sendGet("http://forums.zybez.net/runescape-2007-prices/274-water-rune", getCookie()); Matcher matcher = Pattern.compile("<option value=\"(.+?)\">(.+?)</option>$",Pattern.MULTILINE).matcher(response); while (matcher.find()) { if(debug) System.out.println("Found character : " + matcher.group(1) + " " + matcher.group(2)); character.add(new Character(Integer.parseInt(matcher.group(1)),matcher.group(2))); } return character.toArray(new Character[character.size()]); }catch (Exception e){ e.printStackTrace(); } return null; } public ZybezOffer[] getCurrentOffers(){ List<ZybezOffer> zybezOffers = new LinkedList<>(); try { String response = Requests.sendGet("http://forums.zybez.net/runescape-2007-prices", getCookie()); int beginIndex = response.indexOf("My Offers"); int endIndex = response.indexOf("</table>", beginIndex); //System.out.println(response.substring(beginIndex,endIndex)); Matcher matcher = Pattern.compile("<tr>\\s*<td class=\"nowrap\"><h3><a href=\"(.*?)\">(.*?)<.*?$\\s*.*\\s*.*title=\"(.*?)\" class.*?\\s*.*?>(.*?)<\\/.*$\\s*(.*?) for (.*?) GP\\s*.*\\s*.*\\s*.*?title=\"(.*?)\">(.*?)<\\/span><\\/td>\\s*.*?\">(.*?) GP<\\/td>\\s*<td>\\s*<a href=\"(.*?)\"><img src=\"(.*?)\" title=\"Delete\" \\/><\\/a>\\s*<a href=\"(.*?)\"><img src=\"(.*?)\" title=\"Mark this offer complete\" \\/><\\/a>\\s*<\\/td>\\s*<\\/tr>",Pattern.MULTILINE).matcher(response.substring(beginIndex,endIndex)); while (matcher.find()) { if(debug) System.out.println("Found offer : " + matcher.group(1) + " " + matcher.group(2) + " " + matcher.group(3) + " for " + matcher.group(4) + "GP\t" + matcher.group(5) + "\t" + matcher.group(6)); zybezOffers.add(new ZybezOffer(matcher.group(2),matcher.group(3),matcher.group(1),matcher.group(3).equals("Selling") ? OfferType.SELL : OfferType.BUY,Integer.parseInt(matcher.group(5).replaceAll(",", "")),Integer.parseInt(matcher.group(6).replaceAll(",", "")),matcher.group(7),1,matcher.group(8),matcher.group(12))); } return zybezOffers.toArray(new ZybezOffer[zybezOffers.size()]); }catch (Exception e){ e.printStackTrace(); } return null; } public ZybezOffer[] getCompleteOffers(){ List<ZybezOffer> zybezOffers = new LinkedList<>(); try { String response = Requests.sendGet("http://forums.zybez.net/runescape-2007-prices", getCookie()); int beginIndex = response.indexOf("My Offers"); int endIndex = response.indexOf("</table>", beginIndex); Matcher matcher = Pattern.compile("<tr class=\"done\">\\s*<td class=\\\"nowrap\\\"><h3><a href=\"(.*?)\">(.*?)<.*?$\\s*.*\\s*.*title=\"(.*?)\" class.*?\\s*.*?>(.*?)<\\/.*$\\s*(.*?) for (.*?) GP\\s*.*\\s*.*\\s*.*?title=\\\"(.*?)\\\">(.*?)<\\/span><\\/td>\\s*.*?\\\">(.*?) GP<\\/td>\\s*<td>\\s*<a href=\\\"(.*?)\\\"><img src=\\\"(.*?)\\\" title=\\\"Delete\\\" \\/><\\/a>\\s*<a href=\\\"(.*?)\\\"><img src=\\\"(.*?)\\\" title=\\\"Mark this offer complete\\\" \\/><\\/a>\\s*<\\/td>\\s*<\\/tr>",Pattern.MULTILINE).matcher(response.substring(beginIndex,endIndex)); while (matcher.find()) { if(debug) System.out.println("Found offer : " + matcher.group(1) + " " + matcher.group(2) + " " + matcher.group(3) + " for " + matcher.group(4) + "GP\t" + matcher.group(5) + "\t" + matcher.group(6)); zybezOffers.add(new ZybezOffer(matcher.group(2),matcher.group(3),matcher.group(1),matcher.group(3).equals("Selling") ? OfferType.SELL : OfferType.BUY,Integer.parseInt(matcher.group(5).replaceAll(",", "")),Integer.parseInt(matcher.group(6).replaceAll(",", "")),matcher.group(7),1,matcher.group(10),matcher.group(12))); } return zybezOffers.toArray(new ZybezOffer[zybezOffers.size()]); }catch (Exception e){ e.printStackTrace(); } return null; } } //Stages//Offer.java package aiomercher.util.zybez.stages; import aiomercher.util.zybez.utils.*; import aiomercher.util.zybez.utils.Character; import java.net.URLEncoder; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * Created by Xerion on 19-8-2014. */ public class Offer { Login login; public Offer(Login login){ this.login = login; } /** * Add an offer to Zybez * * @param id Item ID * @param offerType The Offer type (buy or sell) * @param quantity The amount you want to buy/sell * @param price The price you want to buy/sell the item for * @param character The character you want to appear in the offer * @param contactMode The contact mode you want to specify (PM or CC) * @return True if the offer is placed on Zybez */ public boolean createOffer(int id,OfferType offerType,int quantity, int price, Character character, ContactMode contactMode){ return createOffer(getAuth(id),id,offerType.getValue(),quantity,price,character.getId(),contactMode.getValue(),"",login.getCookie()); } /** * Add an offer to Zybez * * @param id Item ID * @param offerType The Offer type (buy or sell) * @param quantity The amount you want to buy/sell * @param price The price you want to buy/sell the item for * @param character The character you want to appear in the offer * @param contactMode The contact mode you want to specify (PM or CC) * @param notes The Notes you want to add in the offer * @return True if the offer is placed on Zybez */ public boolean createOffer(int id,OfferType offerType,int quantity, int price, Character character, ContactMode contactMode, String notes){ return createOffer(getAuth(id),id,offerType.getValue(),quantity,price,character.getId(),contactMode.getValue(),notes,login.getCookie()); } private boolean createOffer(String auth, int id, int type, int quantity, int price, int characterId, int contact, String notes, String Cookie){ String url = "http://forums.zybez.net/index.php?app=priceguide&module=public&section=action&do=trade-add"; System.out.println("auth: "+(auth!=null?auth:"null")+", id: "+id+", type: "+type+", price: "+price+", charId: "+characterId+", contact: "+contact+", note: "+notes+", cookie: "+(Cookie!=null?Cookie.toString():"null")); try{ String urlParameters = "auth=" + URLEncoder.encode(auth, "UTF-8") + "&id=" + URLEncoder.encode(Integer.toString(id), "UTF-8") +"&type=" + URLEncoder.encode(Integer.toString(type), "UTF-8") + "&qty=" + URLEncoder.encode(Integer.toString(quantity), "UTF-8") +"&price=" + URLEncoder.encode(Integer.toString(price), "UTF-8") + "&character_id=" + URLEncoder.encode(Integer.toString(characterId), "UTF-8") +"&contact=" + URLEncoder.encode(Integer.toString(contact), "UTF-8")+ "&notes=" + URLEncoder.encode(notes, "UTF-8"); if(Requests.sendGet(url + "?" + urlParameters,Cookie).contains("Your trade has been added to the system.")){ return true; } return false; }catch (Exception ex){ ex.printStackTrace(); return false; } } public String getAuth(int id){ try{ String response = Requests.sendGet(getSite(id),login.getCookie()); Matcher matcher = Pattern.compile("<input type=\"hidden\" name=\"auth\" value=\"(.+?)\" />").matcher(response); if (matcher.find()){ return (matcher.group(1)); }else{ throw new RuntimeException("Failed to find the auth"); } }catch (Exception e){ e.printStackTrace(); } return null; } private String getSite(int id){ try{ String response = Requests.sendGet("http://forums.zybez.net/index.php?app=priceguide&module=public&section=list"); Matcher matcher = Pattern.compile("<a href=\"(http://forums.zybez.net/runescape-2007-prices/" + id + "-.*?)\">").matcher(response); if (matcher.find()){ return matcher.group(1); }else{ throw new RuntimeException("ID is invalid!"); } }catch (Exception e){ e.printStackTrace(); } return null; } /* public static String getItemName(int id){ try{ String response = Requests.sendGet("http://forums.zybez.net/runescape-2007-prices/api/item/" + id); Matcher matcher = Pattern.compile("name\":\"(.+?)\",\"type").matcher(response); if (matcher.find()){ String result = matcher.group(1); //System.out.println(result); //result = result.replace(' ', '-'); //result = result.replace("(", "").replace(")", ""); //System.out.println(result); return result; }else{ throw new RuntimeException("Cannot find item name!"); } }catch (Exception e){ e.printStackTrace(); } return null; } */ public static enum OfferType { BUY(0), SELL(1); private final int value; private OfferType(int value) { this.value = value; } public int getValue() { return value; } } public static enum ContactMode { PM(1), CC(3); private final int value; private ContactMode(int value) { this.value = value; } public int getValue() { return value; } } } //utils/Character.java package aiomercher.util.zybez.utils; /** * Created by Xerion on 19-8-2014. */ public class Character { private int id; private String accountName; /** * * @param id ZYbez account id * @param accountName Runescape account name */ public Character(int id, String accountName){ this.id = id; this.accountName = accountName; } public int getId() { return id; } public String getAccountName() { return accountName; } @Override public String toString(){ return this.accountName; } } //utils//OfferType.java package aiomercher.util.zybez.utils; /** * Created by Xerion on 25-8-2014. */ public enum OfferType { BUY(0), SELL(1); private final int value; private OfferType(int value) { this.value = value; } public int getValue() { return value; } @Override public String toString() { return this.name().substring(0, 1).toUpperCase() + this.name().substring(1).toLowerCase(); } } //utils//Requests.java package aiomercher.util.zybez.utils; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; /** * Created by Xerion on 19-8-2014. */ public class Requests { public static boolean debug = false; public static String USER_AGENT = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36"; public static String sendGet(String targetURL) throws Exception { return sendGet(targetURL,null); } public static String sendGet(String targetURL, String cookie) throws Exception { String url = targetURL; URL obj = new URL(url); HttpURLConnection con = (HttpURLConnection) obj.openConnection(); // optional default is GET con.setRequestMethod("GET"); //add request header con.setRequestProperty("User-Agent", USER_AGENT); //add cookie if(cookie != null) con.setRequestProperty("Cookie" , cookie); int responseCode = con.getResponseCode(); if(debug) { System.out.println("\nSending 'GET' request to URL : " + url); System.out.println("Follow redirects: " + con.getInstanceFollowRedirects()); System.out.println("Response Code : " + responseCode); } BufferedReader in = new BufferedReader( new InputStreamReader(con.getInputStream())); String inputLine; StringBuffer response = new StringBuffer(); while ((inputLine = in.readLine()) != null) { response.append(inputLine); response.append("\n"); } in.close(); if(debug) { for (String s : con.getHeaderFields().get("Set-Cookie")) { System.out.println(s); } } //return result return response.toString(); } } //utils//ZybezOffer.java package aiomercher.util.zybez.utils; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * Created by Xerion on 25-8-2014. */ public class ZybezOffer { private int amount, price; private String itemName, itemLink, itemOwner; private long epoch; private OfferType offerType; private String completeUrl, deleteUrl; private int place; public ZybezOffer(String ItemName,String owner, String Link , OfferType OfferType, int Amount, int Price, String Time, int place) throws ParseException { this.itemName = ItemName; this.itemLink = Link; this.itemOwner = owner.replace("Verified owner of ", ""); this.offerType = OfferType; this.amount = Amount; this.price = Price; this.place = place; this.epoch = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss zzz").parse(Time).getTime(); } public ZybezOffer(String ItemName,String owner, String Link , OfferType OfferType, int Amount, int Price, String Time, int place, String CompleteUrl, String DeleteUrl) throws ParseException { this.itemName = ItemName; this.offerType = OfferType; this.itemLink = Link; this.itemOwner = owner.replace("Verified owner of ", "");; this.amount = Amount; this.price = Price; this.place = place; this.epoch = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss zzz").parse(Time).getTime(); this.completeUrl = CompleteUrl; this.deleteUrl = DeleteUrl; } public int getPrice() { return price; } //public int getPlace(){ return place; } public int getAmount() { return amount; } public String getItemName() { return itemName; } public long getEpoch() { return epoch; } public OfferType getOfferType() { return offerType; } public Date getDate(){ return new Date(epoch); } public void completeOffer(String Cookie){ try { System.out.println(completeUrl); System.out.println(Cookie); Requests.sendGet(completeUrl, Cookie); }catch (Exception e){ e.printStackTrace(); } } public void deleteOffer(String Cookie){ try { System.out.println(deleteUrl); System.out.println(Cookie); Requests.sendGet(deleteUrl, Cookie); }catch (Exception e){ e.printStackTrace(); } } public int getPlace(){ try { String response = Requests.sendGet(this.itemLink); int beginIndex = response.indexOf("<table class=\"ipb_table topic_list\">"); int endIndex = response.indexOf("</table>", beginIndex); //System.out.println(response.substring(beginIndex,endIndex)); Matcher matcher = Pattern.compile("<tr>\\s*<td class=\"nowrap\">\\s*.*?title=\"(.*?)\" class.*\\s*.*\\s*.*\\s*.*\\s*.*\\s*.*\\s*.*?<span title=\"(.*?)\">", Pattern.MULTILINE).matcher(response.substring(beginIndex,endIndex)); int place = 1; while (matcher.find()) { if(this.itemOwner.equals(matcher.group(1).replace("Verified owner of ", "")) && new SimpleDateFormat("yyyy-MM-dd HH:mm:ss zzz").parse(matcher.group(2)).getTime() == this.epoch){ return place; }else{ place++; } //System.out.println(matcher.group(1) + "\t" + matcher.group(2)); } }catch (Exception e){ e.printStackTrace(); } return -1; } @Override public String toString() { return offerType + "ing " + getAmount() + " ร— "+ itemName + " for " + getPrice() + "ea"; } } You are free to use the source code in anyway you like if you give credits to me. Constructive feedback is welcome. However I'm probably not going to change it.

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.