Hooking openGL functions for new style reflection
silentwolf
2010-01-10 10:05:31
Hi,
This is just an idea I've been thinking about for a while, since Jagex started using the jOGL library to do its graphics.
I'm not sure if any of you are aware of the FPS (e.g. counterstrike, CoD etc) cheating scene. There are two style of hacks - one hooks the game functions directly (similar to the way RS client hacks work) and the others hook at the openGL/D3D level.
As RS can now use openGL to render (only in high gfx settings?) it it now trivial to hook openGL and perform standard model detection. (see
http://forum.gamedeception.net/forumdisplay.php?f=261 for some general examples of what can be done in other games).
As a proof of concept I used GLIntercept (
http://glintercept.nutty.org/) to log OGL calls and make sure this is plausible.
Here's an example of what I believe is a 3D model being rendered:
glGenBuffersARB(1,0x2320add4)
glBindBufferARB(GL_ARRAY_BUFFER,1028)
glBufferDataARB(GL_ARRAY_BUFFER,3168,0x23783ffc,GL_STATIC_DRAW) //0x23783ffc points to the vertex buffer... read this for model recognition
glEnableClientState(GL_VERTEX_ARRAY)
glVertexPointer(3,GL_FLOAT,24,0x0000)
glEnableClientState(GL_NORMAL_ARRAY)
glNormalPointer(GL_FLOAT,24,0x000c)
glEnableClientState(GL_COLOR_ARRAY)
glBindBufferARB(GL_ARRAY_BUFFER,171)
glColorPointer(4,GL_UNSIGNED_BYTE,28,0x000c)
glEnableClientState(GL_TEXTURE_COORD_ARRAY)
glBindBufferARB(GL_ARRAY_BUFFER,135)
glTexCoordPointer(2,GL_FLOAT,36,0x001c)
glBindTexture(GL_TEXTURE_2D,145)
glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER,136)
glDrawElements(GL_TRIANGLES,168,GL_UNSIGNED_SHORT,0x0000) Textures[ (0,145) ]
glBindTexture(GL_TEXTURE_2D,144)
glDrawElements(GL_TRIANGLES,138,GL_UNSIGNED_SHORT,0x0150) Textures[ (0,144) ]
glPopMatrix()
glMatrixMode(GL_PROJECTION)
glLoadMatrixf([1.183333,0.000000,0.000000,0.000000,0.000000,2.453564,0.000000,0.000000,0.000000,0.000000,-1.027477,-1.000000,0.000000,0.000000,-96.387375,0.000000])
glMatrixMode(GL_MODELVIEW)
glMatrixMode(GL_PROJECTION)
glLoadMatrixf([1.183333,0.000000,0.000000,0.000000,0.000000,2.453564,0.000000,0.000000,0.000000,0.000000,-1.026092,-1.000000,0.000000,0.000000,-87.635582,0.000000])
glMatrixMode(GL_MODELVIEW)
glPushMatrix()
glMultMatrixf([1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,7360.000000,-320.000000,5952.000000,1.000000])
Once you can copy out the vertex array, you can generate a unique ID for each model (e.g. devise an algorithm to generate a unique id based on vertex positions) and do a WorldToScreen conversion to get the 2D coords of the model. This can then be passed to scar.
Similar methods would allow things such as map recognition etc.
The advantage over the SMART reflection is that it doesn't need to be updated every time RS is updated, only if they change the models.
Thoughs, ideas, suggestions? I could code up a small proof of concept if people are interested.
Wizzup?
2010-01-10 10:10:51
Yeah, I also thought of something like this. We should also be able to get direct access to their data, which would allow us to perform fast (search) operations on the client, possibly with shaders.
Good idea, I'd like to see a PoC. :)
silentwolf
2010-01-10 10:19:41
Yup, I think 3D model rec and 2D rec such as inventory items should be fairly easy to do.
You mentioning shaders made me take a quick look at the logs - here's a dump:
!!ARBvp1.0
ATTRIB iPos = vertex.position;
ATTRIB iColour = vertex.color;
OUTPUT oPos = result.position;
OUTPUT oColour = result.color;
OUTPUT oTexCoord0 = result.texcoord[0];
OUTPUT oTexCoord1 = result.texcoord[1];
OUTPUT oFogCoord = result.fogcoord;
PARAM time = program.local[65];
PARAM turbulence = program.local[64];
PARAM lightAmbient = program.local[66];
PARAM pMatrix[4] = { state.matrix.projection };
PARAM mvMatrix[4] = { state.matrix.modelview };
PARAM ivMatrix[4] = { state.matrix.texture[1] };
PARAM fNoise[64] = { program.local[0..63] };
TEMP noise, clipPos, viewPos, worldPos;
ADDRESS noiseAddr;
DP4 viewPos.x, mvMatrix[0], iPos;
DP4 viewPos.y, mvMatrix[1], iPos;
DP4 viewPos.z, mvMatrix[2], iPos;
DP4 viewPos.w, mvMatrix[3], iPos;
MOV oFogCoord.x, -viewPos.z;
DP4 worldPos.x, ivMatrix[0], viewPos;
DP4 worldPos.y, ivMatrix[1], viewPos;
DP4 worldPos.z, ivMatrix[2], viewPos;
DP4 worldPos.w, ivMatrix[3], viewPos;
ADD noise.x, worldPos.x, worldPos.z;SUB noise.y, worldPos.z, worldPos.x;MUL noise, noise, 0.0001220703125;
FRC noise, noise;
MUL noise, noise, 64;
ARL noiseAddr.x, noise.x;
MOV noise.x, fNoise[noiseAddr.x].x;
ARL noiseAddr.x, noise.y;
MOV noise.y, fNoise[noiseAddr.x].y;
MUL noise, noise, turbulence.x;
MAD oTexCoord0, worldPos.xzww, 0.0078125, noise;
MOV oTexCoord0.w, 1;
MUL oTexCoord1.xy, worldPos.xzww, 0.0009765625;
MOV oTexCoord1.zw, time.xxxw;
DP4 clipPos.x, pMatrix[0], viewPos;
DP4 clipPos.y, pMatrix[1], viewPos;
DP4 clipPos.z, pMatrix[2], viewPos;
DP4 clipPos.w, pMatrix[3], viewPos;
MUL oColour.xyz, iColour, lightAmbient;
MOV oColour.w, iColour.w;
MOV oPos, clipPos;
END
These lines are their 'anti random move stuff a bit'?:
ADD noise.x, worldPos.x, worldPos.z;SUB noise.y, worldPos.z, worldPos.x;MUL noise, noise, 0.0001220703125;
MAD oTexCoord0, worldPos.xzww, 0.0078125, noise;
MUL oTexCoord1.xy, worldPos.xzww, 0.0009765625;
My OGL is rusty (I made an OGL aimbot/wh etc for CS1.5 back in the day) but I might enjoy getting back into it :)
n3ss3s
2010-01-10 15:54:35
http://www.moparisthebest.com/smf/index.php/topic,420642.0.htmlI made this thread 4 days ago, did you hack into my mind or something :p But yea it'd be cool for something to come out of it…
silentwolf
2010-01-10 18:00:19
Well I've put a bit of time into this… the use of VBO's is annoying :P
I have some code to extract models from RS as they're rendered and then a standalone program to render them. So far the results aren't great - it's all about figuring out the data structure RS uses for vertices, colours, textures and how they're interleaved. Just figured out what's been going wrong, but I'm too tired to continue… will have another look later. Hopefully by the end I'll be able to render coloured models directly extracted from the OGL hook :) Once I know I'm getting valid model data I can work on model rec and worldToScreen.
silentwolf
2010-01-12 14:52:48
Right, well I've figured out how RS draws its models and below is a render of the first model I've extracted (and I believe to have rendered correctly). Can anyone recognise what it is? I looks kind of like the side of a building or something… I will render some more dumps later when I have some spare time.
What I've done so far is hooked the required OGL functions, dumped appropriate buffers (vertices and indices) and then written a standalone program to render the dumps, to show that it is working correctly (and because it is cool :)). I could incorporate colour, texture and bump-map data at a later date if desired.
Anyway, this is proof of concept to show that you can capture model data being sent to the GPU. The next step is to write a WorldToScreen function which can give you an x,y coord of where each model is in the 3D world. It is then trivial to search for a 3D model you are interested in (an NPC, a rock, etc) and return the x,y coords, in much the same way as reflection works.
Gu3st...
2010-01-12 14:59:14
Very interesting.
And that image looks like a curtain or something..
Keep us updated :)
And texture would help a lot
silentwolf
2010-01-12 15:02:07
The other one looked a bit dubious, so I just wanted to check and render something else… here it is:

It's definitely
something :)
Wizzup?
2010-01-12 15:16:57
Very cool. I don't really recognize it, but it is indeed probably something. ;)
silentwolf
2010-01-12 15:28:57
Fun fact - vertex data for NPCs are unqiue in that they are packed with stride 12. Here's proof with wireframe for just NPCs. I will render some stride 12 buffer dumps and we should get some more interesting models :)
silentwolf
2010-01-12 15:30:55
Oh, and by coincidence the two rendered dumps clearly fit snuggly side by side if you look at the outline of the models :)
Wanted
2010-01-12 15:31:44
Ah, looks cool
I noticed that picture is the high def version though, will this work with normal rs client in low def?
Gu3st...
2010-01-12 15:36:42
From: IceFire908
Ah, looks cool
I noticed that picture is the high def version though, will this work with normal rs client in low def?
OpenGL is only HD
silentwolf
2010-01-12 15:47:08
From: Zyt3x
OpenGL is only HD
Yup. Would that have a great effect on most scripts?
MylesMadness
2010-01-12 15:54:22
From: silentwolf
Yup. Would that have a great effect on most scripts?
Well SRL today is designed to run on low detail, but if this turns out cool I would use it.
YoHoJo
2010-01-12 15:54:33
Yeah, none would work (pretty much). All scripts/SRL is all made for the lowest possible detail, in fact LoginPlayer contains a function that makes all of the graphics on lowest settings before/after you login. But we could always mess around with some stuff and just alter code to make it work for both versions, I think mainly just different colors (if that) would be the only major difference between low and high def shouldn't be too big of a change?
Wanted
2010-01-12 15:57:07
For the fixed HD client everything would be the same except the MainScreen and possibly minor changes in the minimap.
Gu3st...
2010-01-12 15:57:11
From: YoHoJo
Yeah, none would work (pretty much). All scripts/SRL is all made for the lowest possible detail, in fact LoginPlayer contains a function that makes all of the graphics on lowest settings before/after you login. But we could always mess around with some stuff and just alter code to make it work for both versions, I think mainly just different colors (if that) would be the only major difference between low and high def shouldn't be too big of a change?
Yeah an easy {.DEFINE OpenGLRef} would solve that :)
Wanted
2010-01-12 15:58:37
From: Zyt3x
Yeah an easy {.DEFINE OpenGLRef} would solve that :)
Not exactly, it would effectively require all minimap and mainscreen functions to be written twice… random solvers, object finders, bank openers ect..
Gu3st...
2010-01-12 16:01:20
From: IceFire908
Not exactly, it would effectively require all minimap and mainscreen functions to be written twice… random solvers, object finders, bank openers ect..
Wouldn't reflection cover all those functions anyways? R_OpenBank, R_SolveMime blah blah
Wizzup?
2010-01-12 16:09:01
Can't you use Hardware Acceleration (OpenGL) and then turn all the stuff on low/off? In theory it should be the same.
silentwolf
2010-01-12 19:27:06
From: Wizzup?
Can't you use Hardware Acceleration (OpenGL) and then turn all the stuff on low/off? In theory it should be the same.
Yeah, I'd imagine most of the stuff will be almost identical.
silentwolf
2010-01-12 20:01:54
Here's a render of an 'NPC' - really anything that is animated like things drawn in wireframe in the image above. This is actually passed to the gfx card in a different way to everything else (e.g. scenary etc, anything static) so I was just testing I could grab vertex data for animated things as well.

Again, not really sure what it is, but it's clearly something :)
When I get some more time I will work on model rec and WorldToScreen. I can then overlay some text on the x,y coords of each model so you can see what is positioned where in the RS world. Hopefully given time I will also be able to get some kind of animation rec as I believe this will be useful too?
senrath
2010-01-12 20:10:17
These kinda look like pieces of something bigger, to me.
silentwolf
2010-01-12 20:15:25
From: senrath
These kinda look like pieces of something bigger, to me.
Yes, you're right. Each piece is scaled and rotated to fit into the RS world. Multiple bits will fit together to form everything, but things such as NPC's and monsters should be one big mesh. Sadly there are a huge number of meshes being drawn to form the RS world, so the chances of me picking out at random something interesting is low. As soon as I get worldToScreen working I can see what models correspond to interesting things and then we should have something useful :)
senrath
2010-01-12 20:45:42
Good luck with that. It's nice to see someone new to the community contributing so much.
Gu3st...
2010-01-13 03:37:19
From: senrath
It's nice to see someone new to the community contributing so much.
It indeed is! This is great, silentwolf :)
You'll be accepted and respected in no-time with this great knowledge and attitude ;)
Also, the two first images looks like a wall or something, maybe similar to the walls inside Sos (
http://runescape.wikia.com/wiki/Stronghold_of_Security) Level 2 and the most recent one looks like a vase
The Claw
2010-01-14 02:12:50
This could be the next step in macroing - it all appears unencrypted and not "messed" with yet like hooks and colours are - it seems unlikely there'd be a way of jagex encrypting the data sent to openGL and making it inaccessible to us, as they are standalone programs etc.
Some questions though:
- Do you think it will be possible to search through the parsed models with tolerance, or will something like a 1 pixel change on the model mess it up?
- Is there an "ID" system like with reflection or do we have to qualitatively analyse each model we grab and then compare with a database we've collected to identify it?
mastaraymond
2010-01-14 04:51:12
This is extremely interesting, always wanted to know how this stuff worked in aimbots etc, and now there is a relation to runescape ^_^. I really hope to see more of this, keep it rollin'!
silentwolf
2010-01-14 05:49:33
From: The Claw
it seems unlikely there'd be a way of jagex encrypting the data sent to openGL and making it inaccessible to us, as they are standalone programs etc.
This is impossible :)
They could potentially find a way of detecting the OGL hook though. There are ways around this though.
From: The Claw
- Do you think it will be possible to search through the parsed models with tolerance, or will something like a 1 pixel change on the model mess it up?
I think we'd have to cross this hurdle when we come to it. I don't think I'll be using exact pixel location for model recognition anyway.
From: The Claw
- Is there an "ID" system like with reflection or do we have to qualitatively analyse each model we grab and then compare with a database we've collected to identify it?
It will be an ID system. I probably wont be able to give model names though, e.g. 'King Scorpion', just an id.
Hopefully I'll have a small proof of concept to release in a few days :)
The Claw
2010-01-14 06:10:29
Sounds pretty cool man, definately has potential. Any chance you could write up some basic tutorials explaining the basics and neccessary info so once it gets off the ground people here could learn and contribute? Or link us to some things we should read, assuming no prior knowledge in this area?
Gu3st...
2010-01-14 09:10:51
From: The Claw
Sounds pretty cool man, definately has potential. Any chance you could write up some basic tutorials explaining the basics and neccessary info so once it gets off the ground people here could learn and contribute? Or link us to some things we should read, assuming no prior knowledge in this area?
I would want to learn this too :)
n3ss3s
2010-01-14 10:48:12
Seeing you managed to wireframe RS, do you think you'd be able to choose a specific NPC or an Object to render? e.g otherwise black main screen but a trees are showing or something…
Frement
2010-01-14 10:55:14
From: n3ss3s
Seeing you managed to wireframe RS, do you think you'd be able to choose a specific NPC or an Object to render? e.g otherwise black main screen but a trees are showing or something…
Yeah, it would ease the scripting alot.
Gu3st...
2010-01-14 12:12:18
From: n3ss3s
Seeing you managed to wireframe RS, do you think you'd be able to choose a specific NPC or an Object to render? e.g otherwise black main screen but a trees are showing or something…
Wow that would make everything MUCH easier.. O_o
This has indeed a lot of potential!
Sir R. M8gic1an
2010-01-14 12:22:47
This looks amazing. Very interested as all.
~RM
Gu3st...
2010-01-14 13:03:08
By the way, do not stop posting pictures! They look awesome!
Cartmann
2010-01-14 13:43:09
From: Zyt3x
I would want to learn this too :)
Which language is it written in?
Another thing, you want to use the grapfic cards cpu instead of the real CPU (considering your using OpenGL) how would that effect the amount of SMARTs we can use?
silentwolf
2010-01-14 16:55:27
To answer a few Qs: I will probably open source this once it is in a suitable state. There are plenty of openGL tutorials for legit game programming and cheating out there :) I will provide links later. It is written in C.
From: n3ss3s
Seeing you managed to wireframe RS, do you think you'd be able to choose a specific NPC or an Object to render? e.g otherwise black main screen but a trees are showing or something…
Although a nice idea and easy to implement, wouldn't you just prefer GetCoords(int NPCid)? Instead of just rendered the tree, wouldn't giving you the x,y coords of the tree be better? I would like to avoid overlays if possible, as I believe it would be possible for jagex to take screenshots of the current scene. This would = instant ban.
Having said that, exciting news: my first overlay!

That small black x is drawn on the first vertex of the player model (don't worry, any GetCoords would return the centre :P). It follows the player no matter the camera position, etc etc. So I can now get 2D coords of the 3D world :)
There is plenty of debugging to do, but soon I will start working on generating NPC ids based on model data (or something else) and drawing ID's over each model. This could then be used by the scripter (in a dummy acount they don't mind getting banned) to find ID's for every model they want.
Frement
2010-01-14 17:00:52
Looks freaking fantastic!
silentwolf
2010-01-14 17:11:41
OK, I fixed so code so it now actually points to the first vertex of the model (it wasn't actually doing this before).

BOOM! Headshot ;)
silentwolf
2010-01-14 17:29:21
PoC almost done, but I'm off for a drink. Finally found the perfect place to draw my overlays :)
mastaraymond
2010-01-14 17:34:42
I am wondering how do you exactly hook these OpenGL functions? Normally you would put a hook-plugin somewhere in the applications folder, right?
Oh, and you might want to refrain from double posting (it's against the rules here at SRL ;))
Gu3st...
2010-01-14 17:37:40
From: mastaraymond
I am wondering how do you exactly hook these OpenGL functions? Normally you would put a hook-plugin somewhere in the applications folder, right?
I am wondering this too, I've used some cheats in various games and most of them includes adding a .dll file in the game dir.. I guess what this does is to read the memory going from client to gpu?
Silentwolf: This is so great! You've created these functions in an extreme speed. Is it easy to write or is it that you're and pro scripter? :redface:
noidea
2010-01-14 19:30:55
/me is baffled
This could potentially be the next rsbot. Be carefull :)
silentwolf
2010-01-14 19:35:45
From: mastaraymond
I am wondering how do you exactly hook these OpenGL functions? Normally you would put a hook-plugin somewhere in the applications folder, right?
It's what's referred to as a 'wrapper' (in it's current form). I.e. an 'opengl32.dll' that's placed in the correct folder and loaded by windows instead of C:\windows\system32\opengl32.dll. I could make a hook instead, but a wrapper is less effort from a development point of view. If it becomes more appropriate to make a hook (injecting a dll into the procress instead) then this could be done.
BenLand100
2010-01-14 22:23:35
From: silentwolf
It's what's referred to as a 'wrapper' (in it's current form). I.e. an 'opengl32.dll' that's placed in the correct folder and loaded by windows instead of C:\windows\system32\opengl32.dll. I could make a hook instead, but a wrapper is less effort from a development point of view. If it becomes more appropriate to make a hook (injecting a dll into the procress instead) then this could be done.
Sounds like my early experiments with SMART. I've got a stable dll injector lying around as well as a framework for linking commands from Scar across processes (assuming you don't embed a JVM like I did with SMART)…
Also, before all of you other people let me call you out for being hypocritical: he's using the same principle reflection-based object finding worked on. All those hooks were in the java-side renderer. Just saying.
The Doctor is in…Thanks for continuing to share Ben :)
SilentWolf,very interesting things you are doing here, Keep up the Great Work !!!:)
and enjoy your early promotion ;-)
marpis
2010-01-15 01:08:48
From: silentwolf
OK, I fixed so code so it now actually points to the first vertex of the model (it wasn't actually doing this before).

BOOM! Headshot ;)
Oh wait dude, this means you actually have a GetNPCCoords(X, Y, GuardID) type of function working?
Nice work man! I hope you keep contributing, and just tell us if we can do something for you ( Testing and so on ) :)
~Home :)
P.S Feels like SRL is starting to rise from the bottom to skies!
YoHoJo
2010-01-15 03:57:40
From: silentwolf
Here's a render of an 'NPC' - really anything that is animated like things drawn in wireframe in the image above. This is actually passed to the gfx card in a different way to everything else (e.g. scenary etc, anything static) so I was just testing I could grab vertex data for animated things as well.

Again, not really sure what it is, but it's clearly something :)
When I get some more time I will work on model rec and WorldToScreen. I can then overlay some text on the x,y coords of each model so you can see what is positioned where in the RS world. Hopefully given time I will also be able to get some kind of animation rec as I believe this will be useful too?
Kind of looks like the top view of a Dwarf MulfiCannon, but I know it isn't one though :p
The Claw
2010-01-15 06:35:25
From: silentwolf
OK, I fixed so code so it now actually points to the first vertex of the model (it wasn't actually doing this before).

BOOM! Headshot ;)
Damn nice. Did you find that NPC by searching all models for the model of the guard, then get the vertex co-ords, or just search for a random thing? Just wondering if you've gotten a "matchmaking" thing done yet.
And how will this be implemented into a bot? I'm guessing use some sort of custom client to parse the info, then pass these vars on to scar/simba which will do the script logic/clicking etc? If so, would it be able to be run minimised, like smart (which is now open source) can? Would it be possible to merge the two, so we have multibotting with traditional reflection, GPL reflection, and minimisable client all in the one thing?
And about drawing onto the screen: Didnt you say jagex could take a screenie of it and see? SMART uses a transparent window pane above the rs screen which we can debug on to get around this.
From: The Claw
And about drawing onto the screen: Didnt you say jagex could take a screenie of it and see? SMART uses a transparent window pane above the rs screen which we can debug on to get around this.
If it's feasible, great idea !
n3ss3s
2010-01-15 10:44:39
Very nice job finding the coords :)
silentwolf
2010-01-15 19:08:48
From: BenLand100
Sounds like my early experiments with SMART. I've got a stable dll injector lying around as well as a framework for linking commands from Scar across processes (assuming you don't embed a JVM like I did with SMART)…
Out of interest, how are you transferring information to scar? I need to find an efficient way of doing this… Windows messages? Also, I'm really interested in how you hooked RS. What/how were you hooking? I find this stuff really interesting :)
From: marpis
Oh wait dude, this means you actually have a GetNPCCoords(X, Y, GuardID) type of function working?
Yes, this will be a feature of the final release.
And how will this be implemented into a bot? I'm guessing use some sort of custom client to parse the info, then pass these vars on to scar/simba which will do the script logic/clicking etc? If so, would it be able to be run minimised, like smart (which is now open source) can? Would it be possible to merge the two, so we have multibotting with traditional reflection, GPL reflection, and minimisable client all in the one thing?
Hopefully this will simply provide scar with some extra functions, e.g. GetNPCCoords(X, Y, GuardID). This will mean no client modification. It will run with the standard RS client, or any modified client you have. It will also be able to run in minimised mode. We'll see ;)
MylesMadness
2010-01-15 19:13:14
From: silentwolf
Out of interest, how are you transferring information to scar? I need to find an efficient way of doing this… Windows messages? Also, I'm really interested in how you hooked RS. What/how were you hooking? I find this stuff really interesting :)
You can haz sauce
http://blanddns.no-ip.org:81/repos/public-smart/
silentwolf
2010-01-15 19:29:22
This SMART stuff looks awesome. I will study when sober.
Here si a render off all NPC's detected and coords calculated:

NPC regonition cming tomorrow :)
Edit: MylesMadness: def remeber you from rscheatnet, right?
MylesMadness
2010-01-15 19:53:41
if you mean rscheata I have posted there, but never scripted or got into it deeply
silentwolf
2010-01-15 20:02:32
Hmm.. was a log time ago. Probably my bad memory :unsure:
senrath
2010-01-15 20:11:53
From: silentwolf
Hmm.. was a log time ago. Probably my bad memory :unsure:
It also doesn't help that you're apparently drunk while posting this :p
R0b0t1
2010-01-16 02:51:53
Although not really related… first things you posted were cave walls.
Gu3st...
2010-01-16 07:17:52
From: silentwolf
How come the candles aren't "aimed" at? I'm pretty sure they move too? :confused:
Or is it like a sprite or something? Like.. not a NPC?
silentwolf
2010-01-16 07:56:33
Yeah, I'm not sure. There are a few animated models which aren't getting picked up… I will look into this later. This is still very much just a proof of concept :)
Gu3st...
2010-01-16 08:09:02
I see :)
Well.. Good job :D
Are you going to make it aim at the middle of the npc, and not at the first vertex?
How often does this break compared to the current form of reflection?
silentwolf
2010-01-16 08:15:20
This will never break, unless they change their methods of rendering or change their models. A GetCoords(id) function would return the centre of the model :)
Dervish
2010-01-16 08:45:38
From: silentwolf
This will never break, unless they change their methods of rendering or change their models. A GetCoords(id) function would return the centre of the model :)
This looks very promising, good job !
Gu3st...
2010-01-16 08:50:41
From: silentwolf
This will never break, unless they change their methods of rendering or change their models. A GetCoords(id) function would return the centre of the model :)
Just like I though :)
This is truly great! Why haven't anyone made something similar before? xD
Good job lol
silentwolf
2010-01-16 08:58:04
Here's a proof of concept ID system:
Gu3st...
2010-01-16 09:02:30
From: silentwolf
Here's a proof of concept ID system:
Impressive. :)
I assume you're able to make an object recognition too? like trees, rocks and so on.
No breaking, perfect NPC (and object?) finding, no need to get colors of everything and (maybe) walking (somewhere in the future?). This sounds like the perfect system for macros… Only downside must be the need for HD = more CPU power needed
silentwolf
2010-01-16 09:11:02
From: Zyt3x
Impressive. :)
I assume you're able to make an object recognition too? like trees, rocks and so on.
No breaking, perfect NPC (and object?) finding, no need to get colors of everything and (maybe) walking (somewhere in the future?). This sounds like the perfect system for macros… Only downside must be the need for HD = more CPU power needed
Yup, objects should be fine too. I will look into reading the map at a later date, but any implementation probably won't be as easy to use as hacked java clients. Probably something like passing scar the unrotated, clean map and your current x,y coords on said map. I'm not sure yet.
Running the game in HD will also
reduce your CPU usage. HD simply means RS uses opengl, which passes large amount of processing to your GPU, so your CPU doesn't have to do it. Software rendering is
slow.
Edit: well out of interest, I tested this and CPU useage seems pretty much the same in both, in low detail :o
silentwolf
2010-01-16 09:30:21
From: BenLand100
Sounds like my early experiments with SMART. I've got a stable dll injector lying around as well as a framework for linking commands from Scar across processes (assuming you don't embed a JVM like I did with SMART)…
I just had a look at the smart source and it's very interesting :)
Could you send me some code/give me hints for sending data to/from the injected dll?
The Claw
2010-01-16 09:39:44
Do those numbers represent anything specific or are they arbitrary?
n3ss3s
2010-01-16 10:33:10
From: Zyt3x
How come the candles aren't "aimed" at? I'm pretty sure they move too? :confused:
Or is it like a sprite or something? Like.. not a NPC?
What the hell would make you think that a candle is an NPC? NON PLAYER CHARACTER.
marpis
2010-01-16 10:43:41
From: Zyt3x
Impressive. :)
I assume you're able to make an object recognition too? like trees, rocks and so on.
No breaking, perfect NPC (and object?) finding, no need to get colors of everything and (maybe) walking (somewhere in the future?). This sounds like the perfect system for macros… Only downside must be the need for HD = more CPU power needed
How did you get those ID numbers?
And I just realized what's so great about this method too compared to reflection:
One single finding function for all grounditems/NPCs/Objects :)
E: And btw, are 2D models processed with OpenGL too, such as minimap and inventory items, or does the game-engine handle them separately? Cause if they aren't processed with OGL then you can't use this system to mapwalk.
mixster
2010-01-16 11:05:02
From: silentwolf
This will never break, unless they change their methods of rendering or change their models. A GetCoords(id) function would return the centre of the model :)
Out of interest, have you been experimenting long enough to confirm they do not change their models/often or is it just a guess that they don't? As I'm pretty in the dark about this area, could they not alter the id's without changing the actual models used, a bit like with hooks for reflection?
Nava2
2010-01-16 11:43:45
How about some sauce?
silentwolf
2010-01-16 11:58:53
From: marpis
E: And btw, are 2D models processed with OpenGL too, such as minimap and inventory items, or does the game-engine handle them separately? Cause if they aren't processed with OGL then you can't use this system to mapwalk.
Yes, everything goes through OGL. Map walking should be possible, but it will be tricky to implement.
From: mixster
Out of interest, have you been experimenting long enough to confirm they do not change their models/often or is it just a guess that they don't?
This is just a guess, but I'd be very surprised if they did.
From: mixster
could they not alter the id's without changing the actual models used, a bit like with hooks for reflection?
Nope, the only way for IDs to change is to alter the model. I also hope to implement a method which will be impervious to small random changes in vertex positions.
From: The Claw
Do those numbers represent anything specific or are they arbitrary?
They relate to the model itself. I don't really want to go too much into the specifics of how I detect models on a public forum :)
From: Nava2
How about some sauce?
In time :)
Gu3st...
2010-01-16 12:01:19
From: n3ss3s
What the hell would make you think that a candle is an NPC? NON PLAYER CHARACTER.
Uhm… Learn to read the topic..
"Here's a render of an 'NPC' - really anything that is animated like things drawn in wireframe in the image above. This is actually passed to the gfx card in a different way to everything else (e.g. scenary etc, anything static) so I was just testing I could grab vertex data for animated things as well."
http://www.villavu.com/forum/showpost.php?p=674582&postcount=23Meaning anything that moves will be passed to his hacking program as NPC's
EDIT: I compared SD on lowest to HD on lowest and HD on lowest used about 75% more CPU for me
n3ss3s
2010-01-17 06:22:18
Oh sorry, only now saw that the plants aswell have the X.
Cartmann
2010-01-17 07:05:37
From: Zyt3x
Uhm… Learn to read the topic..
"Here's a render of an 'NPC' - really anything that is animated like things drawn in wireframe in the image above. This is actually passed to the gfx card in a different way to everything else (e.g. scenary etc, anything static) so I was just testing I could grab vertex data for animated things as well."
http://www.villavu.com/forum/showpost.php?p=674582&postcount=23
Meaning anything that moves will be passed to his hacking program as NPC's
EDIT: I compared SD on lowest to HD on lowest and HD on lowest used about 75% more CPU for me
Well, if he could "black-out" part of the screen as he mentioned earlier for easier ID/colour finding. Wouldn't that contribute to a lower CPU use?
And also as I've been trying to pm you about :P Having the graphic card (OpenGL) running the show instead of the CPU, isn't that going to effect the set-up you need to run in order to mass bot?
Frement
2010-01-17 07:09:35
He said jagex could take screenshots of the rs screen, so we would have to draw to another layer. It would just increase the gpu/cpu usage.
Correct me if im wrong.
Dervish
2010-01-17 09:26:46
From: n3ss3s
Seeing you managed to wireframe RS, do you think you'd be able to choose a specific NPC or an Object to render? e.g otherwise black main screen but a trees are showing or something…
That would be fantastic indeed..
Gu3st...
2010-01-17 09:37:20
From: Frement
He said jagex could take screenshots of the rs screen, so we would have to draw to another layer. It would just increase the gpu/cpu usage.
Correct me if im wrong.
Yeah, the blacking-out thing would be on a separate canvas, it wouldn't be too hard for JaGeX to put in a screen shooter or something, and why not be on the safe-side, eh?
And n3ss3s: Sorry if I seemed harsh/angry :P I was in a bad mood, it wasn't your fault
silentwolf
2010-01-17 11:06:58
Here's my proper model recognition code in action:
Previously IDs were changing each time RS is started, now it is static :)
Can someone link me to some info on writing a SCAR plugin? It wont take much to get a GetNPCCoords() function implemented now :)
mastaraymond
2010-01-17 11:10:57
MylesMadness
2010-01-17 11:11:19
From: silentwolf
Here's my proper model recognition code in action:
Previously IDs were changing each time RS is started, now it is static :)
Can someone link me to some info on writing a SCAR plugin? It wont take much to get a GetNPCCoords() function implemented now :)
The plugin depends on the language.
edit: ninja'd
Wanted
2010-01-17 11:33:23
From: silentwolf
Can someone link me to some info on writing a SCAR plugin? It wont take much to get a GetNPCCoords() function implemented now :)
If you're doing delphi:
// An example plugin for SCAR, created by Freddy1990
// Check "Accessable SCAR Functions.txt" for which functions you can call from SCAR
library TestPlugin;
uses
FastShareMem,
TestPlugin_Globals;
{$R *.res}
exports GetFunctionCount;
exports GetFunctionInfo;
exports GetTypeCount;
exports GetTypeInfo;
exports SCARClosing;
exports ScriptTerminate;
exports ScriptPause;
exports ScriptResume;
end.
ect..
library CppTestPlugin;
uses
FastShareMem,
SysUtils;
{$R *.res}
{$L CppTestPlugin\Main.obj}
function _Inc10(Numb: Integer): Integer; cdecl; external;
function Inc10(Numb: Integer): Integer; stdcall;
begin
Result := _Inc10(Numb);
end;
function GetFunctionCount(): Integer; stdcall; export;
begin
Result := 1;
end;
function GetFunctionInfo(x: Integer; var ProcAddr: Pointer; var ProcDef: PChar): Integer; stdcall;
begin
case x of
0:
begin
ProcAddr := @Inc10;
StrPCopy(ProcDef, 'function Inc10(Numb: Integer): Integer;');
end;
else
x := -1;
end;
Result := x;
end;
exports GetFunctionCount;
exports GetFunctionInfo;
end.
Accessibles
All functions unless clearly specified are available for the version for which they're listed and the following versions.
SCAR Divi 3.12
--------------
procedure Writeln(s: string);
procedure Status(s: string);
procedure Wait(ms: Integer);
function GetBitmapDc(Bmp: Integer): HDC;
function GetSCARVersion: Integer;
procedure Disguise(Caption: string);
function GetClientWindowHandle: Integer;
procedure SetClientWindowHandle(H: Integer);
function InCircle(x, y, mx, my, r: Integer): Boolean;
function InTriangle(x, y, x1, y1, x2, y2, x3, y3: Integer): Boolean;
function Distance(x1, y1, x2, y2: Integer): Integer;
procedure ConvertTime(Ms: Integer; var H, M, S: Integer);
procedure TerminateScript;
SCAR Divi 3.15
--------------
procedure ClearDebug;
function GetStatus: string;
function AppPath: string;
function ScriptPath: string;
procedure AddToReport(s: string);
procedure ClearReport;
procedure MoveToTray;
procedure ActivateClient;
function GetDebugText: String;
procedure DeleteDebugLine(Line: Integer);
function GetDebugLineCount: Integer;
function GetDebugLine(Line: Integer): string;
procedure ClearDebugLine(Line: Integer);
procedure ReplaceDebugLine(Line: Integer; s: string);
function GetClientCanvas: TCanvas;
function GetDebugCanvas: TCanvas;
function GetTimeRunning: Integer;
procedure SetTargetDc(Dc: HDC);
procedure ResetDc;
procedure SetDesktopAsClient;
SCAR Divi 3.20
--------------
function GetTargetDC: HDC;
procedure ResetCaption;
procedure Alert(s: string);
Dervish
2010-01-17 13:59:09
I'm very interested in this, and would like to learn abit of this aswell O.o.
Gu3st...
2010-01-17 14:12:11
From: Dr D. Dervish
I'm very interested in this, and would like to learn abit of this aswell O.o.
Yeah, you should totally write a tutorial, silentwolf :)
Wizzup?
2010-01-17 15:35:14
From: IceFire908
If you're doing delphi:
// An example plugin for SCAR, created by Freddy1990
// Check "Accessable SCAR Functions.txt" for which functions you can call from SCAR
library TestPlugin;
uses
FastShareMem,
TestPlugin_Globals;
{$R *.res}
exports GetFunctionCount;
exports GetFunctionInfo;
exports GetTypeCount;
exports GetTypeInfo;
exports SCARClosing;
exports ScriptTerminate;
exports ScriptPause;
exports ScriptResume;
end.
ect..
library CppTestPlugin;
uses
FastShareMem,
SysUtils;
{$R *.res}
{$L CppTestPlugin\Main.obj}
function _Inc10(Numb: Integer): Integer; cdecl; external;
function Inc10(Numb: Integer): Integer; stdcall;
begin
Result := _Inc10(Numb);
end;
function GetFunctionCount(): Integer; stdcall; export;
begin
Result := 1;
end;
function GetFunctionInfo(x: Integer; var ProcAddr: Pointer; var ProcDef: PChar): Integer; stdcall;
begin
case x of
0:
begin
ProcAddr := @Inc10;
StrPCopy(ProcDef, 'function Inc10(Numb: Integer): Integer;');
end;
else
x := -1;
end;
Result := x;
end;
exports GetFunctionCount;
exports GetFunctionInfo;
end.
Accessibles
All functions unless clearly specified are available for the version for which they're listed and the following versions.
SCAR Divi 3.12
--------------
procedure Writeln(s: string);
procedure Status(s: string);
procedure Wait(ms: Integer);
function GetBitmapDc(Bmp: Integer): HDC;
function GetSCARVersion: Integer;
procedure Disguise(Caption: string);
function GetClientWindowHandle: Integer;
procedure SetClientWindowHandle(H: Integer);
function InCircle(x, y, mx, my, r: Integer): Boolean;
function InTriangle(x, y, x1, y1, x2, y2, x3, y3: Integer): Boolean;
function Distance(x1, y1, x2, y2: Integer): Integer;
procedure ConvertTime(Ms: Integer; var H, M, S: Integer);
procedure TerminateScript;
SCAR Divi 3.15
--------------
procedure ClearDebug;
function GetStatus: string;
function AppPath: string;
function ScriptPath: string;
procedure AddToReport(s: string);
procedure ClearReport;
procedure MoveToTray;
procedure ActivateClient;
function GetDebugText: String;
procedure DeleteDebugLine(Line: Integer);
function GetDebugLineCount: Integer;
function GetDebugLine(Line: Integer): string;
procedure ClearDebugLine(Line: Integer);
procedure ReplaceDebugLine(Line: Integer; s: string);
function GetClientCanvas: TCanvas;
function GetDebugCanvas: TCanvas;
function GetTimeRunning: Integer;
procedure SetTargetDc(Dc: HDC);
procedure ResetDc;
procedure SetDesktopAsClient;
SCAR Divi 3.20
--------------
function GetTargetDC: HDC;
procedure ResetCaption;
procedure Alert(s: string);
Hm.. I wouldn't advise using that code.
silentwolf, have a look at SMART. It is a plugin too, written in c++.
silentwolf
2010-01-17 15:37:31
I'm not a fan of Delphi syntax… glad I won't have to get my hands dirty :p
Wizzup, did you ever get your C++ plugin (posted in that other thread) to work with normal SCAR (not portable)?
Wanted
2010-01-17 15:39:20
From: Wizzup?
Hm.. I wouldn't advise using that code.
Yea, lol, it's directly from the CppTest and plugin instructions in SCAR hahahah
Wizzup?
2010-01-17 15:47:42
From: silentwolf
I'm not a fan of Delphi syntax… glad I won't have to get my hands dirty :p
Wizzup, did you ever get your C++ plugin (posted in that other thread) to work with normal SCAR (not portable)?
No, I have no clue why it did not work at the time, but I guess it may work now. I really advise looking at SMART, it has it all.
From: IceFire908
Yea, lol, it's directly from the CppTest and plugin instructions in SCAR hahahah
My point.
Raskolnikov
2010-01-17 16:23:47
This is amazing, please write a tutorial. When reflection started I wasn't excited about it, but this is defanetly exciting to figure out.
Gu3st...
2010-01-17 17:13:04
Is there a way to shorten the IDs? so if we want to find the bankers we didn't have to type/remember 27772005 and 588752808 instead of something easy like 2875
mastaraymond
2010-01-17 17:14:28
From: Zyt3x
Is there a way to shorten the IDs? so if we want to find the bankers we didn't have to type/remember 27772005 and 588752808 instead of something easy like 2875
Well really, that doesn't matter now does it? We have computers to remember the ID's.. You could easily replace all those numbers by Strings of what they represent, etc..
mixster
2010-01-17 17:15:06
I would say a collection of global constants that held the ID's would be setup, ie bankers = 27458743; so that you didn't have to.
YoHoJo
2010-01-17 17:17:08
From: Zyt3x
Is there a way to shorten the IDs? so if we want to find the bankers we didn't have to type/remember 27772005 and 588752808 instead of something easy like 2875
Hello there,
Mr. Mysterious man came out of nowhere with a cool fresh new way to detect NPCS, and possibly items, minimap, and map walking, potentially creating a whole new method of easy coding/cheating that will hopefully not break and need to be updated as often as reflection and you ask him for shorter IDs?! :fiery: Lawl!
I'm sorry the IDs are a few digits too long for you, maybe TPAs and autocolor and density and MapWalking will be easier?! :D! Lawl! <3
Gu3st...
2010-01-17 17:32:28
From: YoHoJo
Hello there,
Mr. Mysterious man came out of nowhere with a cool fresh new way to detect NPCS, and possibly items, minimap, and map walking, potentially creating a whole new method of easy coding/cheating that will hopefully not break and need to be updated as often as reflection and you ask him for shorter IDs?! :fiery: Lawl!
I'm sorry the IDs are a few digits too long for you, maybe TPAs and autocolor and density and MapWalking will be easier?! :D! Lawl! <3
Lol xD
I hope that wasn't meant as anything personal, because I didn't get offended at all :redface:
but yeah.. go back to your old tpa, color finding stuff you old croocky man… :fiery: (there should be more "angry"-smilies here, lol)
Ooh sh- maybe we should get back on topic? :whistling:
I think we should let the computers create the shortened ids for us, and then we would have to check a (online) database for the id's.
Every time a user searches for an id, the server checks for matching ids and if there does not exist one then the server will create one unique id for us to use or something..
mixster
2010-01-17 17:34:51
Or you can just create an include file that relates all the commonly used different ID's to a constant.
const
mdl_banker = 2273125;
mdl_chicken = 5847383;
mdl_your_mum = 8008135;
YoHoJo
2010-01-17 17:40:00
Wont we soon just be able to debug the IDs on top of the respective NPCs/Items/whatevers heads, no need to memorize anything, just while you are making the script turn debug on and read the number and type it in. A database of strings for each ID or something would help though.
And no Zyt3x I wasn't srsly angry, just being lol.
Frement
2010-01-17 17:47:10
Yeah the long ID's are no problem. Just a database with the meaning of all ID's and thats it.
Hope to see some new stuff soon :)
Gu3st...
2010-01-17 17:57:57
From: mixster
Or you can just create an include file that relates all the commonly used different ID's to a constant.
const
mdl_banker = 2273125;
mdl_chicken = 5847383;
mdl_your_mum = 8008135;
I'm wondering how my mum would look like in RuneScape.. Probably bald deafult clothes and with a bronze shortsword.
Anyway that might be better, yes.. :redface:
mixster
2010-01-17 20:02:43
Not to derail the topic, but I think your mother is the model they use to create the actual world on top of which the ground etc goes.
Sir R. M8gic1an
2010-01-18 04:11:40
From: mixster
Or you can just create an include file that relates all the commonly used different ID's to a constant.
const
mdl_banker = 2273125;
mdl_chicken = 5847383;
mdl_your_mum = 8008135;
^ Smart man.
~RM
Cigue
2010-01-18 04:23:19
This stuff looks awesome.
Naike
2010-01-18 09:12:50
From: silentwolf
Here's my proper model recognition code in action:
http://i46.tinypic.com/2ak0hfa.png
Previously IDs were changing each time RS is started, now it is static :)
Can someone link me to some info on writing a SCAR plugin? It wont take much to get a GetNPCCoords() function implemented now :)
I don't say this often, but dude, you're epicly awesome. :clown:
Gu3st...
2010-01-19 08:28:37
Lets see some more pictures? :)
Silentwolf, you sir, are amazing :) <3.
From: Sex
Silentwolf, you sir, are amazing :) <3.
I second that, first amazing under 10 poster we've had in…. a while. :)
Rep+
silentwolf
2010-01-19 15:35:54
I've been very busy for the last few days… I might have some free time tomorrow to get this plugin written :)
Floor66
2010-01-19 15:37:30
Take your time man, the things you've done in such a short time are flabbergasting!
King of Knives
2010-01-20 11:00:04
On a slight sidenote to all of this… If wolves howl, how can they be silent?
Gu3st...
2010-01-20 11:09:30
From: King of Knives
On a slight sidenote to all of this… If wolves howl, how can they be silent?
When they aren't ;)
Dervish
2010-01-20 11:13:40
From: Zyt3x
When they don't ;)
fixed.
King of Knives
2010-01-21 11:30:59
It's true a wolf it quiet when it's not howling, but would you call a noisy kid a "silent kid" (meaning the general idea of him) just because he's sleeping at the moment?
Cartmann
2010-01-21 12:12:20
That's because English is filled with flaws! (IMO it shouldn't be the biggest WW language at all!) VIVA LE REVOLUTION!
Cigue
2010-01-21 14:57:14
From: King of Knives
It's true a wolf it quiet when it's not howling, but would you call a noisy kid a "silent kid" (meaning the general idea of him) just because he's sleeping at the moment?
One of the defining attributes of a wolf is that he's silent; as in, it couldn't survive without hunting silently, and it does it well.
One of the defining attributes of a baby is that he won't SHUT THE HELL UP
[/jk]
Cartmann
2010-01-21 15:05:14
From: Cigue
One of the defining attributes of a wolf is that he's silent; as in, it couldn't survive without hunting silently, and it does it well.
One of the defining attributes of a baby is that he won't SHUT THE HELL UP
[/jk]
Nah that's generalising
senrath
2010-01-21 15:58:53
From: Cartmann
That's because English is filled with flaws! (IMO it shouldn't be the biggest WW language at all!) VIVA LE REVOLUTION!
All languages are filled with flaws.
Anyway, to get this back on topic, how's this coming silentwolf? And do you need any help with anything?
Gu3st...
2010-01-21 16:11:48
From: King of Knives
It's true a wolf it quiet when it's not howling, but would you call a noisy kid a "silent kid" (meaning the general idea of him) just because he's sleeping at the moment?
wolf != kid. It's like comparing a seal to a dog, people knows how a dog reacts and behave, but not many people knows how a seal behave
From: Cartmann
That's because English is filled with flaws! (IMO it shouldn't be the biggest WW language at all!) VIVA LE REVOLUTION!
IMO German should be the biggest WW language, it's the language with the fewest flaws in it (I think I've read it somewhere…). That's why so many smart guys and professors learn German, they want to express their meaning without confusion
Dynamite
2010-01-21 16:32:34
Back on topic please?
I am really excited about the progress of this.
Silentwolf := 'Epicman';
:D
Gu3st...
2010-01-21 16:38:58
Lol ok :P
And yeah, silentwolf will become a legend someday :)
Nadeem
2010-01-21 16:41:56
From: Zyt3x
And yeah, silentwolf will become a legend someday :)
+1 :)
very interesting stuff!
~NS
Cartmann
2010-01-21 17:02:23
It seems a little devious to me I must admit.
Like the first day he got here, he started out by showing us some spectacularly technology? Seems a bit odd just to throw stuff like that away to people you barely even know?
So mr. SilentWolf, who are you REALLY? OH, Let me guess? JMOD ALERT!.
//Sherlock Holmes at your service …
Dervish
2010-01-21 17:26:02
From: Cartmann
It seems a little devious to me I must admit.
Like the first day he got here, he started out by showing us some spectacularly technology? Seems a bit odd just to throw stuff like that away to people you barely even know?
So mr. SilentWolf, who are you REALLY? OH, Let me guess? JMOD ALERT!.
//Sherlock Holmes at your service …
It was also very suspicious for me, but I trust him, + what could he achieve ?
i luffs yeww
2010-01-21 18:00:22
From: Dr D. Dervish
It was also very suspicious for me, but I trust him, + what could he achieve ?
In becoming a large part of a botting community which is hard to detect? A lot.
I dunno, maybe I'm just suspicious since nobody has done this before (right?), and then he all of a sudden can do it extremely easily. And OGL isn't that secret of a language, and this stuff is used for FPS bots, but why hasn't anyone done it before? :o
Cigue
2010-01-21 18:01:57
From: i luffs yeww
In becoming a large part of a botting community which is hard to detect? A lot.
I dunno, maybe I'm just suspicious since nobody has done this before (right?), and then he all of a sudden can do it extremely easily. And OGL isn't that secret of a language, and this stuff is used for FPS bots, but why hasn't anyone done it before? :o
High def graphics are relatively new. ;)
i luffs yeww
2010-01-21 18:17:22
RuneTek 5 came out a few months ago, amirite?
Cigue
2010-01-21 18:22:22
It did of course, but I don't know a lot of people who could write an OpenGL plugin. Plus, this forum is relatively hidden so it could hardly have happened weeks after the release of RuneTek5.
By the way, did anybody notice SilentWolf's been away for some time?
Wanted
2010-01-21 18:23:25
From: i luffs yeww
RuneTek 5 came out a few months ago, amirite?
Try
5… and HD has been around even longer. Like 1.5 years.
i luffs yeww
2010-01-21 18:23:38
Well I just think it's a bit odd. ;] I'm not accusing or anything.. :p I can't wait, honestly. :D
So IceFire said RuneTek5 came out five months ago, and HD came out a year and a half ago, so that just makes me more curious about why this hasn't been done yet. Even if it were done unrelated to SCAR, I think it would've been attempted by now.
silentwolf
2010-01-21 18:31:32
This OGL stuff is easy to do. There are many, many people out there that could do a better job than me in less time, but most of these people aren't interested in RS. I'm not quite sure why I feel the need to explain myself, anyway. Take it or leave it.
I've been away for some time because I have been very busy with much more important things.
Anyway, I'm currently stuck trying to get my plugin working with SCAR. If someone could get me a template project working in VC++6 or VC++ 2008 that would save me some time… if not, this could take a little longer. I'm sure I'm just doing something stupid.
senrath
2010-01-21 18:38:39
From: silentwolf
This OGL stuff is easy to do. There are many, many people out there that could do a better job than me in less time, but most of these people aren't interested in RS. I'm not quite sure why I feel the need to explain myself, anyway. Take it or leave it.
Don't worry about it. They're just being paranoid.
silentwolf
2010-01-21 18:49:45
Hello world plugin is working :)
caused
2010-01-21 18:53:12
This is looking cool.
How about a code snipplet, for us to see how to get the Opengl shapes grids, or how you generate ID's for certain shapes.
~caused
mixster
2010-01-21 19:13:11
From: Cartmann
It seems a little devious to me I must admit.
Like the first day he got here, he started out by showing us some spectacularly technology? Seems a bit odd just to throw stuff like that away to people you barely even know?
So mr. SilentWolf, who are you REALLY? OH, Let me guess? JMOD ALERT!.
//Sherlock Holmes at your service …
As long as he is willing to open sauce it, I see no problem. If he were providing a miracle dll with no sauce and no creditations, then there is every right to be suspicious.
From: Zyt3x
IMO German should be the biggest WW language, it's the language with the fewest flaws in it (I think I've read it somewhere…). That's why so many smart guys and professors learn German, they want to express their meaning without confusion
I feel very confident in saying that maths has a lot less flaws in it and is as near to a universal language (on the basic level) as there is :)
silentwolf
2010-01-21 19:27:41
SCAR plugins are weird… But I now have it working properly :)
Maybe I will have some time on Saturday to look into transferring data from my opengl wrapper dll to the SCAR plugin. Once that's done, we have a working OGL model detection scheme :)
Here is some source for a working SCAR c++ plugin. Bit of a hack, but it works.
#include <windows.h>
#define Export _declspec(dllexport)
#define DelphiExport extern "C" Export
DelphiExport int __cdecl GetFunctionInfo(int, void*&, char*&);
DelphiExport int __cdecl GetFunctionCount(void);
DelphiExport void __stdcall hello(void);
HINSTANCE inst;
Export BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, LPVOID checks) {
switch(reason) {
case DLL_PROCESS_ATTACH:
inst = instance;
case DLL_THREAD_ATTACH:
return true;
case DLL_PROCESS_DETACH:
FreeLibrary(inst);
case DLL_THREAD_DETACH:
return true;
}
return false;
}
DelphiExport bool __stdcall FindModelByID(int& x, int& y, int id) {
//interface with opengl wrapper here
x = 10; //just a test
y = id;
return true;
}
DelphiExport int __cdecl GetFunctionCount(void) {
return 1;
}
DelphiExport int __cdecl GetFunctionInfo(int x, void*& address, char*& def) {
switch (x) {
case 0:
address = &FindModelByID;
strcpy(def,"function FindModelByID(var x, y: integer; id: integer): boolean;"); //Have to strcpy, how you want it to be called
return x;
}
return -1;
}
Credits obviously to BenLand and Wizzup.
Kyle Undefined
2010-01-21 23:01:47
Nice work, keep it up. Can't wait till this is usable.
~Camo
Brain
2010-01-22 02:53:12
thanks for the work Silentwolf, can't wait till we get some finished products and some testing in
kingarabian
2010-01-22 03:20:39
Wait, wait, wait! This is almost like reflection… How come all of a sudden its welcomed…
But nonetheless its pretty awesome!
Torrent of Flame
2010-01-22 03:22:42
because its not reflection. can't you read?! it requires no hooks ;)
this is actually awesome, and to top it off, Silentwolf, you're from the UK ;)
kingarabian
2010-01-22 03:25:11
From: Torrent of Flame
because its not reflection. can't you read?! it requires no hooks ;)
this is actually awesome, and to top it off, Silentwolf, you're from the UK ;)
Lol, thats not the point. Some people said it was "to easy".
Edit:
From: BenLand100
Sounds like my early experiments with SMART. I've got a stable dll injector lying around as well as a framework for linking commands from Scar across processes (assuming you don't embed a JVM like I did with SMART)…
Also, before all of you other people let me call you out for being hypocritical: he's using the same principle reflection-based object finding worked on. All those hooks were in the java-side renderer. Just saying.
Nvm Ben beat me to it.
Torrent of Flame
2010-01-22 03:28:05
From: kingarabian
Lol, thats not the point. some People said it was "to easy".
Fix'd.
kingarabian
2010-01-22 03:32:01
From: Torrent of Flame
Fix'd.
Maybe ;).
senrath
2010-01-22 03:49:27
From: kingarabian
Maybe ;).
No, the "some" part was accurate. Not all of us decried reflection for being too easy.
kingarabian
2010-01-22 04:17:23
From: senrath
No, the "some" part was accurate. Not all of us decried reflection for being too easy.
Sure thing, I was meaning the other people. But then we let reflection simply die…
On-topic: Release a tut, and if all is successful, then I cant wait for the death of java bots. Scar/Simba will return to the number one as from before.
mastaraymond
2010-01-22 07:24:25
Stop the spamming,
please. Make a thread in some other section with your feelings towards OpenGL hooking..
Silentwolf, I'm not quite sure how such a OpenGL hook would work. For example, do you need to have any OpenGL libs in your dll to 'hook' the rendering. Also, I'm quite in the dark of how a DLL injection would exactly work, especially when dealing with java apps (Wikipedia gave me some insight, but not enough to make my own DLL injector). Also another bottleneck you might face is that *almost* everyone here is a Pascal-coder.
I know that FPC/Lazarus support
OpenGL. So it might be cool if one would demonstrate how to do such OpenGL hooking in FPC. Although I'm aware that C++ is probably the best language to create this in.
JPHamlett
2010-01-22 16:25:49
is this like reflection or someting
From: kingarabian
Sure thing, I was meaning the other people. But then we let reflection simply die…
On-topic: Release a tut, and if all is successful, then I cant wait for the death of java bots. Scar/Simba will return to the number one as from before.
we did not let reflection die I am constitly working on it there for it is not dead
Floor66
2010-01-22 16:36:46
This isn't like reflection…
This method uses OpenGL in RuneScape HD to find things.
0wn 4 skill
2010-01-22 17:53:27
Wow. Just WOW! I can't wait to see how it turns out :)
No idea what OpenGL is etc. but the main thing is, SRL is coming back with a kick ass bot. You should make it a SRL Members only perk :) It would be a great incentive for people to acquire SRL-Members again.
Infantry001
2010-01-22 23:04:59
From: Floor66
This isn't like reflection…
This method uses OpenGL in RuneScape HD to find things.
The concept is the same - a scripter is now able to call FindNPC(id) again and get the direct coordinates, without having to do any "color searching" and whatnot - essentially, silentwolf will be doing the searching ;)
I'm not hating on it though, this seems very revolutionary =)
BenLand100
2010-01-23 21:37:43
From: silentwolf
Here is some source for a working SCAR c++ plugin. Bit of a hack, but it works.
DelphiExport int __cdecl GetFunctionInfo(int, void*&, char*&);
DelphiExport int __cdecl GetFunctionCount(void);
And that will corrupt your stack like no tomorrow. scar needs stdcall, although gcc mangles stdcall names, so i used cdecl as the convention for those methods and used asm magic to jump into the stdcall method… although you could also just make an export def file.
King of Knives
2010-01-24 14:38:03
Ok, people, I realize you're all interested in this. I am also interested in it, but before going on calling silentwolf either a Jagex employee or the legend of our generation, you should WAIT until he produces something. Yes, to be fair, he is very friendly and I don't think he's a fake, but please for the love of God (or any other deity of your choice or lack thereof), wait for him to make something before applauding him. I've never seen a magician being clapped off the stage before having found your card.
Guys, I went onto Wikipedia and found out how to do what silentwolf's doing… I made it print out a list on the screen that shows the loots of the mob you're fighting!

This isn't saying anything about silentwolf. Just to exemplify for all those who are already ready to take a bullet for him.
-Knives
Infantry001
2010-01-24 14:39:02
King of Knives
2010-01-24 14:47:25
From: Infantry001
He already produced something…
http://www.villavu.com/forum/showthread.php?p=678570#post678570
One day I'll get you, James Bond Junior. ONE DAY!
Infantry001
2010-01-24 14:48:13
;) lol
Dynamite
2010-01-24 15:14:11
From: King of Knives
Ok, people, I realize you're all interested in this. I am also interested in it, but before going on calling silentwolf either a Jagex employee or the legend of our generation, you should WAIT until he produces something. Yes, to be fair, he is very friendly and I don't think he's a fake, but please for the love of God (or any other deity of your choice or lack thereof), wait for him to make something before applauding him. I've never seen a magician being clapped off the stage before having found your card.
Guys, I went onto Wikipedia and found out how to do what silentwolf's doing… I made it print out a list on the screen that shows the loots of the mob you're fighting!

This isn't saying anything about silentwolf. Just to exemplify for all those who are already ready to take a bullet for him.
-Knives
Link pl0x :)
YoHoJo
2010-01-24 15:29:21
King of Knives link to where you learned.
Also SilentWolf shouldalso probably make some tuts to teach us soon so we can all help and develop :D.
Edit:
Oh, it's a joke -.-
mixster
2010-01-24 15:32:17
Yeah, his photo was shopped to make a point that people were blindly defending silent wolf despite him not actually showing anything other pictures, but then he was pointed to where he had produced and shared something that worked.
Dynamite
2010-01-24 15:33:41
Yeh I just noticed that, it old health bars aswell xD
Infantry001
2010-01-24 15:38:29
From: YoHoJo
Also SilentWolf shouldalso probably make some tuts to teach us soon so we can all help and develop :D.
That might be a bit hard - most of us can do the SCAR/Simba side of things, but learning OGL is probably as hard as, if not harder than, reflection.
silentwolf
2010-01-24 16:44:23
IDs for all models:

(meat, bones, mithril pickaxe)
Dynamite
2010-01-24 16:45:50
Ooh, this includes like objects now?
silentwolf
2010-01-24 16:47:22
All 3D models, yes. Not inventory items though.
Dynamite
2010-01-24 16:48:15
Ooh, update the plugins pl0x :D
I wanna finish my project with this :D
Coh3n
2010-01-28 00:29:32
From: silentwolf
IDs for all models:

(meat, bones, mithril pickaxe)
Wow nice, looks like you're making some good progress. :)
EDIT: Sorry, just realized this was not the most recent thread for this topic.
YoHoJo
2010-01-28 00:42:46
From: Infantry001
That might be a bit hard - most of us can do the SCAR/Simba side of things, but learning OGL is probably as hard as, if not harder than, reflection.
Well we can't just rely on one guy, otherwise this will die down like reflection once anything happens to SilentWolf (Probably wont happen, but It would be nice to have multiple/a team of people working on this). We've got to learn. :D I still seriously can't believe there are'nt any java+rs client savy enough people to update/fix reflection here :/. <3 Method!
From: silentwolf
Here's a render of an 'NPC' - really anything that is animated like things drawn in wireframe in the image above. This is actually passed to the gfx card in a different way to everything else (e.g. scenary etc, anything static) so I was just testing I could grab vertex data for animated things as well.

Again, not really sure what it is, but it's clearly something :)
When I get some more time I will work on model rec and WorldToScreen. I can then overlay some text on the x,y coords of each model so you can see what is positioned where in the RS world. Hopefully given time I will also be able to get some kind of animation rec as I believe this will be useful too?
That's a ring.
Wizzup?
2011-10-25 14:56:14
From: c0de
that's a ring.
Date of original post: 01-13-2010. A bit late, no?
Oops forgot to check, nonetheless, seeing as it's getting hyped again, someone might wonder what that was. Seems like that guy was on a good track, what happened to him?
From: c0de
Oops forgot to check, nonetheless, seeing as it's getting hyped again, someone might wonder what that was. Seems like that guy was on a good track, what happened to him?
Your guess is as good as ours.. :/
FeelThaMusiq
2011-10-25 20:46:04
Its interesting that me and Echo_ arent tha only ones think about using tha OpenGL Library…
Wizzup?
2011-11-07 07:15:51
:( I can't see the Mitb link on the work computer. Such a sad day.
Gu3st...
2011-11-07 09:44:34
From: Wizzup?
http://www.moparisthebest.com/smf/index.php/topic,523561.0.html
I'm so glad someone with the knowledge on how to do this finally had time to it :)
Bobzilla69
2011-11-07 09:47:53
I am going to give learning about this a shot, not sure how good i will be at it, but you never know.
hopefully i can come up with something to help
senrath
2011-11-07 11:27:35
Cool. Maybe I'll finally get off my rump and learn more about OpenGL.
mormonman
2011-11-07 11:57:58
Too bad he does it through the installed runescape client…
Wizzup?
2011-11-07 12:07:22
From: mormonman
Too bad he does it through the installed runescape client…
Is that a problem?
Gu3st...
2011-11-07 12:09:27
From: mormonman
Too bad he does it through the installed runescape client…
Why does that matter? Isn't it just their client in a simplified browser?
nokkasiili
2011-11-07 12:34:03
From: mormonman
Too bad he does it through the installed runescape client…
well if you do that different way then you can use browser
like they do aimbots and stuff in quake live
footballjds
2011-11-07 12:37:34
From: Wizzup?
Is that a problem?
I guess he's trying to point out that it wouldn't work with our minimize-able client.
not sure?
mormonman
2011-11-07 12:40:59
From: Wizzup?
Is that a problem?
I would rather modify the opengl32 in the java/bin…makes more sense for when you want to make a special applet like SMART.
masterBB
2011-11-07 13:06:09
From: mormonman
I would rather modify the opengl32 in the java/bin…makes more sense for when you want to make a special applet like SMART.
You need to modify opengl32 in both cases, I don't see the difference?
Wizzup?
2011-11-07 13:44:39
From: mormonman
I would rather modify the opengl32 in the java/bin…makes more sense for when you want to make a special applet like SMART.
That's what is happening, isn't it? Find the jagex cache, override the dll.
mormonman
2011-11-07 13:53:40
From: Wizzup?
That's what is happening, isn't it? Find the jagex cache, override the dll.
With the standalone client it installs it to a specific spot, and that cache is only used for the standalone client. So, unless you find a way to load that client, the normal web client uses the c:/program files/java/jreversion/bin/opengl32.dll which is the one that silentwolf and frement edited. Basically he is crippling his functionality…but I have no clue about loading the standalone client in a smart-type applet(ie one that can be minimized). Its probably possible.
nielsie95
2011-11-07 14:03:01
They're most likely the same library. If the communication part with Simba is done well, it should work there too.
Shuttleu
2011-11-07 14:53:28
its good to see this is being worked on again
~shut
Versus The World
2011-11-07 20:24:07
First time seeing this, I used to write a few aim bots back in the day with openGL, gonna put some time aside to see if I can help expand the project.
Infantry001
2011-11-08 00:39:09
From: Versus The World
First time seeing this, I used to write a few aim bots back in the day with openGL, gonna put some time aside to see if I can help expand the project.
^This is what I'm talking about! :)
Swatarianess
2011-11-13 06:26:03
would this still work with the update? or does it need some fixing up? Because i want to start to get into the reflection development ^^ because without we are doomed :(
Shuttleu
2011-11-13 06:36:44
From: bro433
would this still work with the update? or does it need some fixing up? Because i want to start to get into the reflection development ^^ because without we are doomed :(
no we are not doomed
do you see any scripts?
yes so we are not doomed, this community has run fine for years without reflection
almost everything reflection can do, colour can do as well, its just takes a bit more thinking
~shut
PileOfSilab
2011-11-13 10:09:10
Just move the dll to your JVM/runescape cache dir and it will work the same. as I stated in my thread on MITB I used the downloadable client because I have about 6 JVM's running and didn't want to take the time to figure out which one my browser actually uses. Just down stick it in your system folder.
Swatarianess
2011-11-13 11:04:26
From: Shuttleu
no we are not doomed
do you see any scripts?
yes so we are not doomed, this community has run fine for years without reflection
almost everything reflection can do, colour can do as well, its just takes a bit more thinking
~shut
Ahhh kk :duh: but i do miss reflection :/ one day it will be back ^^ btw isnt possible to get say an NPC in 3D and use distinctive characteristics like certain colors to identify an NPC? Its harder with color i agree but not impossible Reflection only makes it easier ^^
[XoL]
2011-11-14 17:03:06
Possibilities seemed to have opened up all over the board, this is very interesting.
bevardis
2011-11-16 15:06:43
From: bro433
Ahhh kk :duh: but i do miss reflection :/ one day it will be back ^^ btw isnt possible to get say an NPC in 3D and use distinctive characteristics like certain colors to identify an NPC? Its harder with color i agree but not impossible Reflection only makes it easier ^^
Do you miss all those bots too?
Echo_
2011-11-16 17:36:04
From: mormonman
Too bad he does it through the installed runescape client…
It's a she…
My computer science teacher bought me a book on DirectX since I'm way ahead of everyone in C++, so maybe I will be able to put some of the knowledge I gain towards DirectX hooking :)
PileOfSilab
2011-11-17 08:30:05
From: Echo_
It's a she…
My computer science teacher bought me a book on DirectX since I'm way ahead of everyone in C++, so maybe I will be able to put some of the knowledge I gain towards DirectX hooking :)
attached is a good start for working with DXhooking.
Gu3st...
2011-11-17 10:40:29
From: PileOfSilab
attached is a good start for working with DXhooking.
What about DX 10 and 11?
Wizzup?
2011-11-17 11:51:30
From: Echo_
It's a she…
My computer science teacher bought me a book on DirectX since I'm way ahead of everyone in C++, so maybe I will be able to put some of the knowledge I gain towards DirectX hooking :)
He bought you a book? Cool.
Swatarianess
2011-11-21 06:42:00
From: bevardis
Do you miss all those bots too?
lol tbh only miss Nexus cuz i love its API but Reflection is much easier to use than colors for some things… :p
Wizzup?
2011-11-21 06:47:47
From: bro433
lol tbh only miss Nexus cuz i love its API but Reflection is much easier to use than colors for some things… :p
What does its API look like?
Flight
2011-11-21 07:03:21
From: Wizzup?
What does its API look like?
I'd like to know as well. I never used Nexus.
Swatarianess
2011-11-21 10:04:02
From: Wizzup?
What does its API look like?
its pretty sexy :/ its java based so used to it. Its just got alot of pre-made things etc cuz it was all reflection and slightly had some color :/ cant explain what API looked like but was neat and pretty easy to use heres there javaDocs if ur intrested in what they had :/ im not sure if its updated but i used it be4 Nuke day and worked fine for everything i was doing… :D
http://sexyjesus.net/javadocs/ << made by guy called sexyjesus not sure if they have offical javadocs but this should workout fine ^^
oh wait just realized what API meant >.< it uses Java JDK with Coding software like;
EasyEclipse
its pretty nice and neat for complex stuff but imo SRL is gud for everything else :/
jakeyboy29
2011-11-21 13:41:23
tell me if im wrong (sure youd love to) but i think an API was like the wire cage work for a ncp, or object? think that might be right
footballjds
2011-11-21 13:49:50