Guest User

Untitled

a guest
Nov 3rd, 2019
1,078
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.91 KB | None | 0 0
  1. // ==UserScript==
  2. // @name Krunker WheelChair
  3. // @namespace https://github.com/hrt
  4. // @version 1.8.3
  5. // @description WheelChair
  6. // @author hrt x ttap
  7. // @match *://krunker.io/*
  8. // @run-at document-start
  9. // @grant none
  10. // ==/UserScript==
  11.  
  12. (function(){
  13. var hideHook = function(fn, oFn) { fn.toString = oFn.toString.bind(oFn); }
  14.  
  15. window.hrtCheat = function(me, inputs, world, consts, math) {
  16. var controls = world.controls;
  17. const SHOOT = 5, SCOPE = 6, xDr = 3, yDr = 2, JUMP = 7, CROUCH = 8;
  18. var isEnemy = function(player) {return !me.team || player.team != me.team};
  19. var canHit = function(player) {return null == world.canHit(me, player.x3, player.y3 - player.crouchVal * consts.crouchDst, player.z3)};
  20. var normaliseYaw = function(yaw) {return (yaw % Math.PI2 + Math.PI2) % Math.PI2;};
  21. var dAngleTo = function(x, y, z) {
  22. var ty = normaliseYaw(math.getDirection(controls.object.position.z, controls.object.position.x, z, x));
  23. var tx = math.getXDir(controls.object.position.x, controls.object.position.y, controls.object.position.z, x, y, z);
  24. var oy = normaliseYaw(controls.object.rotation.y);
  25. var ox = controls.pitchObject.rotation.x;
  26. var dYaw = Math.min(Math.abs(ty - oy), Math.abs(ty - oy - Math.PI2), Math.abs(ty - oy + Math.PI2));
  27. var dPitch = tx - ox;
  28. return Math.hypot(dYaw, dPitch);
  29. };
  30. var calcAngleTo = function(player) {return dAngleTo(e.x3, e.y3 + consts.playerHeight - (consts.headScale + consts.hitBoxPad) / 2 - e.crouchVal * consts.crouchDst, e.z3);};
  31. var calcDistanceTo = function(player) {return math.getDistance3D(player.x3, player.y3, player.z3, me.x, me.y, me.z)};
  32. var isCloseEnough = function(player) {var distance = calcDistanceTo(player); return me.weapon.range >= distance && ("Shotgun" != me.weapon.name || distance < 70) && ("Akimbo Uzi" != me.weapon.name || distance < 100);};
  33. var haveAmmo = function() {return me.ammos[me.weaponIndex];};
  34. // runs once
  35. if (!window.init) {
  36. window.init = true;
  37. /*************************************/
  38. /* crimpeek / faster bullets removed */
  39. /*************************************/
  40.  
  41. var drawVisuals = function(c) {
  42. var scalingFactor = arguments.callee.caller.caller.arguments[0];
  43. var perspective = arguments.callee.caller.caller.arguments[2];
  44. var scaledWidth = c.canvas.width / scalingFactor;
  45. var scaledHeight = c.canvas.height / scalingFactor;
  46. var worldPosition = perspective.camera.getWorldPosition();
  47. for (var i = 0; i < world.players.list.length; i++) {
  48. var player = world.players.list[i];
  49. var e = players[i];
  50. if (e.isYou || !e.active || !e.objInstances || !isEnemy(e)) {
  51. continue;
  52. }
  53. // find min x, max x, min y, max y
  54. // optimisation: we can already tell what ymin ymax is
  55. var xmin = Infinity;
  56. var xmax = -Infinity;
  57. var ymin = Infinity;
  58. var ymax = -Infinity;
  59. var br = false;
  60. for (var j = -1; !br && j < 2; j+=2) {
  61. for (var k = -1; !br && k < 2; k+=2) {
  62. for (var l = 0; !br && l < 2; l++) {
  63. var position = e.objInstances.position.clone();
  64. position.x += j * consts.playerScale;
  65. position.z += k * consts.playerScale;
  66. position.y += l * (consts.playerHeight - e.crouchVal * consts.crouchDst);
  67. if (!perspective.frustum.containsPoint(position)) {
  68. br = true;
  69. break;
  70. }
  71. position.project(perspective.camera);
  72. xmin = Math.min(xmin, position.x);
  73. xmax = Math.max(xmax, position.x);
  74. ymin = Math.min(ymin, position.y);
  75. ymax = Math.max(ymax, position.y);
  76. }
  77. }
  78. }
  79.  
  80. if (br) {
  81. continue;
  82. }
  83.  
  84. xmin = (xmin + 1) / 2;
  85. ymin = (ymin + 1) / 2;
  86. xmax = (xmax + 1) / 2;
  87. ymax = (ymax + 1) / 2;
  88.  
  89.  
  90. c.save();
  91.  
  92. // perfect box esp
  93. c.lineWidth = 5;
  94. c.strokeStyle = 'rgba(255,50,50,1)';
  95.  
  96. var distanceScale = Math.max(.3, 1 - math.getDistance3D(worldPosition.x, worldPosition.y, worldPosition.z, e.x, e.y, e.z) / 600);
  97. c.scale(distanceScale, distanceScale);
  98. var xScale = scaledWidth / distanceScale;
  99. var yScale = scaledHeight / distanceScale;
  100.  
  101. c.beginPath();
  102. ymin = yScale * (1 - ymin);
  103. ymax = yScale * (1 - ymax);
  104. xmin = xScale * xmin;
  105. xmax = xScale * xmax;
  106. c.moveTo(xmin, ymin);
  107. c.lineTo(xmin, ymax);
  108. c.lineTo(xmax, ymax);
  109. c.lineTo(xmax, ymin);
  110. c.lineTo(xmin, ymin);
  111. c.stroke();
  112.  
  113. // health bar
  114. c.fillStyle = "rgba(255,50,50,1)";
  115. var barMaxHeight = ymax - ymin;
  116. c.fillRect(xmin - 7, ymin, -10, barMaxHeight);
  117. c.fillStyle = "#00FFFF";
  118. c.fillRect(xmin - 7, ymin, -10, barMaxHeight * (e.health / e.maxHealth));
  119.  
  120. // info
  121. c.font = "60px Sans-serif";
  122. c.fillStyle = "white";
  123. c.strokeStyle='black';
  124. c.lineWidth = 1;
  125. var x = xmax + 7;
  126. var y = ymax;
  127. c.fillText(e.name, x, y);
  128. c.strokeText(e.name, x, y);
  129. c.font = "30px Sans-serif";
  130. y += 35;
  131. c.fillText(e.weapon.name, x, y);
  132. c.strokeText(e.weapon.name, x, y);
  133. y += 35;
  134. c.fillText(e.health + ' HP', x, y);
  135. c.strokeText(e.health + ' HP', x, y);
  136.  
  137. c.restore();
  138.  
  139. // skelly chams
  140. // note: this should probably be else where - it affects all players
  141. var material = e.legMeshes[0].material;
  142. material.alphaTest = 1;
  143. material.depthTest = false;
  144. material.fog = false;
  145. material.emissive.r = 1;
  146. material.emissive.g = 1;
  147. material.emissive.b = 1;
  148. material.wireframe = true;
  149.  
  150. }
  151. }
  152. // render all the visuals
  153. var original_clearRect = CanvasRenderingContext2D.prototype.clearRect;
  154. CanvasRenderingContext2D.prototype.clearRect = function(...args){
  155. original_clearRect.apply(this, args);
  156. drawVisuals(this);
  157. };
  158. }
  159.  
  160. // target selector - based on closest to aim
  161. var closest = null, closestAngle = Infinity;
  162. var players = world.players.list;
  163. for (var i = 0; me.active && i < players.length; i++) {
  164. var e = players[i];
  165. if (e.isYou || !e.active || !e.objInstances || !isEnemy(e)) {
  166. continue;
  167. }
  168.  
  169. // experimental prediction removed - otherwise they'd be in x3 y3 z3
  170. e.x3 = e.x;
  171. e.y3 = e.y;
  172. e.z3 = e.z;
  173.  
  174. if (!isCloseEnough(e) || !canHit(e)) {
  175. continue;
  176. }
  177.  
  178. var angle = calcAngleTo(e);
  179. if (angle < closestAngle) {
  180. closestAngle = angle;
  181. closest = e;
  182. }
  183. }
  184.  
  185. // aimbot
  186. // hrt's big brain got a six pack
  187. var ty = controls.object.rotation.y, tx = controls.pitchObject.rotation.x;
  188. if (closest) {
  189. var target = closest;
  190. // No idea why public cheats are using target distance in aimbot calc
  191. // No idea why it's so difficult for people to not use magic numbers here
  192. var y = target.y3 + consts.playerHeight - (consts.headScale/* + consts.hitBoxPad*/) / 2 - target.crouchVal * consts.crouchDst;
  193. if (me.weapon.nAuto && me.didShoot) {
  194. inputs[SHOOT] = 0;
  195. } else if (!me.aimVal) { // me.recoilAnimY < 0.1 - if you want to shoot more slower and perhaps more accurately
  196. // inputs[CROUCH] = 1; // auto crouch
  197. inputs[SHOOT] = 1;
  198. inputs[SCOPE] = 1;
  199. } else {
  200. // inputs[CROUCH] = 1; // auto crouch
  201. inputs[SCOPE] = 1;
  202. }
  203.  
  204. ty = math.getDirection(controls.object.position.z, controls.object.position.x, target.z3, target.x3);
  205. tx = math.getXDir(controls.object.position.x, controls.object.position.y, controls.object.position.z, target.x3, y, target.z3);
  206.  
  207. // perfect recoil control..?
  208. tx -= .3 * me.recoilAnimY;
  209. } else {
  210. inputs[SHOOT] = controls.mouseDownL;
  211. inputs[SCOPE] = controls.mouseDownR;
  212. // inputs[CROUCH] = controls.keys[controls.crouchKey] * 1; // auto crouch
  213. }
  214.  
  215. // silent aim
  216. inputs[xDr] = (tx % Math.PI2).round(3);
  217. inputs[yDr] = (ty % Math.PI2).round(3);
  218.  
  219. // auto reload
  220. controls.keys[controls.reloadKey] = !haveAmmo();
  221.  
  222. inputs[JUMP] = (controls.keys[controls.jumpKey] && !me.didJump) * 1;
  223. }
  224.  
  225. // only big iq people read this ttap#4547
  226. // big up my boy hrt and ttap for releasing
  227. const handler = {
  228. construct(target, args) {
  229. if (args.length == 2 && args[1].includes('Seen')) {
  230. var script = args[1];
  231.  
  232. var hook = /(\w+)\['tmpInputs'\]\['push'\]\((\w+)\),/;
  233. var tokens = script.match(hook);
  234. var inputs = tokens[2];
  235. var world = script.match(/(\w+)\['players'\]\['updateMesh'\]/)[1];
  236. var consts = script.match(/(\w+)\['thirdPX'\],/)[1];
  237. var me = script.match(/\((\w+)\|\|window\['spectating'\]\)/)[1];
  238. var math = script.match(/\['xDr'\]\+(\w+)\['getDirection'\]/)[1];
  239.  
  240. var ttapParams = [me, inputs, world, consts, math];
  241.  
  242. // Doesn't make sense to hook aimbot anywhere else - unlike every other public cheat
  243. script = script.replace(hook, tokens[0] + '(' + hrtCheat.toString() + ')(' + ttapParams + '),');
  244.  
  245. // remove renders
  246. script = script.replace(/'none'==menuHolder\['style'\]\['display'\]&&'none'==endUI\['style'\]\['display'\]\)/g, 'false)');
  247.  
  248. // all weapons trails on
  249. script = script.replace(/\w+\['weapon'\]&&\w+\['weapon'\]\['trail'\]/g, "true")
  250.  
  251. // color blind mode
  252. script = script.replace(/#9eeb56/g, '#00FFFF');
  253.  
  254. // no zoom
  255. script = script.replace(/,'zoom':.+?(?=,)/g, ",'zoom':1");
  256.  
  257. // an extremely old canHit / autowall function creator that doesn't alter canSee
  258. // dumb asf but if it still works then should I touch it :thinking:
  259. var canSee = script.match(/this\['canSee'\]\=function.+?(?=return null;})/)[0] + "return null;}";
  260. var canHit = canSee.replace(/canSee/g, "canHit");
  261. canHit = canHit.replace(/\|\|0x0;/, "||0x0;var pcount=0;");
  262. var player = canHit.match(/function\(([a-zA-Z0-9]*),/)[1];
  263. var object = canHit.match(/([a-zA-Z0-9]*)\=this\['map'\]\['manager'\]\['objects'/)[1];
  264. var statement = canHit.match(/\['transparent'\]\){(.+?(?=}))/)[1];
  265. var ret = statement.match(/return [a-zA-Z0-9]*/)[0];
  266. statement = statement.replace(ret, "{pcount+=1; if(pcount>1&&"+player+".weapon.pierce>0.8){"+ret+"}}");
  267. var search = canHit.match(/return [a-zA-Z0-9]*;\}/)[0];
  268. canHit = canHit.replace(search, search + 'else if('+object+'.active&&'+object+'.penetrable){'+statement+'}')
  269. search = canHit.match(/\![a-zA-Z0-9]*\['transparent'\]/)[0];
  270. // todo: onhit logic doesn't make sense
  271. canHit = canHit.replace(search, "(!"+object+".penetrable||!"+player+".weapon.pierce)");
  272. script = script.replace(",this['canSee']", ","+canHit+",this['canSee']");
  273.  
  274. args[1] = script;
  275. }
  276. return new target(...args);
  277. }
  278. };
  279. const decode = TextDecoder.prototype.decode;
  280. TextDecoder.prototype.decode = function () {
  281. var script = decode.apply(this, arguments);
  282. if (script.length > /*Lemons*/ 80000 && script[0] === '!') {
  283.  
  284. var hook = /(\w+)\['tmpInputs'\]\['push'\]\((\w+)\),/;
  285. var tokens = script.match(hook);
  286. var inputs = tokens[2];
  287. var world = script.match(/(\w+)\['players'\]\['updateMesh'\]/)[1];
  288. var consts = script.match(/(\w+)\['thirdPX'\],/)[1];
  289. var me = script.match(/\((\w+)\|\|window\['spectating'\]\)/)[1];
  290. var math = script.match(/\['xDr'\]\+(\w+)\['getDirection'\]/)[1];
  291.  
  292. var ttapParams = [me, inputs, world, consts, math];
  293.  
  294. // Doesn't make sense to hook aimbot anywhere else - unlike every other public cheat
  295. script = script.replace(hook,(a,b) => {
  296. return `${a}window.hrtCheat(${ttapParams }),`});
  297.  
  298. // remove renders
  299. script = script.replace(/'none'==menuHolder\['style'\]\['display'\]&&'none'==endUI\['style'\]\['display'\]\)/g, 'false)');
  300.  
  301. // all weapons trails on
  302. script = script.replace(/\w+\['weapon'\]&&\w+\['weapon'\]\['trail'\]/g, "true")
  303.  
  304. // color blind mode
  305. script = script.replace(/#9eeb56/g, '#00FFFF');
  306.  
  307. // no zoom
  308. script = script.replace(/,'zoom':.+?(?=,)/g, ",'zoom':1");
  309.  
  310. // an extremely old canHit / autowall function creator that doesn't alter canSee
  311. // dumb asf but if it still works then should I touch it :thinking:
  312. var canSee = script.match(/this\['canSee'\]\=function.+?(?=return null;})/)[0] + "return null;}";
  313. var canHit = canSee.replace(/canSee/g, "canHit");
  314. canHit = canHit.replace(/\|\|0x0;/, "||0x0;var pcount=0;");
  315. var player = canHit.match(/function\(([a-zA-Z0-9]*),/)[1];
  316. var object = canHit.match(/([a-zA-Z0-9]*)\=this\['map'\]\['manager'\]\['objects'/)[1];
  317. var statement = canHit.match(/\['transparent'\]\){(.+?(?=}))/)[1];
  318. var ret = statement.match(/return [a-zA-Z0-9]*/)[0];
  319. statement = statement.replace(ret, "{pcount+=1; if(pcount>1&&"+player+".weapon.pierce>0.8){"+ret+"}}");
  320. var search = canHit.match(/return [a-zA-Z0-9]*;\}/)[0];
  321. canHit = canHit.replace(search, search + 'else if('+object+'.active&&'+object+'.penetrable){'+statement+'}')
  322. search = canHit.match(/\![a-zA-Z0-9]*\['transparent'\]/)[0];
  323. // todo: onhit logic doesn't make sense
  324. canHit = canHit.replace(search, "(!"+object+".penetrable||!"+player+".weapon.pierce)");
  325. script = script.replace(",this['canSee']", ","+canHit+",this['canSee']");
  326.  
  327. TextDecoder.prototype.decode = decode;
  328. }
  329.  
  330. return script;
  331. }
  332. })()
Add Comment
Please, Sign In to add comment