Ev.IO Aimbot & ESP

Shows players behind walls and aims at the nearest player in Ev.IO

目前为 2022-05-02 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name Ev.IO Aimbot & ESP
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.4
  5. // @description Shows players behind walls and aims at the nearest player in Ev.IO
  6. // @author Zertalious (Zert)
  7. // @match *://ev.io/*
  8. // @icon https://www.google.com/s2/favicons?sz=64&domain=ev.io
  9. // @grant none
  10. // @run-at document-end
  11. // @antifeature ads
  12. // ==/UserScript==
  13.  
  14. let espEnabled = true;
  15. let aimbotEnabled = true;
  16. let espSize = 1;
  17.  
  18. const geometry = new THREE.EdgesGeometry( new THREE.BoxGeometry( 1, 2, 1 ).translate( 0, 1, 0 ) );
  19.  
  20. const material = new THREE.RawShaderMaterial( {
  21. vertexShader: `
  22.  
  23. attribute vec3 position;
  24.  
  25. uniform mat4 projectionMatrix;
  26. uniform mat4 modelViewMatrix;
  27.  
  28. void main() {
  29.  
  30. gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
  31. gl_Position.z = 1.0;
  32.  
  33. }
  34.  
  35. `,
  36. fragmentShader: `
  37.  
  38. void main() {
  39.  
  40. gl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );
  41.  
  42. }
  43.  
  44. `
  45. } );
  46.  
  47. let worldScene;
  48.  
  49. WeakMap.prototype.set = new Proxy( WeakMap.prototype.set, {
  50. apply( target, thisArgs, [ object ] ) {
  51.  
  52. if ( object.type === 'Scene' ) {
  53.  
  54. if ( object.children.length > 4 ) {
  55.  
  56. worldScene = object;
  57.  
  58. console.log( 'SCENE FOUND!', worldScene );
  59.  
  60. }
  61.  
  62. }
  63.  
  64. return Reflect.apply( ...arguments );
  65.  
  66. }
  67. } );
  68.  
  69. const precision = Math.pow( 10, 4 );
  70.  
  71. function createKey( object ) {
  72.  
  73. return Math.round( precision * object.position.x ) + ',' + Math.round( precision * object.position.z );
  74.  
  75. }
  76.  
  77. const canvas = document.getElementById( 'canvas' );
  78.  
  79. function animate() {
  80.  
  81. if ( worldScene ) {
  82.  
  83. let myCamera;
  84.  
  85. const spriteMap = {};
  86.  
  87. const players = [];
  88.  
  89. for ( let i = 0; i < worldScene.children.length; i ++ ) {
  90.  
  91. const child = worldScene.children[ i ];
  92.  
  93. if ( child.type === 'PerspectiveCamera' ) {
  94.  
  95. myCamera = child;
  96.  
  97. } else if ( child.type === 'Sprite' ) {
  98.  
  99. try {
  100.  
  101. if ( child.material.map.image.className === 'canvas_healthbar' ) {
  102.  
  103. child.isEnemy = child.material.depthTest === true;
  104. spriteMap[ createKey( child ) ] = child;
  105.  
  106. }
  107.  
  108. } catch ( err ) {}
  109.  
  110. } else if ( child.name === 'character' ) {
  111.  
  112. if ( ! child.myBox ) {
  113.  
  114. child.myBox = new THREE.LineSegments( geometry, material );
  115. child.add( child.myBox );
  116.  
  117. }
  118.  
  119. child.myBox.scale.setScalar( espSize );
  120.  
  121. players.push( child );
  122.  
  123. }
  124.  
  125. }
  126.  
  127. let targetPlayer;
  128. let minDistance = Infinity;
  129.  
  130. for ( let i = 0; i < players.length; i ++ ) {
  131.  
  132. const player = players[ i ];
  133.  
  134. if ( ! player.sprite || player.sprite.parent !== worldScene ) {
  135. player.sprite = spriteMap[ createKey( player ) ];
  136.  
  137. }
  138.  
  139. player.myBox.visible = player.sprite ? player.sprite.isEnemy && player.sprite.visible : true;
  140.  
  141. if ( player.myBox.visible ) {
  142.  
  143. const d = player.position.distanceTo( myCamera.position );
  144.  
  145. if ( d < minDistance ) {
  146.  
  147. targetPlayer = player;
  148. minDistance = d;
  149.  
  150. }
  151.  
  152. }
  153.  
  154. player.myBox.visible &&= espEnabled;
  155.  
  156. }
  157.  
  158. if ( aimbotEnabled && targetPlayer ) {
  159.  
  160. const yaw = myCamera.rotation.y;
  161. const pitch = myCamera.rotation.x;
  162.  
  163. myCamera.rotation.order = 'YXZ';
  164. myCamera.lookAt( targetPlayer.position.x, targetPlayer.position.y + 1.5, targetPlayer.position.z );
  165.  
  166. canvas.dispatchEvent( new MouseEvent( 'mousemove', {
  167. movementX: ( yaw - myCamera.rotation.y ) * 500,
  168. movementY: ( pitch - myCamera.rotation.x ) * 500
  169. } ) );
  170.  
  171. }
  172.  
  173. }
  174.  
  175. }
  176.  
  177. window.f = 1;
  178.  
  179. window.requestAnimationFrame = new Proxy( window.requestAnimationFrame, {
  180. apply( target, thisArgs, args ) {
  181.  
  182. args[ 0 ] = new Proxy( args[ 0 ], {
  183. apply( target, thisArgs, args ) {
  184.  
  185. Reflect.apply( ...arguments );
  186.  
  187. animate();
  188.  
  189. }
  190. } );
  191.  
  192. return Reflect.apply( ...arguments );
  193.  
  194. }
  195. } );
  196.  
  197. const value = parseInt( new URLSearchParams( window.location.search ).get( 'showAd' ), 16 );
  198.  
  199. const shouldShowAd = isNaN( value ) || Date.now() - value < 0 || Date.now() - value > 10 * 60 * 1000;
  200.  
  201. const el = document.createElement( 'div' );
  202.  
  203. el.innerHTML = `<style>
  204.  
  205. .dialog {
  206. position: absolute;
  207. left: 50%;
  208. top: 50%;
  209. padding: 20px;
  210. background: rgba(50, 0, 0, 0.8);
  211. border: 6px solid rgba(0, 0, 0, 0.2);
  212. color: #fff;
  213. transform: translate(-50%, -50%);
  214. box-shadow: 0 0 0 10000px rgba(0, 0, 0, 0.3);
  215. text-align: center;
  216. z-index: 999999;
  217. }
  218.  
  219. .dialog * {
  220. color: #fff;
  221. }
  222.  
  223. .close {
  224. position: absolute;
  225. right: 5px;
  226. top: 5px;
  227. width: 20px;
  228. height: 20px;
  229. opacity: 0.5;
  230. cursor: pointer;
  231. }
  232.  
  233. .close:before, .close:after {
  234. content: ' ';
  235. position: absolute;
  236. left: 50%;
  237. top: 50%;
  238. width: 100%;
  239. height: 20%;
  240. transform: translate(-50%, -50%) rotate(-45deg);
  241. background: #fff;
  242. }
  243.  
  244. .close:after {
  245. transform: translate(-50%, -50%) rotate(45deg);
  246. }
  247.  
  248. .close:hover {
  249. opacity: 1;
  250. }
  251.  
  252. .dialog .btn {
  253. cursor: pointer;
  254. padding: 0.5em;
  255. background: hsla(0, 67%, 44%, 0.7);
  256. border: 3px solid rgba(0, 0, 0, 0.2);
  257. }
  258.  
  259. .dialog .btn:active {
  260. transform: scale(0.8);
  261. }
  262.  
  263. .msg {
  264. position: absolute;
  265. left: 10px;
  266. bottom: 10px;
  267. background: rgba(50, 0, 0, 0.8);
  268. color: #fff;
  269. padding: 15px;
  270. animation: msg 0.5s forwards, msg 0.5s reverse forwards 3s;
  271. z-index: 999999;
  272. pointer-events: none;
  273. }
  274.  
  275. @keyframes msg {
  276. from {
  277. transform: translate(-120%, 0);
  278. }
  279.  
  280. to {
  281. transform: none;
  282. }
  283. }
  284.  
  285. </style>
  286. <div class="dialog">${shouldShowAd ? `<big>Loading ad...</big>` : `<div class="close" onclick="this.parentNode.style.display='none';"></div>
  287. <big>== Ev.IO ESP ==</big>
  288. <br>
  289. <br>
  290. [V] to toggle ESP
  291. <br>
  292. [B] to toggle aimbot
  293. <br>
  294. [<] or [,] to decrease box size
  295. <br>
  296. [>] or [.] to increase box size
  297. <br>
  298. <br>
  299. By Zertalious
  300. <br>
  301. <br>
  302. <div style="display: grid; grid-gap: 8px; grid-template-columns: 1fr 1fr;">
  303. <div class="btn" onclick="window.open('https://discord.gg/K24Zxy88VM')">Discord</div>
  304. <div class="btn" onclick="window.open('https://www.instagram.com/zertalious/', '_blank')">Instagram</div>
  305. <div class="btn" onclick="window.open('https://twitter.com/Zertalious', '_blank')">Twitter</div>
  306. <div class="btn" onclick="window.open('https://gf.qytechs.cn/en/users/662330-zertalious', '_blank')">More scripts</div>
  307. </div>
  308. ` }
  309. </div>
  310. <div class="msg" style="display: none;"></div>`;
  311.  
  312. const msgEl = el.querySelector( '.msg' );
  313.  
  314. while ( el.children.length > 0 ) {
  315.  
  316. document.body.appendChild( el.children[ 0 ] );
  317.  
  318. }
  319.  
  320. if ( shouldShowAd ) {
  321.  
  322. const url = new URL( window.location.href );
  323.  
  324. url.searchParams.set( 'showAd', Date.now().toString( 16 ) );
  325.  
  326. window.location.href = 'https://zertalious.xyz?ref=' + new TextEncoder().encode( url.href ).toString();
  327.  
  328. }
  329.  
  330. window.addEventListener( 'keyup', function ( event ) {
  331.  
  332. switch ( event.code ) {
  333.  
  334. case 'KeyV':
  335. espEnabled = ! espEnabled;
  336. showMsg( 'ESP: ' + ( espEnabled ? 'ON' : 'OFF' ) );
  337. break;
  338.  
  339. case 'KeyB':
  340. aimbotEnabled = ! aimbotEnabled;
  341. showMsg( 'Aimbot: ' + ( aimbotEnabled ? 'ON' : 'OFF' ) );
  342. break;
  343.  
  344. case 'Comma':
  345. if ( espSize > 1 ) {
  346. espSize --;
  347. showMsg( 'ESP Box Size Descreased' );
  348. }
  349.  
  350. break;
  351.  
  352. case 'Period':
  353.  
  354. if ( espSize < 5 ) {
  355. espSize ++;
  356. showMsg( 'ESP Box Size Increased' );
  357.  
  358. }
  359.  
  360. break;
  361.  
  362. }
  363.  
  364. } );
  365.  
  366. function showMsg( msg ) {
  367.  
  368. msgEl.innerText = msg;
  369.  
  370. msgEl.style.display = 'none';
  371. void msgEl.offsetWidth;
  372.  
  373. msgEl.style.display = '';
  374.  
  375. }

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址