Jump to content

Ronan

Members
  • Posts

    397
  • Joined

  • Last visited

Posts posted by Ronan

  1. Cheers for putting that online - there's a few differences to what mine was so that's quite interesting to see how someone else would do it!

     

    I don't have much of a chance to test it at the moment, but I'm interested that a 5 second wait time is enough to not throw up any blocking errors from Jagex. Although, granted; in my testing I was parsing the item's pages after searching for pages - a further 3,400+ requests is going to change things!

     

    I did notice a couple of small things, Line 114 in Program.cs, you set reserror to indicate a WebException:

     

    catch (WebException ex) {
       PageErrors.Add(bs[i].ToString() + " Error:" + ex.Status);
       reserror = true;
    }
    if (reserror == true) {
       reserror = false;
       continue;
    }

     

    As far as I can tell, reserror isn't used anywhere else - it'd make more sense to just continue inside the catch-exception block rather than flag an error?

     

    I also noticed that your PageLoader class uses ArrayList as it's base class. To me that seems a little counter-intuitive, the class is making use of an ArrayList, rather than actually extending it? It seems cleaner to just have a class variable storing the ArrayList and accessors to that - less coupling that way.

     

    Lastly, I see you're not checking for Jagex blocking requests. When they block a request, they return a HTTP 200 OK status, which means no WebException is going to occur - the way to identify it is that the Content-Length response header indicates 0 length. Right now it looks like you're just skipping over this if there is no content - or, possible worst case, passing an empty string to the Json Converter? The biggest trouble I found with this is integrating it into a library such that callers either, 1) Don't have to deal with bottling issues / exceptions or 2) Have to catch the exception and re-send the request. I resorted to providing access to the library API through a gateway, where exceptions had to be caught; but alongside this I constructed an Asynchronous requester which allows callers to request callbacks when the page is retrieved - which would be whenever Jagex stop blocking the requests.

     

    Other than those, I do like it - there's a few points in there that I hadn't thought of and I like the Json parser, wasn't aware of JavascriptSerializer. Nice job! =D>

     

    If you're interested in seeing the API I constructed, I've thrown that up on GitHub: GitHub - GeApi. It's nowhere near perfect but may give you some ideas like yours did mine!

  2. [...]

     

    I will say... it wasn't an easy task. I actually wrote my own classes to parse the .json. I used the category API with each letter as you said to compile the list of pages with items on them. The challenge that you mentioned about the server requests was a simple but oblivious fix. I used System.threading.thread.sleep(). Its tacky but it works. I also closed the connection after each response. I'll answer the rest of your questions when I add the source. I'm gonna work on creating a library like you mentioned.

     

    Sounds like you went through the same thought process as me then - good stuff! Look forward to seeing the result.

  3. Sounds interesting - I actually experimented with this on a project not too long ago. Have you considered making it a library rather than a console application - extending it's usage a bit further abroad?

     

    Another point to note - how have you handled actually finding the IDs? The obvious initial attempt would be to iterate up to some given number testing the page responses are valid, but that's highly inefficient for both the utility and server requests!

     

    My final design used the category API to find how many items fall into each starting letter for each category, and then requested the search pages for these - which ended up compiling a list of all the valid (tradeable) IDs - as you say, ending up at around 3,400. A fairly smaller number than 20,000+! Did you do anything similar?

     

    Yet another good discussion is how you handled Jagex's temporary throttling of server requests? I've tried multiple ways; randomised timeouts, exponentially increasing timeouts, varying request time-spans - all not quite meeting an optimum point. I even attempted to craft multiple GET requests and send those along at once: still throttled. Any luck on your end? It'd be nice to have some guidelines on API usage from Jagex, but I don't believe that they'll ever be particularly forthcoming about parsing the full database quickly...

     

    Also, JSON.Net for parsing the responses?

  4. From Scotland. :)

     

     

     

    1. Jumper

    2. Roundabout

    3. Indicators

    4. Boot

    5. Crackers

    6. Shopping Centre

    7. Flat

    8. Tire Guards?

    9. Tarmac

    10. Lift

    11. Sweets!

    12. Ice Lolly

    13. Can

    14. Bin

    15. Landing

    16. Nappy

    17. Torch

    18. Goal! (Football?)

    19. Prison

    20. Not sure... jogging suit?

     

     

  5. Did anybody else take note that you can LEFT CLICK your [cabbage] in a pile now? This is even bigger than the damage absorption, imo. Regardless the size of a pile, you no longer have to use the scroll>highlight> scroll across>action, you can just left-click on something.

    I think it was mentioned a while back from a forum post, apparently the 'editor' forgot to add it to the news notes!

  6. Are you sure that it requires .NET 4? At first glance it doesn't seem to use any of the more recent features - although there's obviously more that you haven't shown.

     

    You may also want to get rid of the Linq using directive, I know Express builds automatically stick that in but it doesn't look like you're using it.

     

    Would be nice to have this released - save many people re-writing small utility classes to do exactly what this does. I'd contribute if you Open Source it. :)

  7. The 'How to use the Bestiary' explains this, it can be found here (or by clicking How to use the Bestiary at the upper-right on any monster's page). The information's also quoted below. :)

     

    Ratio

    The ratio is the monster's life points divided by ten, then by its level. It will help you to determine how efficient it is to train on. The higher the number the better the monster is for training. For example, the Ice Giant (level 53) has 700 life points. 700/10/53 = 1.32. The Ogre (level 53), on the other hand, has 600 life points. 600/10/53 = 1.13. So by purely level to life points it would be better to train on the Ice Giant, but remember you must take into account the average damage and the defensive capabilities of the monsters (something pure numbers can't tell you).

  8. From what I can remember, I think it's the E74 error that is covered under the extended 3-year warranty, E73 appears to be less of a worry!

     

    If you're still under your warranty, your best bet is to go through the Microsoft Support channels. You should be able to find a support link under the Xbox website relatively easily. If I remember right you'll simply need to provide a few details that you can find on the console itself and a blurb about the problem - I found they got back to me pretty quickly.

     

    If it is going to require a send-out to them, they should provide you with a courier pick-up free of charge too! :)

     

    The biggest thing to do right now is at least attempt the Microsoft Support path, especially prior to attempting to do anything yourself to fix it.

     

    @Guydabest,

     

    I performed the X-Clamp fix on my previously dead console that Microsoft refused to fix after it failed from their first repair - it definitely solved the problem and wasn't too much work either, so it's certainly an option! You do need to be pretty careful though as a single-slip can ruin your console, and make sure you find some quality parts.

     

    However, having said that - you need to make sure it's the right fault that you're attempting to fix. E73 is (apparently) an ethernet issue, I don't see the X-Clamp fix doing anything for that. Best bet at the moment is attempting to see if Microsoft can offer any advice initially.

  9. Was thinking, not exactly sure what all a signed java application can do as far as systems go, but you think a simple process scanner would work? Say Jamflex takes a look at all the processes running on computers, figures out the threads that are botting applications, and uses it to flag potential bots. That'd be pretty epic.

    Even if it is do-able within the signed-applet (of-course, could use some native code targeted specifically to windows, bet they'd still catch a load!), I'd bet there's ways around that - perhaps a method for generating a new-name for each run?

     

    Of-course, you've also got the issue that if the program's written in Java, you're not going to have much luck identifying anything in the list...

     

    I don't know much about the programs these bots use - but Java does feature the Robot class. I bet they could capture a screenshot of the entire system's display and check that every now and then - disregarding the potential privacy concerns of-course! :P It would require the createRobot permissions too...

  10. Ooo, I haven't heard of Nip/Tuck - will need to take a look at it now!

     

    The books are definitely a good read, they have the same characters mostly, but have very different plots to the series. I found them quite an intriguing read though, was nice to have a different plot - didn't know what would happen! :)

     

    Aside, I didn't realise the new Supernatural series had started! Definitely going to look into that...

  11. Not sure if I trust it yet, if it requires any info.

    Last I checked it doesn't take the info', it requires you to get the cookie stored via RuneScape's site, then uses that - the exact same way the official thing does it. The cookie simply is checked when a request is made and the server determines if it's valid - no details stored thankfully. :thumbup:

     

    Nice to see they're continuing to develop this - hopefully they'll keep going and get some really useful things in there!

  12. ABE! :smile: Heh, okay - not Abe, but still a great drawing - well done! Charcoal seems pretty apt actually...

     

    On a side note though, that series was fantastic, the characters in particular where so well done, great drawing reference. Considered drawing a Scrab? I always remember those... <_<

  13. Im finding charm sprite hunting really fun. :P

    Its by far no place to go unless you want hunter exp with a few charms though.

     

    If you only want charms, stick to the old methods.

    Me too! :) I don't very often play anymore, but nice things like this are what I log on for. We'll see if I still feel like that in a while, but I think the overall feel of it's pretty good. :thumbup:

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.