TravisV10
2008-09-20 18:14:22
Can anyone explain to me how RSBot and programs like that work? How could you create a Java program to inject variables? (excuse me if my Java lingo isn't correct xD)
Thanks!
~Travis
Thanks!
~Travis
2008-09-20 18:14:22
2008-09-20 18:25:38
public final int[] getNPCIndexArray()
{
return se.z;
}
public final NPC[] getNPCArray()
{
return sf.db;
}
public final int getNPCCount()
{
return of.N;
}
public final int[] getPlayerIndexArray()
{
return jh.d;
}
public final Player[] getPlayerArray()
{
return we.i;
}
public final int getPlayerCount()
{
return kd.B;
}
public final int getBaseX()
{
return j.s;
}
public final Player getMyPlayer()
{
return wi.T;
}
public final int getBaseY()
{
return fd.Y;
}
public final int getPublicChatMode()
{
return uf.W;
}
public final int getLoopCycle()
{
return fj.a;
}
public final int getSelfInteracting()
{
return mj.I;
}
public final int[][][] getGroundIntArray()
{
return ec.N;
}
public final byte[][][] getGroundByteArray()
{
return je.C;
}
public final int getPlane()
{
return f.E;
}
public final int getCamPosX()
{
return n.a;
}
public final int getCamPosY()
{
return ha.T;
}
public final int getCamPosZ()
{
return rb.h;
}
public final int getCameraCurveY()
{
return mh.A;
}
public final int getCameraCurveX()
{
return ig.cb;
}
public final boolean[] getValidInterfaceArray()
{
return hg.N;
}
public final RSString getCurrentPassword()
{
return fk.B;
}
public final RSString getCurrentUsername()
{
return fk.J;
}
public final Interface[][] getInterfaceCache()
{
return ri.bb;
}
public final int getIdleTime()
{
return hf.P;
}
public final Mouse getMouse()
{
return p.t;
}
public final Keyboard getKeyboard()
{
return si.c;
}
public final Callback getCallback()
{
return callback;
}
public final void setCallback(Callback arg0)
{
callback = arg0;
}
public final int getMouseX()
{
return tf.w;
}
public final int getMouseY()
{
return sb.E;
}
public final int getMousePressX()
{
return cd.y;
}
public final int getMousePressY()
{
return bf.q;
}
public final int getMousePressButton()
{
return hb.W;
}
public final int getMousePressLastButton()
{
return ng.t;
}
public final long getMousePressTime()
{
return da.g;
}
public final int getLoginIndex()
{
return cj.a;
}
public final int[] getSettingArray()
{
return dj.eb;
}
public final Ground[][][] getGroundArray()
{
return eg.e;
}
public final int[] getSkillExperiencesMax()
{
return bc.c;
}
public final int[] getSkillLevelMaxes()
{
return bi.d;
}
public final int[] getSkillLevels()
{
return of.t;
}
public final int[] getSkillExperiences()
{
return wc.T;
}
public final int getMinimapInt3()
{
return ad.f;
}
public final int[] getCURVECOS()
{
return qg.d;
}
public final int[] getCURVESIN()
{
return qg.g;
}
public final int getMinimapInt2()
{
return ee.mb;
}
public final int getMinimapInt1()
{
return sg.hb;
}
public final NodeList[][][] getNodeListArray()
{
return jg.d;
}
public final RSString[] getChatMessages()
{
return sh.d;
}
public final RSString[] getChatNames()
{
return wd.n;
}
public final int[] getChatTypes()
{
return ja.d;
}
public final int getMenuOptionsCount()
{
return gj.h;
}
public final boolean isMenuOpen()
{
return kd.C;
}
public final int getMenuY()
{
return pd.b;
}
public final int getMenuX()
{
return ig.gb;
}
public final RSString[] getMenuOptions()
{
return pe.nb;
}
public final RSString[] getMenuActions()
{
return bb.j;
}
public final short[] getActionID()
{
return ke.m;
}
public final long[] getActionCmd1()
{
return pd.r;
}
public final int[] getActionCmd2()
{
return fd.T;
}
public final int[] getActionCmd3()
{
return oj.o;
}
public final Signlink getSignlink()
{
return sc.o;
}
public final boolean isFlagged()
{
return mh.B;
}
public final boolean isSpellSelected()
{
return r.E;
}
public final int getItemSelected()
{
return wb.db;
}
public final RSString getSelectedItemName()
{
return ik.ub;
}
public final int spellUsableOn()
{
return ud.d;
}
public final RSString getSelectedSpellName()
{
return vd.m;
}
public final MRUNodes getObjectDefMRUNodes()
{
return wc.H;
}
public final MRUNodes getItemDefMRUNodes()
{
return th.D;
}
public final boolean isMembers()
{
return rg.d;
}
public final Sprite getMinimapSprite()
{
return (Sprite)ba.fb;
}
public final Sprite[] getMapDots()
{
return (Sprite[])nf.v;
}
public final long[] getFriendListAsLongs()
{
return jd.B;
}
public final int[] getFriendNodeIDs()
{
return td.S;
}
public final int getFriendCount()
{
return tf.F;
}
public final int getDestX()
{
return oa.u;
}
public final int getDestY()
{
return ja.e;
}
public final Sprite[] getMapMarkers()
{
return (Sprite[])pb.q;
}
public final int[][] getCost()
{
return jg.v;
}
public final int[][] getVia()
{
return lc.cb;
}
public final GroundData[] getGroundDataArray()
{
return db.j;
}
2008-09-20 18:27:54
From: Mylesmadness
Rsbot makes a function(I know that not the real name) that returns the value of the hook.public final int[] getNPCIndexArray()
{
return se.z;
}
public final NPC[] getNPCArray()
{
return sf.db;
}
public final int getNPCCount()
{
return of.N;
}
public final int[] getPlayerIndexArray()
{
return jh.d;
}
public final Player[] getPlayerArray()
{
return we.i;
}
public final int getPlayerCount()
{
return kd.B;
}
public final int getBaseX()
{
return j.s;
}
public final Player getMyPlayer()
{
return wi.T;
}
public final int getBaseY()
{
return fd.Y;
}
public final int getPublicChatMode()
{
return uf.W;
}
public final int getLoopCycle()
{
return fj.a;
}
public final int getSelfInteracting()
{
return mj.I;
}
public final int[][][] getGroundIntArray()
{
return ec.N;
}
public final byte[][][] getGroundByteArray()
{
return je.C;
}
public final int getPlane()
{
return f.E;
}
public final int getCamPosX()
{
return n.a;
}
public final int getCamPosY()
{
return ha.T;
}
public final int getCamPosZ()
{
return rb.h;
}
public final int getCameraCurveY()
{
return mh.A;
}
public final int getCameraCurveX()
{
return ig.cb;
}
public final boolean[] getValidInterfaceArray()
{
return hg.N;
}
public final RSString getCurrentPassword()
{
return fk.B;
}
public final RSString getCurrentUsername()
{
return fk.J;
}
public final Interface[][] getInterfaceCache()
{
return ri.bb;
}
public final int getIdleTime()
{
return hf.P;
}
public final Mouse getMouse()
{
return p.t;
}
public final Keyboard getKeyboard()
{
return si.c;
}
public final Callback getCallback()
{
return callback;
}
public final void setCallback(Callback arg0)
{
callback = arg0;
}
public final int getMouseX()
{
return tf.w;
}
public final int getMouseY()
{
return sb.E;
}
public final int getMousePressX()
{
return cd.y;
}
public final int getMousePressY()
{
return bf.q;
}
public final int getMousePressButton()
{
return hb.W;
}
public final int getMousePressLastButton()
{
return ng.t;
}
public final long getMousePressTime()
{
return da.g;
}
public final int getLoginIndex()
{
return cj.a;
}
public final int[] getSettingArray()
{
return dj.eb;
}
public final Ground[][][] getGroundArray()
{
return eg.e;
}
public final int[] getSkillExperiencesMax()
{
return bc.c;
}
public final int[] getSkillLevelMaxes()
{
return bi.d;
}
public final int[] getSkillLevels()
{
return of.t;
}
public final int[] getSkillExperiences()
{
return wc.T;
}
public final int getMinimapInt3()
{
return ad.f;
}
public final int[] getCURVECOS()
{
return qg.d;
}
public final int[] getCURVESIN()
{
return qg.g;
}
public final int getMinimapInt2()
{
return ee.mb;
}
public final int getMinimapInt1()
{
return sg.hb;
}
public final NodeList[][][] getNodeListArray()
{
return jg.d;
}
public final RSString[] getChatMessages()
{
return sh.d;
}
public final RSString[] getChatNames()
{
return wd.n;
}
public final int[] getChatTypes()
{
return ja.d;
}
public final int getMenuOptionsCount()
{
return gj.h;
}
public final boolean isMenuOpen()
{
return kd.C;
}
public final int getMenuY()
{
return pd.b;
}
public final int getMenuX()
{
return ig.gb;
}
public final RSString[] getMenuOptions()
{
return pe.nb;
}
public final RSString[] getMenuActions()
{
return bb.j;
}
public final short[] getActionID()
{
return ke.m;
}
public final long[] getActionCmd1()
{
return pd.r;
}
public final int[] getActionCmd2()
{
return fd.T;
}
public final int[] getActionCmd3()
{
return oj.o;
}
public final Signlink getSignlink()
{
return sc.o;
}
public final boolean isFlagged()
{
return mh.B;
}
public final boolean isSpellSelected()
{
return r.E;
}
public final int getItemSelected()
{
return wb.db;
}
public final RSString getSelectedItemName()
{
return ik.ub;
}
public final int spellUsableOn()
{
return ud.d;
}
public final RSString getSelectedSpellName()
{
return vd.m;
}
public final MRUNodes getObjectDefMRUNodes()
{
return wc.H;
}
public final MRUNodes getItemDefMRUNodes()
{
return th.D;
}
public final boolean isMembers()
{
return rg.d;
}
public final Sprite getMinimapSprite()
{
return (Sprite)ba.fb;
}
public final Sprite[] getMapDots()
{
return (Sprite[])nf.v;
}
public final long[] getFriendListAsLongs()
{
return jd.B;
}
public final int[] getFriendNodeIDs()
{
return td.S;
}
public final int getFriendCount()
{
return tf.F;
}
public final int getDestX()
{
return oa.u;
}
public final int getDestY()
{
return ja.e;
}
public final Sprite[] getMapMarkers()
{
return (Sprite[])pb.q;
}
public final int[][] getCost()
{
return jg.v;
}
public final int[][] getVia()
{
return lc.cb;
}
public final GroundData[] getGroundDataArray()
{
return db.j;
}
2008-09-20 19:02:16
From: born2code
How does it do that?
2008-09-20 19:14:05
2008-09-21 01:16:40
2008-09-21 03:58:09
2008-09-21 05:05:24
From: n3ss3s
Not going to read the another new pages, so just to make it clear, RSBot is a client hacking bot, it is not a reflection bot.
Sometimes these two are called Reflection and Injection, the latter one being the hacking one. Injection bots inject accessor methods to their RuneScape.jar that they use for the game, when reflection bots usually just read it from the server's RuneScape.jar. Accessor methods could be explained in SCAR like this -
Program New;
Var
I: Integer;
Function getBaseX: Integer;
// Here is our accessor method.
Begin
Result := i;
End;
begin
I := 3; // Now, by looking for different patterns that the updater author
// has found to be good, his updater can find that
// Our variable I, which wouldn't be alone like this normally,
// is for example the BaseX.
end.
The above code was a pretty overall description, if someone with more knowledge about this area has something to say, go ahead :)
2008-09-21 09:17:12
2008-09-21 10:37:59
From: Buckleyindahouse
Anyone know how this could be done in C#. I saw Jaco make a bot in C# he called it the Cosmo Bot I believe and it was like nexus and rsbot.
2008-09-21 13:42:33
From: Buckleyindahouse
Anyone know how this could be done in C#. I saw Jaco make a bot in C# he called it the Cosmo Bot I believe and it was like nexus and rsbot.
From: born2code
Why would you want to even do it in C#? Do you not know Java?
2008-09-21 14:08:23
From: born2code
Why would you want to even do it in C#? Do you not know Java?
2008-09-22 00:52:40
2008-09-22 07:05:31
2008-09-22 07:38:37
another thing you can do with bcel is inject callbacks so they behave a bit like events, like every time an Item spawns, you can make it invoke a method in your bot, then your bot can easily go pick it up or something.
more efficient then just looping through the item array.
2008-09-22 12:59:00
From: Yakman
no you cant, even if you found a java bytecode library for c#
if you inject the getter methods, you need to invoke them to get the useful data,
c# cannot invoke java methods, therefore you cant make a bot like that.
runescape is written in java, to make stuff like this you have to use java as well.
another thing you can do with bcel is inject callbacks so they behave a bit like events, like every time an Item spawns, you can make it invoke a method in your bot, then your bot can easily go pick it up or something.
more efficient then just looping through the item array.
^ not even reflection can do that.
<rant-about-c#>
java came years before c#, it seems to me to be a typical example of microsoft copying everything thats good and trying to piggyback its success.
c# is windows-only and its closed source.
in short, c# is useless for writing a bot like this, but it is possible to write a colour-clicker like nexus as someone mentioned before,
for a colour-clicker, i would still suggest c/c++ or delphi
2008-09-22 18:55:48
//some stuff with the client
//this bit gets called when a new item spawns
int newPosX =
int newPosY =
int newItemID =
/** callback inserted here with bcel **/
MyBotClass.itemSpawned(newPosX, newPosY, newItemID);
//other stuff
public class MyBotClass {
public static void itemSpawned(int newPosX, int newPosY, int newItemID) {
//do stuff with this information, like check what the item is and pick if up if you want
}
}
2008-09-22 19:43:21
2008-09-22 20:02:48
From: born2code
So how difficult would it be for you (Yakman), with your knowledge, to start a bot and have it get 1 or 2 variables from the RS Client.
2008-09-23 01:15:08
//this bit gets called when a new item spawns
2008-09-23 15:41:49
//some stuff with the client
//this bit gets called when a new item spawns
int newPosX =
int newPosY =
int newItemID =
/** callback inserted here with bcel **/
MyBotClass.itemSpawned(newPosX, newPosY, newItemID);
//other stuffpublic class MyBotClass {
public static void itemSpawned(int newPosX, int newPosY, int newItemID) {
//do stuff with this information, like check what the item is and pick if up if you want
}
}and when itemSpawned method in your bot gets called by your client you could do something likepublic static void itemSpawned(int newPosX, int newPosY, int newItemID) {
clickItem(newPosX, newPosY, newItemID);
}
}2008-09-23 16:08:02
private static Object jobLock;
private static Queue<Job> jobQueue;
public static void itemSpawned(int newPosX, int newPosY, int newItemID) {
synchronized(jobLock) {
jobQueue.add(new ClickItemJob(newPosX, newPosY, newItemID));
jobLock.notify();
}
}
}
//this runs in another thread
public void run() {
try {
while(true) {
Job job;
synchronized(jobLock) {
if(jobQueue.isEmpty())
jobLock.wait();
job = jobQueue.poll();
}
job.doJob();
}
}
catch(InterruptedException ex) {
//to stop this thread, you do thread.interrupt() which makes it jump
//outside the while loop to here, so it ends.
}
}
2008-09-23 16:30:57
2008-09-23 17:47:51
From: born2codeMaybe private. He is just uber in java and C(++?)
Yakman, am I missing something? Have you created a bot before?
2008-09-24 08:10:19
2008-09-24 19:50:34
From: Runescape Pro
I just google'd it and found this: http://www.smfsupport.com/support/java/bcel_tutorial-t5178.0.html
It's a BCEL tutorial… with credits to Yakman. It's times like these where i wish i knew java so i could write my own bot… anyways, this tutorial confused the sh*t out of me so i skimmed through it for 30 secs =P
2008-09-24 19:56:29
From: tniffoc
Hi guys,
I am following this tutorial but, when I got to the end, it seemed un-finished. Is this the case? If so, could someone point me to a better one?
Thanks,
Tniffoc
2008-09-24 20:38:11
From: Method
What are you looking for beyond what the tutorial mentions?
2008-09-24 20:42:37
MethodGen(int access_flags, Type return_type, Type[] arg_types, String[] arg_names, String method_name, String class_name, InstructionList il, ConstantPoolGen cp) 2008-09-24 20:46:11
From: Method
The constructor is this:MethodGen(int access_flags, Type return_type, Type[] arg_types, String[] arg_names, String method_name, String class_name, InstructionList il, ConstantPoolGen cp)
It gives the basics of BCEL and client hacking, but if you'd like to learn more, check out tutorials and updaters at MoparIsTheBest.com.
Also, you don't install BCEL. You just reference its classes from a class file. For example, you can create a project in EasyEclipse and include it as an external jar to be able to access its classes.
2008-09-26 15:24:47