// ==UserScript== // @name 1v1.LOL Aimbot, ESP & Wireframe View // @namespace http://tampermonkey.net/ // @version 1.2 // @description Let's you see players behind walls. Comes with a wireframe view mode and an aimbot too. Press M, N and T to toggle them. // @author Zertalious (Zert) // @match *://1v1.lol/* // @match *://1v1.school/* // @icon https://www.google.com/s2/favicons?domain=1v1.lol // @grant none // @run-at document-start // @antifeature ads // @require https://cdn.jsdelivr.net/npm/lil-gui@0.19 // @downloadURL https://update.greasyfork.org/scripts/440267/1v1LOL%20Aimbot%2C%20ESP%20%20Wireframe%20View.user.js // @updateURL https://update.greasyfork.org/scripts/440267/1v1LOL%20Aimbot%2C%20ESP%20%20Wireframe%20View.meta.js // ==/UserScript== const isSchoolLink = window.location.hostname.indexOf( '1v1.school' ) > - 1; const searchSize = 300; const threshold = 4.5; const settings = { aimbot: false, aimbotSpeed: 0.15, esp: true, wireframe: true, createdBy: 'Zertalious', showHelp() { dialogEl.style.display = dialogEl.style.display === '' ? 'none' : ''; } }; let gui; function initGui() { gui = new lil.GUI(); const controllers = {}; for ( const key in settings ) { controllers[ key ] = gui.add( settings, key ).name( fromCamel( key ) ).listen(); } controllers.aimbotSpeed.min( 0.05 ).max( 0.5 ).step( 0.01 ); controllers.createdBy.disable(); } function fromCamel( text ) { const result = text.replace( /([A-Z])/g, ' $1' ); return result.charAt( 0 ).toUpperCase() + result.slice( 1 ); } const WebGL = WebGL2RenderingContext.prototype; HTMLCanvasElement.prototype.getContext = new Proxy( HTMLCanvasElement.prototype.getContext, { apply( target, thisArgs, args ) { if ( args[ 1 ] ) { args[ 1 ].preserveDrawingBuffer = true; } return Reflect.apply( ...arguments ); } } ); WebGL.shaderSource = new Proxy( WebGL.shaderSource, { apply( target, thisArgs, args ) { let [ shader, src ] = args; if ( src.indexOf( 'gl_Position' ) > - 1 ) { if ( src.indexOf( 'OutlineEnabled' ) > - 1 ) { shader.isPlayerShader = true; } src = src.replace( 'void main', ` out float vDepth; uniform bool enabled; uniform float threshold; void main ` ).replace( /return;/, ` vDepth = gl_Position.z; if ( enabled && vDepth > threshold ) { gl_Position.z = 1.0; } ` ); } else if ( src.indexOf( 'SV_Target0' ) > - 1 ) { src = src.replace( 'void main', ` in float vDepth; uniform bool enabled; uniform float threshold; void main ` ).replace( /return;/, ` if ( enabled && vDepth > threshold ) { SV_Target0 = vec4( 1.0, 0.0, 0.0, 1.0 ); } ` ); } args[ 1 ] = src; return Reflect.apply( ...arguments ); } } ); WebGL.attachShader = new Proxy( WebGL.attachShader, { apply( target, thisArgs, [ program, shader ] ) { if ( shader.isPlayerShader ) program.isPlayerProgram = true; return Reflect.apply( ...arguments ); } } ); WebGL.getUniformLocation = new Proxy( WebGL.getUniformLocation, { apply( target, thisArgs, [ program, name ] ) { const result = Reflect.apply( ...arguments ); if ( result ) { result.name = name; result.program = program; } return result; } } ); WebGL.uniform4fv = new Proxy( WebGL.uniform4fv, { apply( target, thisArgs, [ uniform ] ) { const name = uniform && uniform.name; if ( name === 'hlslcc_mtx4x4unity_ObjectToWorld' || name === 'hlslcc_mtx4x4unity_ObjectToWorld[0]' ) { uniform.program.isUIProgram = true; } return Reflect.apply( ...arguments ); } } ); let movementX = 0, movementY = 0; let count = 0; let gl; const handler = { apply( target, thisArgs, args ) { const program = thisArgs.getParameter( thisArgs.CURRENT_PROGRAM ); if ( ! program.uniforms ) { program.uniforms = { enabled: thisArgs.getUniformLocation( program, 'enabled' ), threshold: thisArgs.getUniformLocation( program, 'threshold' ) }; } const couldBePlayer = ( isSchoolLink || program.isPlayerProgram ) && args[ 1 ] > 3000; program.uniforms.enabled && thisArgs.uniform1i( program.uniforms.enabled, ( settings.esp || settings.aimbot ) && couldBePlayer ); program.uniforms.threshold && thisArgs.uniform1f( program.uniforms.threshold, threshold ); args[ 0 ] = settings.wireframe && ! program.isUIProgram && args[ 1 ] > 6 ? thisArgs.LINES : args[ 0 ]; if ( couldBePlayer ) { gl = thisArgs; } Reflect.apply( ...arguments ); } }; WebGL.drawElements = new Proxy( WebGL.drawElements, handler ); WebGL.drawElementsInstanced = new Proxy( WebGL.drawElementsInstanced, handler ); window.requestAnimationFrame = new Proxy( window.requestAnimationFrame, { apply( target, thisArgs, args ) { args[ 0 ] = new Proxy( args[ 0 ], { apply() { update(); return Reflect.apply( ...arguments ); } } ); return Reflect.apply( ...arguments ); } } ); function update() { const isPlaying = document.querySelector( 'canvas' ).style.cursor === 'none'; rangeEl.style.display = isPlaying && settings.aimbot ? '' : 'none'; if ( settings.aimbot && gl ) { const width = Math.min( searchSize, gl.canvas.width ); const height = Math.min( searchSize, gl.canvas.height ); const pixels = new Uint8Array( width * height * 4 ); const centerX = gl.canvas.width / 2; const centerY = gl.canvas.height / 2; const x = Math.floor( centerX - width / 2 ); const y = Math.floor( centerY - height / 2 ); gl.readPixels( x, y, width, height, gl.RGBA, gl.UNSIGNED_BYTE, pixels ); for ( let i = 0; i < pixels.length; i += 4 ) { if ( pixels[ i ] === 255 && pixels[ i + 1 ] === 0 && pixels[ i + 2 ] === 0 && pixels[ i + 3 ] === 255 ) { const idx = i / 4; const dx = idx % width; const dy = ( idx - dx ) / width; movementX += ( x + dx - centerX ); movementY += - ( y + dy - centerY ); count ++; } } } if ( count > 0 && isPlaying ) { const f = settings.aimbotSpeed / count; movementX *= f; movementY *= f; window.dispatchEvent( new MouseEvent( 'mousemove', { movementX, movementY } ) ); rangeEl.classList.add( 'range-active' ); } else { rangeEl.classList.remove( 'range-active' ); } movementX = 0; movementY = 0; count = 0; gl = null; } const value = parseInt( new URLSearchParams( window.location.search ).get( 'showAd' ), 16 ); const shouldShowAd = isNaN( value ) || Date.now() - value < 0 || Date.now() - value > 10 * 60 * 1000; const el = document.createElement( 'div' ); el.innerHTML = `