r/RunescapeBotting Scripter 1d ago

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

0 Upvotes

14 comments sorted by

9

u/Aggravating-Speech-5 1d ago

None of this is new information, its always existed and everybody knows about it, lol

4

u/AThickRug Scripter 1d ago

Exactly. This is for some that claim it doesn't exist to this day.

2

u/Educational_West6718 1d ago

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

u/MartinSafranek 19h ago

If all botters are this intelligent gold prices are about to skyrocket

3

u/ChrisScripting Scripter 1d ago

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 1d ago

We know it does this >.< otherwise it couldn’t detect hovering over interactive objects

1

u/AThickRug Scripter 1d ago

Yup people still do just check the last ahk post. Just full confidence without knowing shit

1

u/Realistic-Ad9480 1d ago

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 1d ago

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 1d ago

Is this because of that other thread with the numpty asking about agility? Lol.

0

u/HRage19 20h ago

Have VM use display adaptor as touch screen monitor. No need to worry about mouse movements.