Welcome!

By registering with us, you'll be able to discuss, share and private message with other members of our community.

Sign up now!

Question Prospective Scripter Question

Joined
Sep 17, 2020
Messages
5
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
 
s̶c̶r̶i̶p̶t̶ bot*
Joined
Aug 23, 2015
Messages
2,223
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.
 
Joined
Sep 17, 2020
Messages
5
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.

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 :)
 
Joined
Oct 21, 2018
Messages
399
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)
 
Joined
Sep 17, 2020
Messages
5
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)
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..
}
 
Joined
Dec 9, 2016
Messages
3,930
Your best bet (like you’ve accurately deduced) is to wait for someone, ideally Cloud, to respond. All the responses here are way off.
 
s̶c̶r̶i̶p̶t̶ bot*
Joined
Aug 23, 2015
Messages
2,223
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 :)
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.
 
Joined
Sep 17, 2020
Messages
5
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.

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.
 
Joined
May 6, 2019
Messages
2
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....
 
Joined
Sep 17, 2020
Messages
5
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....
How does it relate to this thread?
 
Top