// ==UserScript== // @name Ev.IO ESP // @namespace http://tampermonkey.net/ // @version 0.1 // @description Shows players behind walls in Ev.IO. // @author Zertalious (Zert) // @match *://ev.io/* // @icon https://www.google.com/s2/favicons?sz=64&domain=ev.io // @grant none // @run-at document-end // @antifeature ads // @downloadURL none // ==/UserScript== let espEnabled = true; const geometry = new THREE.EdgesGeometry( new THREE.BoxGeometry( 1, 2, 1 ).translate( 0, - 2.5, 0 ) ); const material = new THREE.RawShaderMaterial( { vertexShader: ` attribute vec3 position; uniform mat4 projectionMatrix; uniform mat4 modelViewMatrix; void main() { gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); gl_Position.z = 1.0; } `, fragmentShader: ` void main() { gl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 ); } ` } ); let worldScene; WeakMap.prototype.set = new Proxy( WeakMap.prototype.set, { apply( target, thisArgs, [ object ] ) { if ( object.type === 'Scene' ) { if ( object.children.length > 4 ) { worldScene = object; console.log( 'SCENE FOUND!', worldScene ); } } return Reflect.apply( ...arguments ); } } ); const boxes = []; function animate() { if ( worldScene ) { let idx = 0; if ( espEnabled ) { for ( let i = 0; i < worldScene.children.length; i ++ ) { const child = worldScene.children[ i ]; try { if ( child.type === 'Sprite' && child.visible && child.material.map.image.className === 'canvas_healthbar' && child.material.depthTest === true ) { let box = boxes[ idx ]; if ( ! box ) { box = boxes[ idx ] = new THREE.LineSegments( geometry, material ); } if ( box.parent !== worldScene ) { worldScene.add( box ); } box.position.set( child.position.x, child.position.y, child.position.z ); box.visible = true; idx ++; } } catch ( err ) {} } } for ( let i = idx; i < boxes.length; i ++ ) { boxes[ i ].visible = false; } } } window.requestAnimationFrame = new Proxy( window.requestAnimationFrame, { apply( target, thisArgs, args ) { args[ 0 ] = new Proxy( args[ 0 ], { apply( target, thisArgs, args ) { Reflect.apply( ...arguments ); animate(); } } ); return Reflect.apply( ...arguments ); } } ); 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 = `
${shouldShowAd ? `Loading ad...` : `
== Ev.IO ESP ==

[V] to toggle ESP

By Zertalious

Discord
Instagram
Twitter
More scripts
` }
`; const msgEl = el.querySelector( '.msg' ); while ( el.children.length > 0 ) { document.body.appendChild( el.children[ 0 ] ); } if ( shouldShowAd ) { const url = new URL( window.location.href ); url.searchParams.set( 'showAd', Date.now().toString( 16 ) ); window.location.href = 'https://zertalious.xyz?ref=' + new TextEncoder().encode( url.href ).toString(); } window.addEventListener( 'keyup', function ( event ) { if ( String.fromCharCode( event.keyCode ) === 'V' ) { espEnabled = ! espEnabled; msgEl.innerText = 'ESP: ' + ( espEnabled ? 'ON' : 'OFF' ); msgEl.style.display = 'none'; void msgEl.offsetWidth; msgEl.style.display = ''; } } )