Krunker.IO AimLock

Locks aim to the nearest player in krunker.io

Před instalací, Sleazy Fork chce abyste věděli, že tento skript obsahuje "antifunkce", což jsou věci, které spíše přispívají autorovi skriptu, než vám.

Tento skript přidává reklamy na vámi navštěvované stránky.

K instalaci tototo skriptu si budete muset nainstalovat rozšíření jako Tampermonkey, Greasemonkey nebo Violentmonkey.

K instalaci tohoto skriptu si budete muset nainstalovat rozšíření jako Tampermonkey nebo Violentmonkey.

K instalaci tohoto skriptu si budete muset nainstalovat rozšíření jako Tampermonkey nebo Violentmonkey.

K instalaci tohoto skriptu si budete muset nainstalovat rozšíření jako Tampermonkey nebo Userscripts.

You will need to install an extension such as Tampermonkey to install this script.

K instalaci tohoto skriptu si budete muset nainstalovat manažer uživatelských skriptů.

(Už mám manažer uživatelských skriptů, nechte mě ho nainstalovat!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(Už mám manažer uživatelských stylů, nechte mě ho nainstalovat!)

// ==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 ] );

}