- // ==UserScript==
- // @name Krunker Skid - bushfire-disaster-appeal
- // @namespace https://www.communityenterprisefoundation.com.au/make-a-donation/bushfire-disaster-appeal/
- // @version 1.9.6.2
- // @description krunker.io modification
- // @author Skid Lamer
- // @match *://krunker.io/*
- // @run-at document-start
- // @grant none
- // @noframes
- // ==/UserScript==
- //******************************************************************************************************************
- // If you steal my script and pretend you made it IDC as long as you leave the link to donate to the bushfire appeal
- // and this notice, thankyou - Skid Lamer.
- //******************************************************************************************************************
- (function() {
- //'use strict';
- //======================================================================================>
- var count = 0,
- vars = {};
- const downKeys = new Set();
- const upKeys = new Set();
- const defined = object => typeof object !== "undefined";
- console.json = object => console.log(JSON.stringify(object, undefined, 2));
- let toJson = object => console.log(JSON.stringify(object, undefined, 2));
- let getDistance3D = (fromX, fromY, fromZ, toX, toY, toZ) => {
- var distX = fromX - toX,
- distY = fromY - toY,
- distZ = fromZ - toZ;
- return Math.sqrt(distX * distX + distY * distY + distZ * distZ);
- }
-
- let getDistance = (player1, player2) => {
- return getDistance3D(player1.x, player1.y, player1.z, player2.x, player2.y, player2.z);
- }
-
- let getDirection = (fromZ, fromX, toZ, toX) => {
- return Math.atan2(fromX - toX, fromZ - toZ);
- }
-
- let getXDir = (fromX, fromY, fromZ, toX, toY, toZ) => {
- var dirY = Math.abs(fromY - toY),
- dist = getDistance3D(fromX, fromY, fromZ, toX, toY, toZ);
- return Math.asin(dirY / dist) * (fromY > toY ? -1 : 1);
- }
-
- let getAngleDist = (start, end) => {
- return Math.atan2(Math.sin(end - start), Math.cos(start - end));
- }
-
- addEventListener("keydown", e => {
- if ("INPUT" == window.document.activeElement.tagName) return;
- const key = e.key.toUpperCase();
- const code = e.code;
- if (!downKeys.has(code)) downKeys.add(code);
- });
-
- addEventListener("keyup", e => {
- const key = e.key.toUpperCase();
- const code = e.code;
- if (downKeys.has(code)) downKeys.delete(code);
- if (!upKeys.has(code)) upKeys.add(code);
- })
-
- const Pi = Math.PI / 2;
- const PI2 = 2 * Math.PI;
- const consts = {
- cameraHeight: 1.5,
- playerHeight: 11,
- cameraHeight: 1.5,
- headScale: 2,
- crouchDst: 3,
- camChaseTrn: 0.0022,
- camChaseSpd: 0.0012,
- camChaseSen: 0.2,
- camChaseDst: 24,
- recoilMlt: 0.3,
- nameOffset: 0.6,
- nameOffsetHat: 0.8,
- verClans: [
- "DEV",
- "FaZe",
- "Lore",
- "nV",
- "Oxic",
- "Verb",
- "Omen",
- "ロリ幼女",
- "VOID",
- "JBP",
- "PHIL",
- "TIMP",
- "24/7",
- "g59",
- "GLXY",
- "MMOK",
- "ODTY"
- ],
- };
- const input = {
- speed: 1,
- ydir: 2,
- xdir: 3,
- shoot: 5,
- scope: 6,
- jump: 7,
- crouch: 8,
- reload: 9,
- weapon: 10,
- };
- let settings = {
- isSliding: false,
- distance: Infinity,
- scopingOut: false,
- canShoot: true,
- }
-
- function onTick(me, world, inputs, renderer) {
- 'use strict';
- const controls = world.controls;
- let getInView = (entity) => (null == world[vars.canSee](me, entity.x, entity.y, entity.z)) && (null == world[vars.canSee](renderer.camera[vars.getWorldPosition](), entity.x, entity.y, entity.z, 10));
- let getIsFriendly = (entity) => (me && me.team ? me.team : me.spectating ? 0x1 : 0x0) == entity.team;
- let keyDown = (code) => {
- return downKeys.has(code);
- }
- let keyUp = (code) => {
- if (upKeys.has(code)) {
- upKeys.delete(code);
- return true;
- }
- return false;
- }
-
- // AutoAim
- let ty = controls.object.rotation.y;
- let tx = controls[vars.pchObjc].rotation.x;
- let target = world.players.list.filter(x => {
- x[vars.cnBSeen] = true;
- const inView = getInView(x);
- const isFriendly = getIsFriendly(x);
- return defined(x[vars.objInstances]) && x[vars.objInstances] && x.active && !x.renderYou && inView && !isFriendly
- }).sort((p1, p2) => p1[vars.objInstances].position.distanceTo(me) - p2[vars.objInstances].position.distanceTo(me)).shift();
- if (target) {
- if (me.weapon[vars.nAuto] && me[vars.didShoot]) {
- inputs[input.shoot] = 0;
- } else if (!me.aimVal) {
- inputs[input.shoot] = 1;
- inputs[input.scope] = 1;
- } else {
- inputs[input.scope] = 1;
- }
- let offset1 = ((consts.playerHeight - consts.cameraHeight) - (target.crouchVal * consts.crouchDst));
- let offset2 = consts.playerHeight - consts.headScale / 2 - target.crouchVal * consts.crouchDst;
- ty = getDirection(controls.object.position.z, controls.object.position.x, target.z, target.x);
- tx = getXDir(controls.object.position.x, controls.object.position.y, controls.object.position.z, target.x, target.y + offset2, target.z);
- tx -= consts.recoilMlt * me[vars.recoilAnimY];
- } else {
- inputs[input.shoot] = controls[vars.mouseDownL];
- inputs[input.scope] = controls[vars.mouseDownR];
- }
-
- // silent aim
- inputs[input.xdir] = +(tx % PI2).toFixed(3);
- inputs[input.ydir] = +(ty % PI2).toFixed(3);
-
- // auto bHop
- let autoBhop = (value) => {
- if (!value) return;
- if (keyDown("Space") || value == 1 || value == 3) {
- controls.keys[controls.jumpKey] = !controls.keys[controls.jumpKey];
- if (value >= 2) {
- if (settings.isSliding) {
- controls.keys[controls.crouchKey] = 1;
- return;
- }
- if (me.yVel < -0.04 && me.canSlide) {
- settings.isSliding = true;
- setTimeout(() => {
- settings.isSliding = false;
- controls.keys[controls.crouchKey] = 0;
- }, 350);
- controls.keys[controls.crouchKey] = 1;
- }
- }
- }
- }
- autoBhop(2);
-
- // auto reload
- const ammoLeft = me[vars.ammos][me[vars.weaponIndex]];
- if (!ammoLeft) inputs[input.reload] = 1;
-
- }
-
- function onRender(canvas, scale, world, renderer, me, scale2) {
- if (world && world.players) {
- world.players.list.map((entity, index, array)=> {
- if (defined(entity[vars.objInstances]) && entity[vars.objInstances]) {
- for (let i = 0; i < entity[vars.objInstances].children.length; i++) {
- const object3d = entity[vars.objInstances].children[i];
- for (let j = 0; j < object3d.children.length; j++) {
- const mesh = object3d.children[j];
- if (mesh && mesh.type == "Mesh") {
- const material = mesh.material;
- material.depthTest = 0;
- material.alphaTest = 1;
- //material.emissive.r = 1;
- material.emissive.g = 1;
- material.emissive.b = 1;
- material.wireframe = true;
- }
- }
- }
- }
- });
- }
- if (me) {
- // onTick Hook
- if (!defined(me.procInputs)) {
- // Do once:
- me.procInputs = me[vars.procInputs];
- me[vars.procInputs] = function() {
- const inputs = arguments[0];
- //const world = arguments[1];
- onTick(this, world, inputs, renderer);
- return me.procInputs(...arguments);
- }
- }
- }
- }
-
- function findVariables(script) {
- const regex = new Map()
- .set("procInputs", /this\['(\w+)']=function\((\w+),(\w+),\w+,\w+\){(this)/)
- .set("objInstances", /\[\w+\]\['\w+'\]=!\w+,this\['\w+'\]\[\w+\]\['\w+'\]&&\(this\['\w+'\]\[\w+\]\['(\w+)'\]\['\w+'\]=!\w+/)
- //renderYou //.set("isYou", /,this\['\w+'\]=!\w+,this\['\w+'\]=!\w+,this\['(\w+)'\]=\w+,this\['\w+'\]\['length'\]=\w+,this\[/)
- .set("cnBSeen", /\['(\w+)']=!0x0,!spectating/)
- .set("canSee", /,this\['(\w+)'\]=function\(\w+,\w+,\w+,\w+,\w+\){if\(!\w+\)return!\w+;/)
- .set("pchObjc", /\(\w+,\w+,\w+\),this\['(\w+)'\]=new \w+\['\w+'\]\(\)/)
- .set("recoilAnimY", /\w*1,this\['\w+'\]=\w*0,this\['\w+'\]=\w*0,this\['\w+'\]=\w*1,this\['\w+'\]=\w*1,this\['\w+'\]=\w*0,this\['\w+'\]=\w*0,this\['(\w+)'\]=\w*0,this\['\w+'\]=\w*0,this\['\w+'\]=\w*0,this\['\w+'\]=\w*0,/)
- .set("mouseDownL", /this\['\w+'\]=function\(\){this\['(\w+)'\]=\w*0,this\['(\w+)'\]=\w*0,this\['\w+'\]={}/)
- .set("mouseDownR", /this\['(\w+)']=0x0,this\['keys']=/)
- .set("getWorldPosition", /\['camera']\['(\w+)']\(\);if/)
- .set("maxHealth", /this\['health']\/this\['(\w+)']\?/)
- .set("didShoot", /0x0,this\['(\w+)']=!0x1,this\['lodActive']=!0x1/)
- .set("ammos", /{!\w+\['reloadTimer']&&\w+\['(\w+)']/)
- .set("nAuto", /'(\w+)':!0x0,'burst':/)
- .set("weaponIndex", /\['reloadTimer']&&\w+\['\w+']\[\w+\['(\w+)']/)
- for (const [name, search] of regex) {
- const found = search.exec(script);
- if (!found) {
- alert(`Failed to find ${name}`);
- vars[name] = null;
- continue;
- } else {
- console.log("found ", name, " - ", found[1]);
- vars[name] = found[1];
- }
- }
- }
-
- class Hook {
- constructor(target, fn, blocking = false) {
- this.hook = {
- apply: function(_target, _this, _arguments) {
- let _returnValue = _target.apply(_this, _arguments);
- // uncomment for hook logs - skid
- /*
- console.log('//======================================================================================>');
- console.log('HOOKED: ', _target.name, '\n');
- console.log('Parent: ', _this);
- console.log('Arguments: ', _arguments);
- console.log('ReturnValue: ', _returnValue);
- console.log('//======================================================================================>');
- */
-
- fn({
- main: _this,
- args: _arguments,
- rv: _returnValue
- });
-
- if (!blocking) return _returnValue;
- }
- };
- return new Proxy(target, this.hook);
- }
- };
-
- //======================================================================================>
-
- TextEncoder.prototype.encodeInto = new Hook(TextEncoder.prototype.encodeInto, (params) => {
- const data = params.args;
- if (!count) {
- findVariables(data[0]);
- }
- count++;
- });
-
- const original_CRC2dSave = CanvasRenderingContext2D.prototype.restore;
- CanvasRenderingContext2D.prototype.restore = function() {
- const render = arguments.callee.caller;
- const args = [this.canvas, ...render.arguments];
- render.bind(render.caller, onRender(...args));
- return original_CRC2dSave.apply(this, arguments);
- }
-
- //======================================================================================>
- })();