// ==UserScript==
// @name Ev.IO ChronoHack
// @namespace http://tampermonkey.net/
// @version 0.1.2
// @description Free ChronoHack cheat for the game ev.io with features such as esp, convenient aimbot and beautiful clickgui
// @author ilyxa05
// @match *://ev.io/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=ev.io
// @grant none
// @run-at document-end
// @antifeature ads
// @license MIT
// @downloadURL https://update.greasyfork.cloud/scripts/477417/EvIO%20ChronoHack.user.js
// @updateURL https://update.greasyfork.cloud/scripts/477417/EvIO%20ChronoHack.meta.js
// ==/UserScript==
let espEnabled = false;
let aimbotEnabled = false;
let tracers = true;
let espSize = 1;
const ver = 'v0.1';
let AIMBOT_FOV = THREE.MathUtils.degToRad(50);
let AIMBOT_DELAY = 300; // 300 миллисекунд = 0.3 секунды
const geometry = new THREE.EdgesGeometry( new THREE.BoxGeometry( 1, 2, 1 ).translate( 0, 1, 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 precision = Math.pow( 10, 4 );
function createKey( object ) {
return Math.round( precision * object.position.x ) + ',' + Math.round( precision * object.position.z );
}
function findHeadBone( player ) {
for ( let j = 0; j < player.children.length; j ++ ) {
const child = player.children[ j ].children[ 0 ];
if ( child && child.isSkinnedMesh ) {
const bones = child.skeleton.bones;
for ( let k = 0; k < bones.length; k ++ ) {
const bone = bones[ k ];
if ( bone.name.indexOf( 'Head' ) > - 1 ) {
return bone;
}
}
}
}
return null;
}
const canvas = document.getElementById( 'canvas' );
const p = new THREE.Vector3();
const raycaster = new THREE.Raycaster();
/*let tracersLines = [];
function createTracer(start, end) {
const material = new THREE.LineBasicMaterial({ color: 0xff0000 });
const geometry = new THREE.Geometry();
geometry.vertices.push(start, end);
const line = new THREE.Line(geometry, material);
worldScene.add(line);
return line;
}*/
function animate() {
if ( worldScene ) {
let myCamera;
const spriteMap = {};
const players = [];
for ( let i = 0; i < worldScene.children.length; i ++ ) {
const child = worldScene.children[ i ];
if ( child.type === 'PerspectiveCamera' ) {
myCamera = child;
} else if ( child.type === 'Sprite' ) {
try {
if ( child.material.map.image.className === 'canvas_healthbar' ) {
child.isEnemy = child.material.depthTest === true;
spriteMap[ createKey( child ) ] = child;
}
} catch ( err ) {}
} else if ( child.name !== '' && child.type === 'Group' && child.visible ) {
if ( child.headBone === undefined ) {
child.headBone = findHeadBone( child );
}
if ( child.headBone ) {
players.push( child );
}
}
}
let targetPlayer;
let minDistance = Infinity;
for ( let i = 0; i < players.length; i ++ ) {
const player = players[ i ];
p.setScalar( 0 ).applyMatrix4( player.headBone.matrixWorld )
player.isAlive = Math.hypot( p.x - player.position.x, p.z - player.position.z ) < 1;
if ( ! player.myBox ) {
player.myBox = new THREE.LineSegments( geometry, material );
player.add( player.myBox );
}
player.myBox.scale.setScalar( espSize );
if ( ! player.sprite || player.sprite.parent !== worldScene ) {
player.sprite = spriteMap[ createKey( player ) ];
}
player.myBox.visible = player.isAlive && ( player.sprite ? player.sprite.isEnemy : true );
if ( player.myBox.visible ) {
const d = player.position.distanceTo( myCamera.position );
if ( d < minDistance ) {
targetPlayer = player;
minDistance = d;
}
}
player.myBox.visible &&= espEnabled;
}
/*if (tracers) {
// Очистка старых линий
tracersLines.forEach(line => worldScene.remove(line));
tracersLines = [];
players.forEach(player => {
if (player.myBox.visible) {
const startPoint = new THREE.Vector3(0, 0, 0.5).unproject(myCamera);
// Создаем трейсер между центром экрана и игроком
const line = createTracer(startPoint, player.position);
worldScene.add(line);
tracersLines.push(line);
}
});
} else {
// Если трейсеры выключены, удаляем все линии
tracersLines.forEach(line => worldScene.remove(line));
tracersLines = [];
}*/
//aimbot func | if ( aimbotEnabled && targetPlayer ) {
if (aimbotEnabled && targetPlayer) {
const directionToPlayer = targetPlayer.position.clone().sub(myCamera.position).normalize();
const angle = directionToPlayer.angleTo(myCamera.getWorldDirection(new THREE.Vector3()));
if (angle < AIMBOT_FOV) {
setTimeout(() => {
const yaw = myCamera.rotation.y;
const pitch = myCamera.rotation.x;
myCamera.rotation.order = 'YXZ';
myCamera.lookAt(targetPlayer.position.x, targetPlayer.position.y + 1.5, targetPlayer.position.z);
canvas.dispatchEvent(new MouseEvent('mousemove', {
movementX: (yaw - myCamera.rotation.y) * 500,
movementY: (pitch - myCamera.rotation.x) * 500
}));
}, AIMBOT_DELAY);
}
}
}
}
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' );
const msgClassName = randomString();
const dialogClassName = randomString();
const aimfovsliderClassName = randomString();
//kvadratik
const statusBoxEl = document.createElement('div');
statusBoxEl.className = 'statusBox';
const espStatusEl = document.createElement('div');
espStatusEl.className = 'statusIndicator';
espStatusEl.textContent = espEnabled ? 'ESP [V]: ON' : 'ESP [V]: OFF';
espStatusEl.style.borderRight = espEnabled ? "3px solid #77eb34" : "3px solid #eb4034";
const aimbotStatusEl = document.createElement('div');
aimbotStatusEl.className = 'statusIndicator';
aimbotStatusEl.textContent = aimbotEnabled ? 'Aimbot [B]: ON' : 'Aimbot [B]: OFF';
aimbotStatusEl.style.borderRight = aimbotEnabled ? '3px solid #77eb34' : '3px solid #eb4034';
const watermark = document.createElement('div');
watermark.className = 'watermark';
watermark.textContent = "Chrono b1 | by ilyxa05";
statusBoxEl.appendChild(aimbotStatusEl);
statusBoxEl.appendChild(espStatusEl);
document.body.appendChild(statusBoxEl);
document.body.appendChild(watermark);
//html interpritator
el.innerHTML = `
`
.replaceAll( 'dialog', dialogClassName )
.replaceAll( 'close', randomString() )
.replaceAll( 'msg', msgClassName )
.replaceAll( 'btn', randomString() );
//render aimbotfov
function updateAimbotFovVisibility() {
const fovElement = document.getElementById('aimbot-fov');
if (aimbotEnabled) {
fovElement.style.display = 'block';
} else {
fovElement.style.display = 'none';
}
}
function updateAimbotFovElement() {
const fovElement = document.getElementById('aimbot-fov');
if (!fovElement) return;
const fovDiameterPx = Math.tan(AIMBOT_FOV / 2) * window.innerHeight; // Это только пример. Формула может отличаться в зависимости от вашей реализации.
fovElement.style.width = `${fovDiameterPx}px`;
fovElement.style.height = `${fovDiameterPx}px`;
fovElement.style.marginTop = `-${fovDiameterPx / 2}px`;
fovElement.style.marginLeft = `-${fovDiameterPx / 2}px`;
}
window.onload = updateAimbotFovElement;
function randomString() {
return Math.random().toString( 32 ).slice( 2 ).replace( /^\d/, 'a' );
}
const msgEl = el.getElementsByClassName( msgClassName )[ 0 ];
const dialogEl = el.getElementsByClassName( dialogClassName )[ 0 ];
while ( el.children.length > 0 ) {
document.body.appendChild( el.children[ 0 ] );
}
function toggleWallHack() {
const checkbox = document.getElementById('wallhackCheckbox');
if (checkbox.checked) {
enableWallHack();
showMsg( 'Aimbot: ' + ( aimbotEnabled ? 'ON' : 'OFF' ) );
} else {
disableWallHack();
}
}
function enableWallhack() {
worldScene.traverse(function(child) {
console.log(child); // Логирование каждого объекта в сцене для отладки
if (child instanceof THREE.Mesh && child.name === 'Enemy') { // Проверьте правильность имени 'Enemy' для вашей игры
if (Array.isArray(child.material)) {
child.material.forEach(mat => {
mat.transparent = true;
mat.opacity = 0.5;
});
} else {
child.material.transparent = true;
child.material.opacity = 0.5;
}
}
});
}
function disableWallHack() {
if (worldScene) {
worldScene.traverse(function(child) {
if (child instanceof THREE.Mesh) {
if (child.name === 'Enemy') {
child.material.transparent = false;
child.material.opacity = 1;
}
}
});
}
}
function updateAimbotFovFromSlider() {
const sliderValue = document.getElementById('aimfovslider').value;
AIMBOT_FOV = THREE.MathUtils.degToRad(parseInt(sliderValue));
updateAimbotFovElement();
}
const aimfovslider = document.getElementById('aimfovslider');
aimfovslider.addEventListener('input', updateAimbotFovFromSlider);
document.addEventListener('DOMContentLoaded', () => {
updateAimbotFovElement();
});
function updateAimbotDelayFromSlider() {
const sliderValue = document.getElementById('aimfovslider').value;
AIMBOT_FOV = THREE.MathUtils.degToRad(parseInt(sliderValue));
updateAimbotDelayElement();
}
const aimdelayslider = document.getElementById('aimdelayslider');
aimdelayslider.addEventListener('input', updateAimbotDelayFromSlider);
document.addEventListener('DOMContentLoaded', () => {
updateAimbotDelayElement();
});
function openTab(tabName) {
var i, tabContent;
tabContent = document.getElementsByClassName("tab-content");
for (i = 0; i < tabContent.length; i++) {
tabContent[i].style.display = "none";
}
document.getElementById(tabName).style.display = "block";
}
document.getElementById('aimfovslider').addEventListener('input', function() {
const fovValue = this.value;
document.getElementById('aimfovvalue').textContent = ' '+fovValue;
// Здесь вы можете также обновить значение AIMBOT_FOV, если необходимо
AIMBOT_FOV = THREE.MathUtils.degToRad(fovValue);
});
document.getElementById('aimdelayslider').addEventListener('input', function() {
const delayValue = this.value;
document.getElementById('aimdelayvalue').textContent = ' '+delayValue;
AIMBOT_DELAY = delayValue;
});
document.getElementById("tab1Button").addEventListener("click", function() {
openTab('tab1');
});
document.getElementById("tab2Button").addEventListener("click", function() {
openTab('tab2');
});
document.getElementById("tab3Button").addEventListener("click", function() {
openTab('tab3');
});
openTab('tab1');
function toggleEsp() {
espEnabled = !espEnabled;
}
function toggleAimbot() {
updateAimbotFovVisibility();
}
updateAimbotFovVisibility();
document.addEventListener('DOMContentLoaded', function() {
const espCheckbox = document.getElementById('espCheckbox');
espCheckbox.addEventListener('change', toggleWallHack); // Или enableWallhack, в зависимости от вашего имени функции
});
const espCheckbox = document.getElementById('espCheckbox');
// Добавляем обработчик события для изменения состояния чекбокса
espCheckbox.addEventListener('change', function () {
espEnabled = espCheckbox.checked; // Обновляем значение переменной в зависимости от состояния чекбокса
showMsg('ESP: ' + (espEnabled ? 'ON' : 'OFF'));
espStatusEl.textContent = espEnabled ? 'ESP [V]: ON' : 'ESP [V]: OFF';
espStatusEl.style.borderRight = espEnabled ? "3px solid #77eb34" : "3px solid #eb4034";
});
const aimbotCheckbox = document.getElementById('aimbotCheckbox');
aimbotCheckbox.addEventListener('change', function () {
aimbotEnabled = aimbotCheckbox.checked;
showMsg('AimBot: ' + (aimbotEnabled ? 'ON' : 'OFF'));
updateAimbotFovVisibility();
aimbotStatusEl.textContent = aimbotEnabled ? 'AimBot [B]: ON' : 'AimBot [B]: OFF';
aimbotStatusEl.style.borderRight = aimbotEnabled ? "3px solid #77eb34" : "3px solid #eb4034";
});
let defaultFOV = THREE.MathUtils.degToRad(50);
const ragefovcheckbox = document.getElementById('ragefovcheckbox').addEventListener('change', toggleRageFOV);
function toggleRageFOV() {
console.log("toggleRageFOV function is called!");
const rageFovCheckbox = document.getElementById('ragefovcheckbox');
if (rageFovCheckbox.checked) {
AIMBOT_FOV = THREE.MathUtils.degToRad(999);
console.log("RageFOV activated:", AIMBOT_FOV); // Добавьте этот вывод для отладки
} else {
AIMBOT_FOV = defaultFOV;
console.log("RageFOV deactivated:", AIMBOT_FOV); // Добавьте этот вывод для отладки
}
showMsg('RageFOV: ON');
}
window.addEventListener( 'keyup', function ( event ) {
switch ( event.code ) {
case 'KeyV':
espEnabled = !espEnabled;
showMsg('ESP: ' + (espEnabled ? 'ON' : 'OFF'));
espStatusEl.textContent = espEnabled ? 'ESP [V]: ON' : 'ESP [V]: OFF';
espStatusEl.style.borderRight = espEnabled ? "3px solid #77eb34" : "3px solid #eb4034";
break;
case 'KeyB':
aimbotEnabled = ! aimbotEnabled;
updateAimbotFovVisibility();
showMsg( 'Aimbot: ' + ( aimbotEnabled ? 'ON' : 'OFF' ) );
aimbotStatusEl.textContent = aimbotEnabled ? 'AimBot [B]: ON' : 'AimBot [B]: OFF';
aimbotStatusEl.style.borderRight = aimbotEnabled ? '3px solid #77eb34' : '3px solid #eb4034';
break;
case 'Comma':
if (AIMBOT_FOV > THREE.MathUtils.degToRad(10)) {
AIMBOT_FOV -= THREE.MathUtils.degToRad(5);
updateAimbotFovElement();
showMsg("AIMBOT_FOV Size Descreased");
}
break;
case 'Period':
if (AIMBOT_FOV < THREE.MathUtils.degToRad(360)) {
AIMBOT_FOV += THREE.MathUtils.degToRad(5);
updateAimbotFovElement();
showMsg("AIMBOT_FOV Size Increased");
}
break;
case 'KeyH':
dialogEl.style.display = dialogEl.style.display === '' ? 'none' : '';
break;
}
} );
function showMsg( msg ) {
msgEl.innerText = msg;
msgEl.style.display = 'none';
void msgEl.offsetWidth;
msgEl.style.display = '';
}