您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
The new cheat-script for evoeorld.io with a lot of functions
当前为
// ==UserScript== // @name Evoworld.io Multi menu // @namespace http://tampermonkey.net/ // @version 1.0 // @description The new cheat-script for evoeorld.io with a lot of functions // @author You // @license MIT // @match https://evoworld.io/ // @icon https://www.google.com/s2/favicons?sz=64&domain=evoworld.io // @grant none // ==/UserScript== (function () { 'use strict'; // --- Overlay HTML --- let overlayHTML = ` <div id="main_panel"> <h3>Main panel</h3> <div class="main_panel_content"> <small>Click on the desired option to activate it.</small> <div class="button" onclick="(function() { setInterval(function(){startBonus = true}, 1) })();">Exp bonus +30%</div> <div class="button" onclick="document.body.onkeyup = function(e) {if (e.keyCode == 81){ sendEmote(1); } if ( e.keyCode == 69){sendEmote(10);}};">Emoji hack (Buttons Q and E)</div> <div class="button" onclick="setInterval(function(){if(imDead == true){playAgain()}}, 1)">Instant respawn (Risky)</div> <div class="button" onclick="document.addEventListener('keydown', (event) => {if (event.key == 'r') {game.canvas.click()}})">Holding jump (Press "R")</div> <div class="button" onclick="document.addEventListener('keydown', (event) => {if (event.key == 'f') {game.canvas.width = 1719;game.canvas.height = 1009}})">Big zoom (Press "F")</div> Zoom<input type="range" min="1" max="2" value="1" step="0.01" id="Zoom"> <br><br><input type="input" value="Enter any level here(Visual)" id="anyLevel"> <br><br><input type="input" value="Enter any nick here(Visual)" id="anyNick"> <br><br><div id="cloudSlider"> <label>Cloud Transparency</label> <input type="range" min="0" max="1" step="0.01" value="0.5"> </div> <div id="swampSlider"> <label>Swamp Transparency</label> <input type="range" min="0" max="1" step="0.01" value="1"> </div> <div id="bushSlider"> <label>Bush Transparency</label> <input type="range" min="0" max="1" step="0.01" value="1"> </div> <br><br><div id="enemyLinesCheckbox"> <input type="checkbox" checked> <label>Enemy Show</label> </div> <div id="emoteSpamCheckbox"> <input type="checkbox"> <label>Emote Spam</label> </div> <div id="colorPicker"> <label>Enemy Line Color</label> <input type="color" value="yellow"> </div> <hr> <h4>Guide</h4> <p>Exp Bonus +30% — When activated, the bonus will be enabled, but it won’t work if you have already watched an ad before the game or if you have a premium account. Emoji Hack (Buttons Q and E) — When activated, hotkeys will be enabled: pressing "Q" will send 👎, and pressing "E" will send 😆. Instant Respawn (Risky) — When activated, you will automatically respawn upon death without watching an ad, but there is a high chance that you will be automatically disconnected from the server, requiring you to reload the game and evolve again. Holding Jump (Press "R") — When activated, holding the "R" key will make you automatically fly upward at the maximum allowed speed. Big Zoom (Press "F") — When activated, pressing "F" will enable a kind of zoom-out effect. Zoom — A simple slider for adjusting zoom. Cloud Transparency — Controls the transparency of special objects, meant for adjusting cloud transparency on old PCs. Swamp Transparency — Controls the transparency of swamps (for old PCs). Bush Transparency — Controls the transparency of bushes (for old PCs). Enemy Show — Displays health bars and distances to players (enabled by default). Emote Spam — Spams random emotes. Enemy Line Color — Changes the color of the line displaying the distance to neutral players.<br><br> You will see well underground and FPS Boost will be automatically activated.</p> </div> <hr> <p>ℹ Press Y to hide the main panel</p> </div> <div id="viewmod"> <div class="button2" onclick="game.me.getAllPositions = function() { return { 'x': this['position']['x'], 'y': this['position']['y'], 'center': { 'x': this['position']['x'] + this['width'], 'y': this['position']['y'] + this['height'] }, 'right': this['position']['x'] + this['width'], 'left': this['position']['x'], 'top': this['position']['y'] + this['height'], 'bottom': this['position']['y'] };}">Default view</div> <br><div class="button2" onclick="game.me.getAllPositions = function() { return { 'x': this['position']['x'], 'y': this['position']['y'], 'center': { 'x': this['position']['x'] + this['width'], 'y': this['position']['y'] + this['height'] + 200 }, 'right': this['position']['x'] + this['width'], 'left': this['position']['x'], 'top': this['position']['y'] + this['height'], 'bottom': this['position']['y'] };}">Top view</div> <div class="button2" onclick="game.me.getAllPositions = function() { return { 'x': this['position']['x'], 'y': this['position']['y'], 'center': { 'x': this['position']['x'] + this['width'] - 200, 'y': this['position']['y'] + this['height'] }, 'right': this['position']['x'] + this['width'], 'left': this['position']['x'], 'top': this['position']['y'] + this['height'], 'bottom': this['position']['y'] };}">Left view</div> <div class="button2" onclick="game.me.getAllPositions = function() { return { 'x': this['position']['x'], 'y': this['position']['y'], 'center': { 'x': this['position']['x'] + this['width'] + 200, 'y': this['position']['y'] + this['height'] }, 'right': this['position']['x'] + this['width'], 'left': this['position']['x'], 'top': this['position']['y'] + this['height'], 'bottom': this['position']['y'] };}">Right view</div> <div class="button2" onclick="game.me.getAllPositions = function() { return { 'x': this['position']['x'], 'y': this['position']['y'], 'center': { 'x': this['position']['x'] + this['width'], 'y': this['position']['y'] + this['height'] - 200 }, 'right': this['position']['x'] + this['width'], 'left': this['position']['x'], 'top': this['position']['y'] + this['height'], 'bottom': this['position']['y'] };}">Bottom view</div> </div> <style> *{ outline: none; } input[type="range"] { accent-color: coral; } #main_panel { z-index: 10; position: absolute; top: 50%; left: 0; width: 20%; padding: 12px 12px; transition: 0.5s; backdrop-filter: blur(5px); border-radius: 0px 24px 24px 0px; font-family: Arial, Helvetica, sans-serif; transform: translateY(-50%); background-color: rgba(255, 255, 255, 0.75); -webkit-box-shadow: 0px 0px 32px 10px rgba(34, 60, 80, 0.2); -moz-box-shadow: 0px 0px 32px 10px rgba(34, 60, 80, 0.2); box-shadow: 0px 0px 32px 10px rgba(34, 60, 80, 0.2); } .main_panel_content { max-height: 420px; overflow-y: auto; padding: 12px 12px; word-wrap: break-word; overflow-wrap: break-word; white-space: normal; } #viewmod { z-index: 10; position: absolute; top: 50%; right: 0; transition: 0.5s; transform: translateY(-50%); font-family: Arial, Helvetica, sans-serif; } .button { all: unset; font-size: 16px; background: transparent; border: none; position: relative; color: #f0f0f0; cursor: pointer; z-index: 1; margin: 24px 6px; padding: 10px 20px; display: flex; align-items: center; justify-content: center; white-space: nowrap; user-select: none; -webkit-user-select: none; touch-action: manipulation; } .button::after, .button::before { content: ''; position: absolute; bottom: 0; right: 0; z-index: -99999; transition: all .4s; } .button::before { transform: translate(0%, 0%); width: 100%; height: 100%; background: #28282d; border-radius: 10px; } .button::after { transform: translate(10px, 10px); width: 35px; height: 35px; background: #ffffff15; backdrop-filter: blur(5px); -webkit-backdrop-filter: blur(5px); border-radius: 50px; } .button:hover::before { transform: translate(5%, 20%); width: 110%; height: 110%; } .button:hover::after { border-radius: 10px; transform: translate(0, 0); width: 100%; height: 100%; } .button:active::after { transition: 0s; transform: translate(0, 5%); } .button2 { background-color: #fff000; border-radius: 12px; color: #000; cursor: pointer; font-weight: bold; padding: 10px 15px; text-align: center; transition: 200ms; width: 100%; box-sizing: border-box; border: 0; margin: 4px 0px; font-size: 16px; user-select: none; -webkit-user-select: none; touch-action: manipulation; } .button2:not(:disabled):hover, .button2:not(:disabled):focus { outline: 0; background: #f4e603; box-shadow: 0 0 0 2px rgba(0,0,0,.2), 0 3px 8px 0 rgba(0,0,0,.15); } .button2:disabled { filter: saturate(0.2) opacity(0.5); -webkit-filter: saturate(0.2) opacity(0.5); cursor: not-allowed; } </style> `; // --- Вставка Overlay в DOM --- let overlay = document.createElement("div"); overlay.innerHTML = overlayHTML; document.body.appendChild(overlay); // --- Логика для скрытия/показа панели --- let box = document.getElementById("main_panel"); box.style.opacity = "1"; document.addEventListener('keydown', (event) => { if (event.keyCode == 89) { let opac = box.style.opacity; if (opac == 1) { box.style.opacity = "0"; } else { box.style.opacity = "1"; } } }); // --- Логика для ползунков и инпутов --- let Game = { me: { zoom: undefined, visualNick: undefined, visualLevel: undefined }, camera: { position: undefined } }; let slider = document.getElementById('Zoom'); slider.oninput = function () { Game.me.zoom = this.value; gameZoom = Game.me.zoom; }; let input = document.getElementById('anyLevel'); input.oninput = function () { Game.me.visualLevel = this.value; game.me.level = Game.me.visualLevel; }; let input1 = document.getElementById('anyNick'); input1.oninput = function () { Game.me.visualNick = this.value; game.me.nick = Game.me.visualNick; }; // --- Логика для анимации --- let animationFrameId; const startAnimationFrame = (previousTimestamp = performance.now(), remainingFrameTime = 0) => { let timeElapsedSinceLastFrame = performance.now() - previousTimestamp, targetFrameInterval = 16.67 - timeElapsedSinceLastFrame + remainingFrameTime, frameDelay = targetFrameInterval - (0 | targetFrameInterval); animationFrameId = requestAnimationFrame(() => startAnimationFrame(previousTimestamp, frameDelay)); }; startAnimationFrame(); window.addEventListener("beforeunload", () => { animationFrameId && cancelAnimationFrame(animationFrameId); }); // --- Логика для эхолокации --- function echolocation() { visionType = 1; } setInterval(echolocation, 0); // --- Логика для полноэкранного блока --- let fullscreenBlock = document.createElement("div"); fullscreenBlock.id = "fullscreen_block"; fullscreenBlock.style.position = "fixed"; fullscreenBlock.style.top = "0"; fullscreenBlock.style.left = "0"; fullscreenBlock.style.width = "100%"; fullscreenBlock.style.height = "100%"; fullscreenBlock.style.backgroundColor = "rgba(0, 0, 0, 24)"; fullscreenBlock.style.zIndex = "9999"; fullscreenBlock.style.display = "flex"; fullscreenBlock.style.justifyContent = "center"; fullscreenBlock.style.alignItems = "center"; fullscreenBlock.style.transition = "opacity 5s"; let fullscreenText = document.createElement("div"); fullscreenText.textContent = "By: ilya gaydov"; fullscreenText.style.color = "white"; fullscreenText.style.fontFamily = "Arial, sans-serif"; fullscreenText.style.fontSize = "24px"; fullscreenBlock.appendChild(fullscreenText); document.body.appendChild(fullscreenBlock); setTimeout(() => { fullscreenBlock.style.opacity = "0"; setTimeout(() => { fullscreenBlock.remove(); }, 5000); }, 0); // --- Логика для первого скрипта --- function waitForGameLoad() { if (typeof game !== 'undefined' && game.canvas) { initScript(); } else { setTimeout(waitForGameLoad, 500); } } function initScript() { console.log("Game loaded, initializing script..."); // --- Feature Toggles --- let showEnemyLines = true; let emoteSpamEnabled = false; // --- Enemy Line Color --- let enemyLineColor = 'yellow'; // --- Menu Elements --- const cloudSlider = document.getElementById('cloudSlider').querySelector('input'); const swampSlider = document.getElementById('swampSlider').querySelector('input'); const bushSlider = document.getElementById('bushSlider').querySelector('input'); const enemyLinesCheckbox = document.getElementById('enemyLinesCheckbox').querySelector('input'); const emoteSpamCheckbox = document.getElementById('emoteSpamCheckbox').querySelector('input'); const colorPicker = document.getElementById('colorPicker').querySelector('input'); // --- Apply Transparency --- function applyTransparency() { const cloudAlpha = parseFloat(cloudSlider.value); const swampAlpha = parseFloat(swampSlider.value); const bushAlpha = parseFloat(bushSlider.value); Object.values(game.gameObjects).forEach(obj => { if (obj.name.includes('cloud')) { obj.opacity = cloudAlpha; } else if (obj.name === 'swamp') { obj.opacity = swampAlpha; } else if (obj.name.includes('bush')) { obj.opacity = bushAlpha; } }); } // --- Override game.isVisible to make players in safe zones visible --- const originalIsVisible = game.isVisible; game.isVisible = function (camera, obj, originalWidth, originalHeight) { if (obj.type === objectType.PLAYER && obj.inSafeZone) { return true; // Always visible } return originalIsVisible.call(this, camera, obj, originalWidth, originalHeight); }; // --- Draw Enemy Lines --- function drawEnemyLines() { if (showEnemyLines) { const ctx = game.dynamicContext; ctx.strokeStyle = enemyLineColor; ctx.lineWidth = 2; ctx.font = '14px Arial'; const extendedRenderDistance = game.worldWidth; Object.values(game.gameObjects).forEach(obj => { if (obj.type === objectType.PLAYER && obj !== game.me && game.isVisible(game.camera, obj, extendedRenderDistance, extendedRenderDistance)) { const myPos = game.getRenderPosition(game.me.position.x + game.me.width / 2, game.me.position.y + game.me.height / 2); const enemyPos = game.getRenderPosition(obj.position.x + obj.width / 2, obj.position.y + obj.height / 2); const distance = Math.round(getDistance(game.me.position.x, game.me.position.y, obj.position.x, obj.position.y)); // Draw line drawDangerLine(ctx, myPos, enemyPos, obj); // Draw distance ctx.fillStyle = 'white'; ctx.fillText(`${distance}m`, (myPos.x + enemyPos.x) / 2, (myPos.y + enemyPos.y) / 2); // Draw glowing box ctx.shadowColor = 'cyan'; ctx.shadowBlur = 10; const boxSize = 40; ctx.strokeRect(enemyPos.x - boxSize / 2, enemyPos.y - boxSize / 2, boxSize, boxSize); ctx.shadowBlur = 0; // Draw danger label drawDangerLabel(ctx, enemyPos, obj); } }); } } // --- Draw Danger Line --- function drawDangerLine(ctx, myPos, enemyPos, enemy) { ctx.beginPath(); ctx.moveTo(myPos.x, myPos.y); ctx.lineTo(enemyPos.x, enemyPos.y); // Set line color based on danger if (canEat(enemy, game.me)) { ctx.strokeStyle = 'red'; // Dangerous enemy } else { ctx.strokeStyle = enemyLineColor; // Safe enemy } ctx.stroke(); } // --- Draw Danger Label --- function drawDangerLabel(ctx, enemyPos, enemy) { ctx.fillStyle = canEat(enemy, game.me) ? 'red' : 'green'; ctx.font = 'bold 16px Arial'; let label = canEat(enemy, game.me) ? 'Danger' : 'Safe'; let textWidth = ctx.measureText(label).width; ctx.fillText(label, enemyPos.x - textWidth / 2, enemyPos.y - 55); // Moved label higher } // --- Dynamic Transparency for Clouds/Bushes/Swamp --- const originalDrawObject = game.drawObject; game.drawObject = function (obj, staticCanvas) { if ((obj.name.includes('cloud') || obj.name === 'swamp' || obj.name.includes('bush')) && game.isVisible(game.camera, obj)) { obj.opacity = parseFloat(cloudSlider.value); staticCanvas = false; } originalDrawObject.call(this, obj, staticCanvas); }; // --- Emote Spam --- emoteSpamCheckbox.addEventListener('change', () => { emoteSpamEnabled = emoteSpamCheckbox.checked; if (emoteSpamEnabled) { startEmoteSpam(); } else { stopEmoteSpam(); } }); let emoteSpamInterval; function startEmoteSpam() { emoteSpamInterval = setInterval(() => { if (typeof gameServer !== 'undefined' && !imDead && joinedGame) { const randomEmoteId = Math.floor(Math.random() * 13) + 1; sendEmote(randomEmoteId); } }, 1000); } function stopEmoteSpam() { clearInterval(emoteSpamInterval); } // --- Event Listeners for Menu Changes --- cloudSlider.addEventListener('input', applyTransparency); swampSlider.addEventListener('input', applyTransparency); bushSlider.addEventListener('input', applyTransparency); enemyLinesCheckbox.addEventListener('change', () => showEnemyLines = enemyLinesCheckbox.checked); colorPicker.addEventListener('change', () => enemyLineColor = colorPicker.value); // --- Add Enemy Lines to the Game Loop --- const originalBeforeDrawAllObjects = game.beforeDrawAllObjects; game.beforeDrawAllObjects = function () { originalBeforeDrawAllObjects.apply(this, arguments); drawEnemyLines(); }; // --- Set Initial Transparency --- applyTransparency(); } // --- Helper Functions --- function getDistance(x1, y1, x2, y2) { let dx = x2 - x1; let dy = y2 - y1; return Math.sqrt(dx * dx + dy * dy); } // --- Food Eating Logic --- function canEat(eater, food) { if (foodChain[eater.name] && foodChain[eater.name].eats[food.name]) { return true; } return false; } // --- Wait for Game Load --- waitForGameLoad(); })(); // --- FPS --- let fpsCounter = document.createElement('div'); fpsCounter.style.position = 'absolute'; fpsCounter.style.top = '10px'; fpsCounter.style.right = '10px'; fpsCounter.style.padding = '5px 10px'; fpsCounter.style.background = 'rgba(0, 0, 0, 0.7)'; fpsCounter.style.color = 'white'; fpsCounter.style.fontFamily = 'Arial, sans-serif'; fpsCounter.style.fontSize = '14px'; fpsCounter.style.borderRadius = '5px'; fpsCounter.innerText = 'FPS: 0'; fpsCounter.style.zIndex = '100'; // Устанавливаем максимальный z-index document.body.appendChild(fpsCounter); let lastTime = performance.now(); let frameCount = 0; let fps = 0; function updateFPS() { let now = performance.now(); frameCount++; if (now - lastTime >= 1000) { fps = frameCount; frameCount = 0; lastTime = now; fpsCounter.innerText = `FPS: ${fps}`; } requestAnimationFrame(updateFPS); } updateFPS();