Greasy Fork镜像 支持简体中文。

Ev.IO ChronoHack

Free ChronoHack cheat for the game ev.io with features such as esp, convenient aimbot and beautiful clickgui

  1. // ==UserScript==
  2. // @name Ev.IO ChronoHack
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.1.2
  5. // @description Free ChronoHack cheat for the game ev.io with features such as esp, convenient aimbot and beautiful clickgui
  6. // @author ilyxa05
  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. // @license MIT
  13. // ==/UserScript==
  14.  
  15. let espEnabled = false;
  16. let aimbotEnabled = false;
  17. let tracers = true;
  18. let espSize = 1;
  19. const ver = 'v0.1';
  20. let AIMBOT_FOV = THREE.MathUtils.degToRad(50);
  21. let AIMBOT_DELAY = 300; // 300 миллисекунд = 0.3 секунды
  22.  
  23. const geometry = new THREE.EdgesGeometry( new THREE.BoxGeometry( 1, 2, 1 ).translate( 0, 1, 0 ) );
  24.  
  25. const material = new THREE.RawShaderMaterial( {
  26. vertexShader: `
  27.  
  28. attribute vec3 position;
  29.  
  30. uniform mat4 projectionMatrix;
  31. uniform mat4 modelViewMatrix;
  32.  
  33. void main() {
  34.  
  35. gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
  36. gl_Position.z = 1.0;
  37.  
  38. }
  39.  
  40. `,
  41. fragmentShader: `
  42.  
  43. void main() {
  44.  
  45. gl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );
  46.  
  47. }
  48.  
  49. `
  50. } );
  51.  
  52. let worldScene;
  53.  
  54. WeakMap.prototype.set = new Proxy( WeakMap.prototype.set, {
  55. apply( target, thisArgs, [ object ] ) {
  56.  
  57. if ( object.type === 'Scene' ) {
  58.  
  59. if ( object.children.length > 4 ) {
  60.  
  61. worldScene = object;
  62.  
  63. console.log( 'SCENE FOUND!', worldScene );
  64.  
  65. }
  66.  
  67. }
  68.  
  69. return Reflect.apply( ...arguments );
  70.  
  71. }
  72. } );
  73.  
  74. const precision = Math.pow( 10, 4 );
  75.  
  76. function createKey( object ) {
  77.  
  78. return Math.round( precision * object.position.x ) + ',' + Math.round( precision * object.position.z );
  79.  
  80. }
  81.  
  82. function findHeadBone( player ) {
  83.  
  84. for ( let j = 0; j < player.children.length; j ++ ) {
  85.  
  86. const child = player.children[ j ].children[ 0 ];
  87.  
  88. if ( child && child.isSkinnedMesh ) {
  89.  
  90. const bones = child.skeleton.bones;
  91.  
  92. for ( let k = 0; k < bones.length; k ++ ) {
  93.  
  94. const bone = bones[ k ];
  95.  
  96. if ( bone.name.indexOf( 'Head' ) > - 1 ) {
  97.  
  98. return bone;
  99.  
  100. }
  101.  
  102. }
  103.  
  104. }
  105.  
  106. }
  107.  
  108. return null;
  109.  
  110. }
  111.  
  112. const canvas = document.getElementById( 'canvas' );
  113. const p = new THREE.Vector3();
  114.  
  115. const raycaster = new THREE.Raycaster();
  116.  
  117. /*let tracersLines = [];
  118.  
  119. function createTracer(start, end) {
  120. const material = new THREE.LineBasicMaterial({ color: 0xff0000 });
  121. const geometry = new THREE.Geometry();
  122. geometry.vertices.push(start, end);
  123.  
  124. const line = new THREE.Line(geometry, material);
  125. worldScene.add(line);
  126. return line;
  127. }*/
  128.  
  129.  
  130. function animate() {
  131.  
  132. if ( worldScene ) {
  133.  
  134. let myCamera;
  135.  
  136. const spriteMap = {};
  137.  
  138. const players = [];
  139.  
  140. for ( let i = 0; i < worldScene.children.length; i ++ ) {
  141.  
  142. const child = worldScene.children[ i ];
  143.  
  144. if ( child.type === 'PerspectiveCamera' ) {
  145.  
  146. myCamera = child;
  147.  
  148. } else if ( child.type === 'Sprite' ) {
  149.  
  150. try {
  151.  
  152. if ( child.material.map.image.className === 'canvas_healthbar' ) {
  153.  
  154. child.isEnemy = child.material.depthTest === true;
  155. spriteMap[ createKey( child ) ] = child;
  156.  
  157. }
  158.  
  159. } catch ( err ) {}
  160.  
  161. } else if ( child.name !== '' && child.type === 'Group' && child.visible ) {
  162.  
  163. if ( child.headBone === undefined ) {
  164.  
  165. child.headBone = findHeadBone( child );
  166.  
  167. }
  168.  
  169. if ( child.headBone ) {
  170.  
  171. players.push( child );
  172.  
  173. }
  174.  
  175. }
  176.  
  177. }
  178.  
  179. let targetPlayer;
  180. let minDistance = Infinity;
  181.  
  182. for ( let i = 0; i < players.length; i ++ ) {
  183.  
  184. const player = players[ i ];
  185.  
  186. p.setScalar( 0 ).applyMatrix4( player.headBone.matrixWorld )
  187.  
  188. player.isAlive = Math.hypot( p.x - player.position.x, p.z - player.position.z ) < 1;
  189.  
  190. if ( ! player.myBox ) {
  191.  
  192. player.myBox = new THREE.LineSegments( geometry, material );
  193. player.add( player.myBox );
  194.  
  195. }
  196.  
  197. player.myBox.scale.setScalar( espSize );
  198.  
  199. if ( ! player.sprite || player.sprite.parent !== worldScene ) {
  200.  
  201. player.sprite = spriteMap[ createKey( player ) ];
  202.  
  203. }
  204.  
  205. player.myBox.visible = player.isAlive && ( player.sprite ? player.sprite.isEnemy : true );
  206.  
  207. if ( player.myBox.visible ) {
  208.  
  209. const d = player.position.distanceTo( myCamera.position );
  210.  
  211. if ( d < minDistance ) {
  212.  
  213. targetPlayer = player;
  214. minDistance = d;
  215.  
  216. }
  217.  
  218. }
  219.  
  220. player.myBox.visible &&= espEnabled;
  221.  
  222. }
  223.  
  224. /*if (tracers) {
  225. // Очистка старых линий
  226. tracersLines.forEach(line => worldScene.remove(line));
  227. tracersLines = [];
  228.  
  229. players.forEach(player => {
  230. if (player.myBox.visible) {
  231. const startPoint = new THREE.Vector3(0, 0, 0.5).unproject(myCamera);
  232. // Создаем трейсер между центром экрана и игроком
  233. const line = createTracer(startPoint, player.position);
  234. worldScene.add(line);
  235. tracersLines.push(line);
  236. }
  237. });
  238. } else {
  239. // Если трейсеры выключены, удаляем все линии
  240. tracersLines.forEach(line => worldScene.remove(line));
  241. tracersLines = [];
  242. }*/
  243.  
  244.  
  245. //aimbot func | if ( aimbotEnabled && targetPlayer ) {
  246. if (aimbotEnabled && targetPlayer) {
  247. const directionToPlayer = targetPlayer.position.clone().sub(myCamera.position).normalize();
  248. const angle = directionToPlayer.angleTo(myCamera.getWorldDirection(new THREE.Vector3()));
  249.  
  250. if (angle < AIMBOT_FOV) {
  251. setTimeout(() => {
  252. const yaw = myCamera.rotation.y;
  253. const pitch = myCamera.rotation.x;
  254.  
  255. myCamera.rotation.order = 'YXZ';
  256. myCamera.lookAt(targetPlayer.position.x, targetPlayer.position.y + 1.5, targetPlayer.position.z);
  257.  
  258. canvas.dispatchEvent(new MouseEvent('mousemove', {
  259. movementX: (yaw - myCamera.rotation.y) * 500,
  260. movementY: (pitch - myCamera.rotation.x) * 500
  261. }));
  262. }, AIMBOT_DELAY);
  263. }
  264. }
  265.  
  266.  
  267.  
  268. }
  269. }
  270.  
  271. window.requestAnimationFrame = new Proxy( window.requestAnimationFrame, {
  272. apply( target, thisArgs, args ) {
  273.  
  274. args[ 0 ] = new Proxy( args[ 0 ], {
  275. apply( target, thisArgs, args ) {
  276.  
  277. Reflect.apply( ...arguments );
  278.  
  279. animate();
  280.  
  281. }
  282. } );
  283.  
  284. return Reflect.apply( ...arguments );
  285.  
  286. }
  287. } );
  288.  
  289. const value = parseInt( new URLSearchParams( window.location.search ).get( 'showAd' ), 16 );
  290.  
  291. const shouldShowAd = isNaN( value ) || Date.now() - value < 0 || Date.now() - value > 10 * 60 * 1000;
  292.  
  293. const el = document.createElement( 'div' );
  294.  
  295. const msgClassName = randomString();
  296. const dialogClassName = randomString();
  297. const aimfovsliderClassName = randomString();
  298.  
  299. //kvadratik
  300. const statusBoxEl = document.createElement('div');
  301. statusBoxEl.className = 'statusBox';
  302.  
  303. const espStatusEl = document.createElement('div');
  304. espStatusEl.className = 'statusIndicator';
  305. espStatusEl.textContent = espEnabled ? 'ESP [V]: ON' : 'ESP [V]: OFF';
  306. espStatusEl.style.borderRight = espEnabled ? "3px solid #77eb34" : "3px solid #eb4034";
  307.  
  308. const aimbotStatusEl = document.createElement('div');
  309. aimbotStatusEl.className = 'statusIndicator';
  310. aimbotStatusEl.textContent = aimbotEnabled ? 'Aimbot [B]: ON' : 'Aimbot [B]: OFF';
  311. aimbotStatusEl.style.borderRight = aimbotEnabled ? '3px solid #77eb34' : '3px solid #eb4034';
  312.  
  313. const watermark = document.createElement('div');
  314. watermark.className = 'watermark';
  315. watermark.textContent = "Chrono b1 | by ilyxa05";
  316.  
  317. statusBoxEl.appendChild(aimbotStatusEl);
  318. statusBoxEl.appendChild(espStatusEl);
  319. document.body.appendChild(statusBoxEl);
  320. document.body.appendChild(watermark);
  321.  
  322.  
  323.  
  324. //html interpritator
  325. el.innerHTML = `
  326. <style>
  327. .watermark{
  328. border-radius: 4px!important;
  329. display: flex;
  330. justify-content: center;
  331. align-items: center;
  332. color:#fff;
  333. width: 300px;
  334. height: 30px;
  335. background: #29292970;
  336. position: absolute;
  337. top: 5px;
  338. right: 5px;
  339. z-index: 999999;
  340. border-top: 4px solid;
  341. border-image: url(https://i.giphy.com/media/3otO6NFBIAFg2vPZuM/giphy.webp) 100;
  342. }
  343. .dialog {
  344. position: absolute;
  345. left: 50%;
  346. top: 50%;
  347. background: rgba(31, 31, 31, 0.8);
  348. border-radius: 6px!important;
  349. color: #fff;
  350. transform: translate(-50%, -50%);
  351. box-shadow: 0 0 0 10000px rgba(0, 0, 0, 0.3);
  352. text-align: center;
  353. z-index: 999998;
  354. }
  355.  
  356. .dialog * {
  357. color: #fff;
  358. }
  359.  
  360. .dialog .btn {
  361. cursor: pointer;
  362. padding: 0.5em;
  363. background: hsla(0, 67%, 44%, 0.7);
  364. border: 3px solid rgba(0, 0, 0, 0.2);
  365. }
  366.  
  367. .dialog .btn:active {
  368. transform: scale(0.8);
  369. }
  370. .chrono{
  371. font-weight: 700;
  372. font-size: 20px;
  373. margin-right: 20px;
  374. display: flex;
  375. align-items: center;
  376. z-index: 999999;
  377. }
  378. .chrono img{
  379. width: 35px;
  380. height: 35px;
  381. }
  382. .tab-container {
  383. display: flex;
  384. align-items: center;
  385. padding: 5px;
  386. border-radius: 6px!important;
  387. background: rgba(26, 26, 26, 0.8);
  388. display: flex;
  389. }
  390.  
  391. .tab-button {
  392. width: 80px;
  393. border-radius: 4px!important;
  394. padding: 10px 20px;
  395. margin: 5px;
  396. border: none;
  397. cursor: pointer;
  398. background-color: #a96ec7;
  399. }
  400.  
  401. .tab-button:hover {
  402. background-color: #8b54a6;
  403. }
  404.  
  405. .tab-content {
  406. margin-top: 10px;
  407. display: flex;
  408. justify-content: center;
  409. }
  410.  
  411. .tab-content h2 {
  412. margin-top: 0;
  413. }
  414.  
  415. .tab-content p {
  416. margin-bottom: 0;
  417. }
  418. .chronolabelcheck{
  419. margin-right: 4px;
  420. margin-left: 10px;
  421. }
  422. .chronoslider{
  423. margin-bottom: 20px;
  424. max-width: 200px;
  425. }
  426. .chronosliders{
  427. display: flex;
  428. justify-content: center;
  429. align-items: center;
  430. flex-direction: column;
  431. }
  432.  
  433. .close {
  434. position: absolute;
  435. right: 5px;
  436. top: 5px;
  437. width: 20px;
  438. height: 20px;
  439. opacity: 0.5;
  440. cursor: pointer;
  441. }
  442.  
  443. .close:before, .close:after {
  444. content: ' ';
  445. position: absolute;
  446. left: 50%;
  447. top: 50%;
  448. width: 100%;
  449. height: 20%;
  450. transform: translate(-50%, -50%) rotate(-45deg);
  451. background: #fff;
  452. }
  453.  
  454. .close:after {
  455. transform: translate(-50%, -50%) rotate(45deg);
  456. }
  457.  
  458. .close:hover {
  459. opacity: 1;
  460. }
  461.  
  462.  
  463. .msg {
  464. position: absolute;
  465. left: 10px;
  466. bottom: 10px;
  467. background: rgba(50, 0, 0, 0.8);
  468. color: #fff;
  469. padding: 15px;
  470. animation: msg 0.5s forwards, msg 0.5s reverse forwards 3s;
  471. z-index: 999999;
  472. pointer-events: none;
  473. background: #29292990;
  474. }
  475.  
  476. @keyframes msg {
  477. from {
  478. transform: translate(-120%, 0);
  479. }
  480.  
  481. to {
  482. transform: none;
  483. }
  484. }
  485. .statusBox {
  486. position: absolute;
  487. top: 76px;
  488. right: 10px;
  489. border-radius: 5px;
  490. z-index: 9999999;
  491. }
  492. .statusIndicator {
  493. background: #29292990;
  494. display: block;
  495. margin: 5px 0;
  496. width: 130px;
  497. height: 30px;
  498. color: #fff;
  499. text-align: right;
  500. padding-right: 10px;
  501. line-height: 30px;
  502. border-top-left-radius: 5px!important;
  503. border-bottom-left-radius: 5px!important;
  504.  
  505. }
  506. #aimbot-fov {
  507. border-collapse: separate;
  508. perspective: 1px;
  509. position: absolute;
  510. top: 50%;
  511. left: 50%;
  512. border-radius: 50%!important;
  513. border: 2px solid red;
  514. pointer-events: none;
  515. z-index: 9999;
  516. }
  517. .chronocheckbox{
  518. margin-right: 5px;
  519. width: 9px;
  520. height: 9px;
  521. }
  522. </style>
  523. <div class="dialog">
  524. <div class="tab-container">
  525. <div class="chrono">
  526. <img src="https://i.ibb.co/YkpnJvC/chrono-logo.png" alt="">Chrono
  527. </div>
  528. <button class="tab-button" id="tab1Button">AimBot</button>
  529. <button class="tab-button" id="tab2Button">Visuals</button>
  530. <button class="tab-button" id="tab3Button">Misc</button>
  531. </div>
  532.  
  533. <div id="tab1" class="tab-content">
  534. <label class="chronolabelcheck" for="aimbotcheckbox"> AimBot: </label>
  535. <input class="chronocheckbox" type="checkbox" id="aimbotCheckbox" onchange="toggleAimbot()">
  536.  
  537. <label class="chronolabelcheck" for="ragefovcheckbox"> RageFOV: </label>
  538. <input class="chronocheckbox" type="checkbox" id="ragefovcheckbox" onchange="toggleRageFOV()">
  539. <br>
  540.  
  541. <div class="chronosliders">
  542. <label for="aimfovslider">AimBot FOV: <span id="aimfovvalue"> 50</span></label>
  543. <input class="chronoslider" type="range" id="aimfovslider" min="10" max="100" value="50">
  544. </div>
  545.  
  546. <div class="chronosliders">
  547. <label for="aimdelayslider">AimBot Delay: <span id="aimdelayvalue"> 300</span></label>
  548. <input class="chronoslider" type="range" id="aimdelayslider" min="20" max="800" value="50">
  549. </div>
  550. </div>
  551.  
  552.  
  553. <div id="tab2" class="tab-content">
  554. <label for="espCheckbox"> ESP: </label>
  555. <input class="chronocheckbox" type="checkbox" id="espCheckbox" onchange="toggleEsp()">
  556.  
  557. <label for="wallhackCheckbox"> WallHack: </label>
  558. \
  559. <input class="chronocheckbox" type="checkbox" id="espCheckbox" onchange="toggleWallHack()">
  560.  
  561. </div>
  562.  
  563. <div id="tab3" class="tab-content">
  564. <p>soon.</p>
  565. </div>
  566. </div>
  567. <div class="msg" style="display: none;"></div>
  568. <div id="aimbot-fov"></div>
  569. `
  570. .replaceAll( 'dialog', dialogClassName )
  571. .replaceAll( 'close', randomString() )
  572. .replaceAll( 'msg', msgClassName )
  573. .replaceAll( 'btn', randomString() );
  574.  
  575. //render aimbotfov
  576. function updateAimbotFovVisibility() {
  577. const fovElement = document.getElementById('aimbot-fov');
  578. if (aimbotEnabled) {
  579. fovElement.style.display = 'block';
  580. } else {
  581. fovElement.style.display = 'none';
  582. }
  583. }
  584. function updateAimbotFovElement() {
  585. const fovElement = document.getElementById('aimbot-fov');
  586. if (!fovElement) return;
  587.  
  588. const fovDiameterPx = Math.tan(AIMBOT_FOV / 2) * window.innerHeight; // Это только пример. Формула может отличаться в зависимости от вашей реализации.
  589.  
  590. fovElement.style.width = `${fovDiameterPx}px`;
  591. fovElement.style.height = `${fovDiameterPx}px`;
  592. fovElement.style.marginTop = `-${fovDiameterPx / 2}px`;
  593. fovElement.style.marginLeft = `-${fovDiameterPx / 2}px`;
  594. }
  595. window.onload = updateAimbotFovElement;
  596.  
  597. function randomString() {
  598.  
  599. return Math.random().toString( 32 ).slice( 2 ).replace( /^\d/, 'a' );
  600.  
  601. }
  602.  
  603. const msgEl = el.getElementsByClassName( msgClassName )[ 0 ];
  604. const dialogEl = el.getElementsByClassName( dialogClassName )[ 0 ];
  605.  
  606.  
  607. while ( el.children.length > 0 ) {
  608.  
  609. document.body.appendChild( el.children[ 0 ] );
  610.  
  611. }
  612.  
  613. function toggleWallHack() {
  614. const checkbox = document.getElementById('wallhackCheckbox');
  615. if (checkbox.checked) {
  616. enableWallHack();
  617. showMsg( 'Aimbot: ' + ( aimbotEnabled ? 'ON' : 'OFF' ) );
  618. } else {
  619. disableWallHack();
  620. }
  621. }
  622.  
  623. function enableWallhack() {
  624. worldScene.traverse(function(child) {
  625. console.log(child); // Логирование каждого объекта в сцене для отладки
  626. if (child instanceof THREE.Mesh && child.name === 'Enemy') { // Проверьте правильность имени 'Enemy' для вашей игры
  627. if (Array.isArray(child.material)) {
  628. child.material.forEach(mat => {
  629. mat.transparent = true;
  630. mat.opacity = 0.5;
  631. });
  632. } else {
  633. child.material.transparent = true;
  634. child.material.opacity = 0.5;
  635. }
  636. }
  637. });
  638. }
  639.  
  640. function disableWallHack() {
  641. if (worldScene) {
  642. worldScene.traverse(function(child) {
  643. if (child instanceof THREE.Mesh) {
  644. if (child.name === 'Enemy') {
  645. child.material.transparent = false;
  646. child.material.opacity = 1;
  647. }
  648. }
  649. });
  650. }
  651. }
  652.  
  653.  
  654. function updateAimbotFovFromSlider() {
  655. const sliderValue = document.getElementById('aimfovslider').value;
  656. AIMBOT_FOV = THREE.MathUtils.degToRad(parseInt(sliderValue));
  657. updateAimbotFovElement();
  658. }
  659.  
  660. const aimfovslider = document.getElementById('aimfovslider');
  661. aimfovslider.addEventListener('input', updateAimbotFovFromSlider);
  662.  
  663. document.addEventListener('DOMContentLoaded', () => {
  664. updateAimbotFovElement();
  665. });
  666.  
  667. function updateAimbotDelayFromSlider() {
  668. const sliderValue = document.getElementById('aimfovslider').value;
  669. AIMBOT_FOV = THREE.MathUtils.degToRad(parseInt(sliderValue));
  670. updateAimbotDelayElement();
  671. }
  672.  
  673. const aimdelayslider = document.getElementById('aimdelayslider');
  674. aimdelayslider.addEventListener('input', updateAimbotDelayFromSlider);
  675.  
  676. document.addEventListener('DOMContentLoaded', () => {
  677. updateAimbotDelayElement();
  678. });
  679.  
  680. function openTab(tabName) {
  681. var i, tabContent;
  682. tabContent = document.getElementsByClassName("tab-content");
  683. for (i = 0; i < tabContent.length; i++) {
  684. tabContent[i].style.display = "none";
  685. }
  686. document.getElementById(tabName).style.display = "block";
  687. }
  688.  
  689. document.getElementById('aimfovslider').addEventListener('input', function() {
  690. const fovValue = this.value;
  691. document.getElementById('aimfovvalue').textContent = ' '+fovValue;
  692.  
  693. // Здесь вы можете также обновить значение AIMBOT_FOV, если необходимо
  694. AIMBOT_FOV = THREE.MathUtils.degToRad(fovValue);
  695. });
  696.  
  697. document.getElementById('aimdelayslider').addEventListener('input', function() {
  698. const delayValue = this.value;
  699. document.getElementById('aimdelayvalue').textContent = ' '+delayValue;
  700.  
  701. AIMBOT_DELAY = delayValue;
  702. });
  703.  
  704. document.getElementById("tab1Button").addEventListener("click", function() {
  705. openTab('tab1');
  706. });
  707.  
  708. document.getElementById("tab2Button").addEventListener("click", function() {
  709. openTab('tab2');
  710. });
  711.  
  712. document.getElementById("tab3Button").addEventListener("click", function() {
  713. openTab('tab3');
  714. });
  715.  
  716. openTab('tab1');
  717.  
  718. function toggleEsp() {
  719. espEnabled = !espEnabled;
  720. }
  721. function toggleAimbot() {
  722. updateAimbotFovVisibility();
  723. }
  724. updateAimbotFovVisibility();
  725.  
  726. document.addEventListener('DOMContentLoaded', function() {
  727. const espCheckbox = document.getElementById('espCheckbox');
  728. espCheckbox.addEventListener('change', toggleWallHack); // Или enableWallhack, в зависимости от вашего имени функции
  729. });
  730.  
  731.  
  732.  
  733.  
  734. const espCheckbox = document.getElementById('espCheckbox');
  735.  
  736. // Добавляем обработчик события для изменения состояния чекбокса
  737. espCheckbox.addEventListener('change', function () {
  738. espEnabled = espCheckbox.checked; // Обновляем значение переменной в зависимости от состояния чекбокса
  739. showMsg('ESP: ' + (espEnabled ? 'ON' : 'OFF'));
  740. espStatusEl.textContent = espEnabled ? 'ESP [V]: ON' : 'ESP [V]: OFF';
  741. espStatusEl.style.borderRight = espEnabled ? "3px solid #77eb34" : "3px solid #eb4034";
  742. });
  743.  
  744. const aimbotCheckbox = document.getElementById('aimbotCheckbox');
  745.  
  746. aimbotCheckbox.addEventListener('change', function () {
  747. aimbotEnabled = aimbotCheckbox.checked;
  748. showMsg('AimBot: ' + (aimbotEnabled ? 'ON' : 'OFF'));
  749.  
  750. updateAimbotFovVisibility();
  751. aimbotStatusEl.textContent = aimbotEnabled ? 'AimBot [B]: ON' : 'AimBot [B]: OFF';
  752. aimbotStatusEl.style.borderRight = aimbotEnabled ? "3px solid #77eb34" : "3px solid #eb4034";
  753. });
  754.  
  755. let defaultFOV = THREE.MathUtils.degToRad(50);
  756.  
  757. const ragefovcheckbox = document.getElementById('ragefovcheckbox').addEventListener('change', toggleRageFOV);
  758. function toggleRageFOV() {
  759. console.log("toggleRageFOV function is called!");
  760. const rageFovCheckbox = document.getElementById('ragefovcheckbox');
  761.  
  762. if (rageFovCheckbox.checked) {
  763. AIMBOT_FOV = THREE.MathUtils.degToRad(999);
  764. console.log("RageFOV activated:", AIMBOT_FOV); // Добавьте этот вывод для отладки
  765. } else {
  766. AIMBOT_FOV = defaultFOV;
  767. console.log("RageFOV deactivated:", AIMBOT_FOV); // Добавьте этот вывод для отладки
  768. }
  769. showMsg('RageFOV: ON');
  770. }
  771.  
  772. window.addEventListener( 'keyup', function ( event ) {
  773.  
  774. switch ( event.code ) {
  775.  
  776. case 'KeyV':
  777. espEnabled = !espEnabled;
  778. showMsg('ESP: ' + (espEnabled ? 'ON' : 'OFF'));
  779. espStatusEl.textContent = espEnabled ? 'ESP [V]: ON' : 'ESP [V]: OFF';
  780. espStatusEl.style.borderRight = espEnabled ? "3px solid #77eb34" : "3px solid #eb4034";
  781. break;
  782.  
  783. case 'KeyB':
  784. aimbotEnabled = ! aimbotEnabled;
  785. updateAimbotFovVisibility();
  786. showMsg( 'Aimbot: ' + ( aimbotEnabled ? 'ON' : 'OFF' ) );
  787. aimbotStatusEl.textContent = aimbotEnabled ? 'AimBot [B]: ON' : 'AimBot [B]: OFF';
  788. aimbotStatusEl.style.borderRight = aimbotEnabled ? '3px solid #77eb34' : '3px solid #eb4034';
  789. break;
  790.  
  791. case 'Comma':
  792.  
  793. if (AIMBOT_FOV > THREE.MathUtils.degToRad(10)) {
  794.  
  795. AIMBOT_FOV -= THREE.MathUtils.degToRad(5);
  796. updateAimbotFovElement();
  797. showMsg("AIMBOT_FOV Size Descreased");
  798. }
  799.  
  800. break;
  801.  
  802. case 'Period':
  803. if (AIMBOT_FOV < THREE.MathUtils.degToRad(360)) {
  804.  
  805. AIMBOT_FOV += THREE.MathUtils.degToRad(5);
  806. updateAimbotFovElement();
  807. showMsg("AIMBOT_FOV Size Increased");
  808.  
  809. }
  810. break;
  811.  
  812. case 'KeyH':
  813. dialogEl.style.display = dialogEl.style.display === '' ? 'none' : '';
  814. break;
  815.  
  816. }
  817.  
  818. } );
  819.  
  820. function showMsg( msg ) {
  821.  
  822. msgEl.innerText = msg;
  823.  
  824. msgEl.style.display = 'none';
  825.  
  826. void msgEl.offsetWidth;
  827.  
  828. msgEl.style.display = '';
  829.  
  830. }

QingJ © 2025

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