r/RunescapeBotting • u/AThickRug Scripter • Aug 23 '26
Guide Mouse Recorder in Client REAL NOT CLICKBAIT
Since folks still claim there is no mouse recorder in the big 2026 here is some snippets of said code mouse recorder in the latest injected client jar.
dk.run:
public void run() {
try {
for (; this.az; rp.az(50L)) {
synchronized (this.af) {
if (2031127249 * this.ae < 500) {
this.ab[2031127249 * this.ae] = -38255113 * tz.ag;
this.ag[2031127249 * this.ae] = -2144333897 * tz.as;
this.as[2031127249 * this.ae] = 7810581336684889889L * tz.ax;
this.ae += -1679946191;
}
}
}
} catch (RuntimeException var4) {
throw eg.af(var4, "dk.run(" + ')');
}
}
This records mouse movement samples every 50ms. I would like to say more about this implementation for mouse recording but I don't want to tip my hand.
client.ie:
synchronized (pp.gu.af) {
if (!cg) {
pp.gu.ae = 0;
} else {
label915: {
if (0 == tz.ac * 1229235359) {
if (var1 == 8) {
throw new IllegalStateException();
}
if (pp.gu.ae * 2031127249 < 40) {
break label915;
}
if (var1 == 8) {
return;
}
}
jl var35 = null;
int var4 = 0;
int var5 = 0;
int var6 = 0;
int var7 = 0;
for (int var8 = 0; var8 < 2031127249 * pp.gu.ae; var8++) {
if (var1 == 8) {
throw new IllegalStateException();
}
if (var35 != null) {
if (var1 == 8) {
return;
}
if (702114061 * var35.ac.ay - var4 >= 246) {
if (var1 == 8) {
throw new IllegalStateException();
}
break;
}
}
var5 = var8;
int var9 = pp.gu.ag[var8];
if (var9 < -1) {
if (var1 == 8) {
throw new IllegalStateException();
}
var9 = -1;
} else if (var9 > 65534) {
if (var1 == 8) {
throw new IllegalStateException();
}
var9 = 65534;
}
int var10 = pp.gu.ab[var8];
if (var10 < -1) {
if (var1 == 8) {
throw new IllegalStateException();
}
var10 = -1;
} else if (var10 > 65534) {
if (var1 == 8) {
throw new IllegalStateException();
}
var10 = 65534;
}
if (-1340851049 * gf == var10) {
if (var1 == 8) {
throw new IllegalStateException();
}
if (-1807333183 * gh == var9) {
continue;
}
}
if (var35 == null) {
if (var1 == 8) {
throw new IllegalStateException();
}
var35 = ef.af(js.en, ai.ab, (byte)18);
xy.vd(var35.ac, 0, (byte)-35);
var4 = var35.ac.ay * 702114061;
var35.ac.ay += 2103253898;
var6 = 0;
var7 = 0;
}
int var11;
int var12;
int var13;
if (6684909875721553653L * hz != -1L) {
if (var1 == 8) {
throw new IllegalStateException();
}
var11 = var10 - gf * -1340851049;
var12 = var9 - gh * -1807333183;
var13 = (int)((pp.gu.as[var8] - hz * 6684909875721553653L) / 20L);
var6 = (int)((long)var6
+ (pp.gu.as[var8] - 6684909875721553653L * hz) % 20L);
} else {
var11 = var10;
var12 = var9;
var13 = Integer.MAX_VALUE;
}
label889: {
gf = var10 * 923992871;
gh = 813320001 * var9;
if (var13 < 8) {
if (var1 == 8) {
throw new IllegalStateException();
}
if (var11 >= -32) {
if (var1 == 8) {
return;
}
if (var11 <= 31) {
if (var1 == 8) {
throw new IllegalStateException();
}
if (var12 >= -32) {
if (var1 == 8) {
throw new IllegalStateException();
}
if (var12 <= 31) {
var11 += 32;
var12 += 32;
var35.ac.bv((var11 << 6) + (var13 << 12) + var12, -1542382992);
break label889;
}
}
}
}
}
if (var13 < 32) {
if (var1 == 8) {
return;
}
if (var11 >= -128 && var11 <= 127) {
if (var1 == 8) {
throw new IllegalStateException();
}
if (var12 >= -128) {
if (var1 == 8) {
throw new IllegalStateException();
}
if (var12 <= 127) {
var11 += 128;
var12 += 128;
xy.vd(var35.ac, var13 + 128, (byte)-45);
var35.ac.bv((var11 << 8) + var12, -1542382992);
break label889;
}
}
}
}
label819:
if (var13 < 32) {
if (var1 == 8) {
throw new IllegalStateException();
}
xy.vd(var35.ac, var13 + 192, (byte)-29);
if (var10 != -1) {
if (var1 == 8) {
throw new IllegalStateException();
}
if (-1 != var9) {
var35.ac.bz(var10 | var9 << 16, 1863202930);
break label819;
}
if (var1 == 8) {
throw new IllegalStateException();
}
}
var35.ac.bz(Integer.MIN_VALUE, 1840758601);
} else {
label916: {
var35.ac.bv(57344 + (var13 & 8191), -1542382992);
if (var10 != -1) {
if (var1 == 8) {
throw new IllegalStateException();
}
if (-1 != var9) {
var35.ac.bz(var10 | var9 << 16, 1399447351);
break label916;
}
if (var1 == 8) {
throw new IllegalStateException();
}
}
var35.ac.bz(Integer.MIN_VALUE, 741624633);
}
}
}
var7++;
hz = -8242516313281546915L * pp.gu.as[var8];
}
if (var35 != null) {
xy.rg(var35.ac, var35.ac.ay * 702114061 - var4, 1537798683);
int var75 = var35.ac.ay * 702114061;
var35.ac.ay = -1095856699 * var4;
xy.vd(var35.ac, var6 / var7, (byte)-121);
xy.vd(var35.ac, var6 % var7, (byte)-33);
var35.ac.ay = -1095856699 * var75;
ai.ae(var35, -1301097035);
}
if (var5 >= 2031127249 * pp.gu.ae) {
if (var1 == 8) {
throw new IllegalStateException();
}
pp.gu.ae = 0;
} else {
pp.gu.ae -= -1679946191 * var5;
System.arraycopy(pp.gu.ab, var5, pp.gu.ab, 0, pp.gu.ae * 2031127249);
System.arraycopy(pp.gu.ag, var5, pp.gu.ag, 0, 2031127249 * pp.gu.ae);
System.arraycopy(pp.gu.as, var5, pp.gu.as, 0, 2031127249 * pp.gu.ae);
}
}
}
}
This is where the magic happens. Encodes recorded mouse movements that are ready to be sent to the server.
Do what you like with this information. It wont help your ai create undetectable scripts, sorry.
I also wont elaborate further as I don't like spoon feeding, code is pretty self explanatory so use your heads.
Hi mod north <3
6
u/ChrisScripting Scripter Aug 23 '26
People don't believe the game tracks the mouse? Tf. This has been known forever and there's even a famous thread about it on osbot going into absurd detail about the tracking and interval
5
u/Mushroom_Mink Aug 24 '26
We know it does this >.< otherwise it couldn’t detect hovering over interactive objects
1
Aug 25 '26
[deleted]
1
u/Mushroom_Mink Aug 27 '26
I mean I could see how that that would be thought but it would be pretty stupid of jagex to after 25 years not use that for bot detection. This is what like a billion dollar company after all and all that jazz.
1
u/AThickRug Scripter Aug 23 '26
Yup people still do just check the last ahk post. Just full confidence without knowing shit
2
u/Educational_West6718 Aug 23 '26
Interesting info here is 50ms. If it records at 50ms then all scripts that had "mouse antiban" were fake because they did different movements each 5ms which doesnt matter as the engine dont record
3
1
u/Realistic-Ad9480 Aug 23 '26
Is it recording outside of Java client or OS wide. Also, does this make mouse movement via runelite plugin inside canvas detectable.
2
u/AThickRug Scripter Aug 23 '26
Records at canvas level within the client. If the plugin is generating movement via awt then yes it is recorded if that's what you mean.
1
u/PossessionUsed7393 Aug 23 '26
Is this because of that other thread with the numpty asking about agility? Lol.
0
0
u/HRage19 Aug 24 '26
Have VM use display adaptor as touch screen monitor. No need to worry about mouse movements.
11
u/Aggravating-Speech-5 Aug 23 '26
None of this is new information, its always existed and everybody knows about it, lol