Krunker.IO AimLock

Locks aim to the nearest player in krunker.io

Pred inštaláciou vás Sleazy Fork upozorňuje, že tento skript obsahuje antifeatures, ktoré sú skôr v prospech autora skriptu ako vo váš prospech.

Tento skript bude vkladať reklamu na stránky, ktoré navštívite.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, Greasemonkey alebo Violentmonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, % alebo Violentmonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, % alebo Violentmonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey alebo Userscripts.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie, ako napríklad Tampermonkey.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie správcu používateľských skriptov.

(Už mám správcu používateľských skriptov, nechajte ma ho nainštalovať!)

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

(Už mám správcu používateľských štýlov, nechajte ma ho nainštalovať!)

// ==UserScript==
// @name         Krunker.IO AimLock
// @namespace    http://tampermonkey.net/
// @version      0.0.47
// @description  Locks aim to the nearest player in krunker.io
// @author       Hrishidagoar
// @match        *://krunker.io/*
// @icon         https://www.google.com/s2/favicons?domain=krunker.io
// @grant        none
// @run-at       document-end
// @require      https://unpkg.com/three@latest/build/three.min.js
// @antifeature  ads
// ==/UserScript==

const tempVector = new THREE.Vector3();

const tempObject = new THREE.Object3D();

tempObject.rotation.order = 'YXZ';

const geometry = new THREE.SphereGeometry( 10 );

const material = new THREE.MeshLambertMaterial( {
	color: 'red',
	wireframe: true
} );

const meshes = [];

let isActive = true;

let scene;

WeakMap.prototype.set = new Proxy( WeakMap.prototype.set, {
	apply( target, thisArgs, args ) {

		if ( args[ 0 ].type === 'Scene' && args[ 0 ].name === 'Main' ) {

			scene = args[ 0 ];

		}

		return Reflect.apply( ...arguments );

	}
} );

function animate() {

	window.requestAnimationFrame( animate );

	if ( isActive === false || scene === undefined ) {

		return;

	}

	const players = [];

	let myPlayer;

	for ( let i = 0; i < scene.children.length; i ++ ) {

		const child = scene.children[ i ];

		if ( child.type === 'Object3D' ) {

			try {

				if ( child.children[ 0 ].children[ 0 ].type === 'PerspectiveCamera' ) {

					myPlayer = child;

				} else {

					players.push( child );

				}

			} catch ( err ) {}

		}

	}

	if ( players.length < 2 ) {

		return;

	}

	let targetPlayer;
	let minDistance = Infinity;

	for ( let i = 0; i < players.length; i ++ ) {

		const player = players[ i ];

		if ( player.position.x === myPlayer.position.x && player.position.z === myPlayer.position.z ) {

			continue;

		}

		if ( player.firstTime !== true ) {

			const mesh = new THREE.Mesh( geometry, material );

			meshes.push( mesh );

			player.add( mesh );

			player.firstTime = true;

		}

		const distance = player.position.distanceTo( myPlayer.position );

		if ( distance < minDistance ) {

			targetPlayer = player;

			minDistance = distance;

		}

	}

	if ( targetPlayer === undefined ) {

		return;

	}

	tempVector.setScalar( 0 );

	targetPlayer.children[ 0 ].children[ 0 ].localToWorld( tempVector );

	tempObject.position.copy( myPlayer.position );

	tempObject.lookAt( tempVector );

	myPlayer.children[ 0 ].rotation.x = - tempObject.rotation.x;
	myPlayer.rotation.y = tempObject.rotation.y + Math.PI;

}

animate();

window.addEventListener( 'keydown', function ( event ) {

	if ( String.fromCharCode( event.keyCode ) === 'G' ) {

		isActive = ! isActive;

		for ( let i = 0; i < meshes.length; i ++ ) {

			meshes[ i ].visible = isActive;

		}

	}

} );

const shouldShowAd = window.localStorage.showAd !== false && new URLSearchParams( window.location.search ).get( 'showAd' ) !== 'false';

const el = document.createElement( 'div' );

el.innerHTML = `<style>

.dialog {
	position: absolute;
	left: 50%;
	top: 50%;
	padding: 20px;
	background: rgba(0, 0, 0, 0.8);
	border: 6px solid rgba(0, 0, 0, 0.2);
	color: #fff;
	transform: translate(-50%, -50%);
	text-align: center;
	z-index: 999999;
}

.dialog * {
	color: #fff;
}

.close {
	position: absolute;
	right: 5px;
	top: 5px;
	width: 20px;
	height: 20px;
	opacity: 0.5;
	cursor: pointer;
}

.close:before, .close:after {
	content: ' ';
	position: absolute;
	left: 50%;
	top: 50%;
	width: 100%;
	height: 20%;
	transform: translate(-50%, -50%) rotate(-45deg);
	background: #fff;
}

.close:after {
	transform: translate(-50%, -50%) rotate(45deg);
}

.close:hover {
	opacity: 1;
}

.btn {
	cursor: pointer;
	padding: 0.5em;
	background: red;
	border: 3px solid rgba(0, 0, 0, 0.2);
	margin-bottom: 5px;
}

.btn:active {
	transform: scale(0.8);
}

</style>
<div class="dialog">${shouldShowAd ? `<big>Loading ad...</big>` : `<div class="close" onclick="this.parentNode.style.display='none';"></div>
	<big>== Aimlocker ==</big>
	<br>
	<br>
	[G] to toggle aimlock
	<br>
	<br>
	By Zertalious
	<br>
	<br>
	<div class="btn" onclick="window.open('https://discord.gg/K24Zxy88VM')">Discord</div>
	<div class="btn" onclick="window.open('https://www.instagram.com/zertalious/', '_blank')">Instagram</div>
	<div class="btn" onclick="window.open('https://twitter.com/Zertalious', '_blank')">Twitter</div>
	<div class="btn" onclick="window.open('https://greasyfork.org/en/users/662330-zertalious', '_blank')">More scripts</div>
	` }
</div>`;

while ( el.children.length > 0 ) {

	document.body.appendChild( el.children[ 0 ] );

}