1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

Question Prospective Scripter Question

Discussion in 'Developer Support' started by Affliction, Dec 1, 2020.

  1. Affliction

    Joined:
    Sep 17, 2020
    Messages:
    5
    Likes Received:
    0
    Hello,

    I have scripted on most of the clients out there for a couple of years and runemate is sure one of the most unique out of the bunch.

    Runemate interests me due to it using the official client by instrumentation. and that gets rid (mostly) of the locking problem all other clients suffer from.

    I've been looking at the api and have downloaded Runemate to view what it has to offer and so far so pleased. But ive been thinking.. How does RuneMate send the objects it grabs via reflection to the GUI/Java 8 application as i think most of the objects are unserializable. Do you guys keep the object in the bridge in some sort of structure with a key to be grabbed at a later date?

    my question is because if my assumption is correct, runemate eats a lot of memory and the objects even those that arent needed anymore will stay in the structure (scortched earth) and will need to be removed manually.

    Thank you
     
  2. proxi

    proxi s̶c̶r̶i̶p̶t̶ bot*

    Joined:
    Aug 23, 2015
    Messages:
    2,222
    Likes Received:
    501
    You're likely not going to get an in-depth reply to something like this on the forums. I'd recommend asking in Slack if you truly require to know this information.

    To attempt to answer your question though, I believe RuneMate uses TCP socketing for communications between the game and runemate clients, which is a little untraditional but get's the job done with less bottlenecking than other solutions like a forced DCOM. Additionally, it's not that objects are "unserializable", any game's object serialization will have a deserialization process... it's just taking to time do create (or find) a deserializer.
     
  3. Affliction

    Joined:
    Sep 17, 2020
    Messages:
    5
    Likes Received:
    0
    Hi,
    I understand, but I'm pretty sure RuneMate uses RMI not sockets to communicate between bridge and main client. also I don't think Reflection fetched objects like say.. NPC which extends Actor which extends Renderable which extends CacheNode is simply serialized using a custom serializer.. also they can't be serialized using JSON due to circular references.. thats why.. it interests me to see how RuneMate combats this problem as hoarding objects on the bridge is a call for disaster :)
     
  4. dahnae

    Joined:
    Oct 21, 2018
    Messages:
    369
    Likes Received:
    132
    The info for GameObjects, NPCs, Items, etc. are all read directly from the cache, without a need for a bridge with a client. What you then need a client for is to know where all of those are present in the game, which can be transmitted with (I think) its id only. I do not know HOW runemate does that last step, it's just what I figured from learning more about the OSRS cache. TLDR: I'm 99% sure the objects and such aren't sent through the bridge, they are read from the cache. Also, I'm pretty sure Runemate clears the memory for objects once the yare no longer valid (e.g the region changed)
     
  5. Affliction

    Joined:
    Sep 17, 2020
    Messages:
    5
    Likes Received:
    0
    That isn't how it works with reflection.

    Lets take the local NPCs for an example.. its hook is "client.fs" so in class "client" and static field "fs"
    so basically in reflection its ClassLoader.loadClass("client").getDeclaredField("fs");
    which will return an array of objects "ca" which is the obfuscated name for class: NPC.

    Then if you wanted to look for a certain NPC in that array you would loop through it and use reflection to identify values of the NPC object.
    ex:

    for(Object npc : (Object[])npcArray) {
    getClassLoader().loadClass("ca").getDeclaredField("co"); //Gets NPC Composite which contains stuff like the name..
    }
     
  6. Swych

    Joined:
    Dec 9, 2016
    Messages:
    2,975
    Likes Received:
    1,024
    Your best bet (like you’ve accurately deduced) is to wait for someone, ideally Cloud, to respond. All the responses here are way off.
     
    Affliction likes this.
  7. Swych

    Joined:
    Dec 9, 2016
    Messages:
    2,975
    Likes Received:
    1,024
    You might be able to reach him in Slack, FYI. It’s unlikely he’ll see it here.
     
    Affliction likes this.
  8. proxi

    proxi s̶c̶r̶i̶p̶t̶ bot*

    Joined:
    Aug 23, 2015
    Messages:
    2,222
    Likes Received:
    501
    I never said RuneMate isn't an RMI client :p The game is technically a RMI client and server, and so is RuneMate.
    I dug up an older conversation with Cloud and he does mention it using application sockets.

    Like I originally said though. Slack or Discord is where this discussion should be held.
     
  9. Affliction

    Joined:
    Sep 17, 2020
    Messages:
    5
    Likes Received:
    0
    I meant the way they exchange objects and send input movements/clicks/strokes, RuneMate uses RMI. Maybe what he meant be sockets is maybe the login and other non-bridge related stuff. I have tried to contact via Slack and no response.
     
  10. kartakkartak

    Joined:
    May 6, 2019
    Messages:
    2
    Likes Received:
    0
    I would have thought the experienced devs for this type of stuff would have moved on long ago. Its profitability is dependent on the popularity of the game. Making small python scri-pts to send arbitrary network code is fine for a extremely small hobby. But seriously botting a ever changing MMO gets really old really fast. Especially if the MMO makers have any sort of thinking about how to be rid of botters and make dev's lives harder.

    And then there's the whole making your own bots to boost playercounts thing....
     
  11. Affliction

    Joined:
    Sep 17, 2020
    Messages:
    5
    Likes Received:
    0
    How does it relate to this thread?
     

Share This Page

Loading...