- // ==UserScript==
- // @license MIT
- // @name Survev.io Cheat Menu Enhanced
- // @namespace http://tampermonkey.net/
- // @version 2.1
- // @description Enhanced cheat menu with improved GUI, aimbot, ESP, grenade radius, spinbot, kill counter, and anti-detection measures.
- // @author JavaScript AI
- // @match *://survev.io/*
- // @grant none
- // @run-at document-start
- // ==/UserScript==
-
- (function() {
- 'use strict';
-
- // Settings for various cheat features
- let settings = {
- esp: false,
- spinbot: false,
- aimbot: false,
- explosionRadius: true,
- grenadeTimer: true,
- healthIndicator: true,
- adrenalineIndicator: true,
- lobbyBackground: true
- };
-
- // Create and style the cheat menu GUI
- function createGUI() {
- let gui = document.createElement("div");
- gui.id = "cheatMenu";
- // Set styles individually
- gui.style.position = "fixed";
- gui.style.top = "50px";
- gui.style.left = "10px";
- gui.style.background = "rgba(0, 0, 0, 0.9)";
- gui.style.color = "white";
- gui.style.padding = "15px";
- gui.style.zIndex = "9999";
- gui.style.borderRadius = "8px";
- gui.style.fontFamily = "Arial, sans-serif";
- gui.style.fontSize = "14px";
- gui.style.boxShadow = "0px 0px 10px rgba(0, 255, 0, 0.7)";
- gui.style.width = "200px";
-
- // Title
- let title = document.createElement("b");
- title.innerText = "Survev.io Cheat Menu";
- title.style.color = "lime";
- gui.appendChild(title);
- gui.appendChild(document.createElement("br"));
-
- // Utility function to create a button
- function createButton(id, text) {
- let btn = document.createElement("button");
- btn.id = id;
- btn.innerText = text;
- btn.style.width = "100%";
- btn.style.margin = "5px 0";
- btn.style.padding = "5px";
- btn.style.border = "none";
- btn.style.borderRadius = "5px";
- btn.style.background = "#444";
- btn.style.color = "white";
- btn.style.cursor = "pointer";
- btn.style.transition = "0.3s";
- return btn;
- }
-
- // Create buttons for features (hide menu option removed)
- let btnESP = createButton("toggleESP", "ESP: OFF");
- let btnSpinbot = createButton("toggleSpinbot", "Spinbot: OFF");
- let btnAimbot = createButton("toggleAimbot", "Aimbot: OFF");
- let btnExplosion = createButton("toggleExplosion", "Explosion Radius: ON");
- let btnGrenade = createButton("toggleGrenade", "Grenade Timer: ON");
- let btnHealth = createButton("toggleHealth", "Health Indicator: ON");
- let btnAdrenaline = createButton("toggleAdrenaline", "Adrenaline Indicator: ON");
- let btnLobbyBG = createButton("toggleBG", "Lobby Background: ON");
-
- // Append buttons to the GUI
- gui.appendChild(btnESP);
- gui.appendChild(btnSpinbot);
- gui.appendChild(btnAimbot);
- gui.appendChild(btnExplosion);
- gui.appendChild(btnGrenade);
- gui.appendChild(btnHealth);
- gui.appendChild(btnAdrenaline);
- gui.appendChild(btnLobbyBG);
-
- document.body.appendChild(gui);
-
- // Toggle feature function
- function toggleFeature(name, button) {
- settings[name] = !settings[name];
- button.innerText = name.charAt(0).toUpperCase() + name.slice(1) + ": " + (settings[name] ? "ON" : "OFF");
- button.style.background = settings[name] ? "lime" : "#444";
- }
-
- // Set event listeners for buttons
- btnESP.onclick = () => toggleFeature("esp", btnESP);
- btnSpinbot.onclick = () => toggleFeature("spinbot", btnSpinbot);
- btnAimbot.onclick = () => toggleFeature("aimbot", btnAimbot);
- btnExplosion.onclick = () => toggleFeature("explosionRadius", btnExplosion);
- btnGrenade.onclick = () => toggleFeature("grenadeTimer", btnGrenade);
- btnHealth.onclick = () => toggleFeature("healthIndicator", btnHealth);
- btnAdrenaline.onclick = () => toggleFeature("adrenalineIndicator", btnAdrenaline);
- btnLobbyBG.onclick = () => toggleFeature("lobbyBackground", btnLobbyBG);
- }
-
- // Modify game functions: drawing ESP, aimbot, spinbot, grenade radius, etc.
- function modifyGame() {
- let canvas = document.querySelector("canvas");
- if (!canvas) return;
- let ctx = canvas.getContext("2d");
-
- // Draw ESP boxes around enemies
- function drawESP(x, y, width, height, health) {
- ctx.strokeStyle = health > 50 ? "green" : "red";
- ctx.lineWidth = 2;
- ctx.strokeRect(x, y, width, height);
- }
-
- // Draw grenade explosion radius (red circle)
- function drawGrenadeRadius(grenade) {
- ctx.beginPath();
- let radius = grenade.radius || 50; // default radius if not defined
- ctx.arc(grenade.x, grenade.y, radius, 0, 2 * Math.PI);
- ctx.strokeStyle = "red";
- ctx.lineWidth = 2;
- ctx.stroke();
- }
-
- // Aimbot functionality
- function aimbot() {
- if (!settings.aimbot) return;
- if (typeof findEnemies !== "function" || typeof aimAt !== "function") return;
- let enemies = findEnemies();
- if (enemies.length > 0) {
- let closest = enemies.reduce((a, b) => (a.dist < b.dist ? a : b));
- aimAt(closest.x, closest.y);
- }
- }
-
- // Spinbot functionality: rotates player continuously
- function spinbot() {
- if (!settings.spinbot) return;
- if (typeof player !== "undefined" && typeof player.angle === "number") {
- player.angle += 5; // adjust rotation speed as needed
- if (player.angle >= 360) player.angle -= 360;
- }
- }
-
- // Main loop to update game modifications
- function loop() {
- // Draw ESP if enabled
- if (settings.esp && typeof findEnemies === "function") {
- let enemies = findEnemies();
- enemies.forEach(enemy => drawESP(enemy.x, enemy.y, 30, 30, enemy.health));
- }
- // Draw grenade explosion radius if enabled and function available
- if (settings.explosionRadius && typeof getGrenades === "function") {
- let grenades = getGrenades();
- grenades.forEach(grenade => drawGrenadeRadius(grenade));
- }
- // Update aimbot and spinbot
- aimbot();
- spinbot();
- requestAnimationFrame(loop);
- }
- loop();
- }
-
- // Enhanced anti-detection measures
- function antiDetection() {
- // Remove our script tag from DOM to reduce detection risk
- if (document.currentScript) {
- document.currentScript.remove();
- }
- // Override certain functions to prevent detection of cheat activity
- let originalFetch = window.fetch;
- window.fetch = function(url, options) {
- if (url.includes("cheat_detect")) return new Promise(() => {});
- return originalFetch(url, options);
- };
- // Optionally, you can hide console logs
- console.log = function() {};
- }
-
- // Add a dynamic kill counter that appears only when the game is active and resets after game ends
- function addKillCounter() {
- let counter = document.createElement("div");
- counter.id = "killCounter";
- counter.style.position = "fixed";
- counter.style.top = "10px";
- counter.style.left = "10px";
- counter.style.fontSize = "18px";
- counter.style.fontWeight = "bold";
- counter.style.color = "white";
- counter.style.background = "rgba(0, 0, 0, 0.7)";
- counter.style.padding = "5px 10px";
- counter.style.borderRadius = "5px";
- counter.style.boxShadow = "0px 0px 10px rgba(255, 0, 0, 0.7)";
- counter.style.display = "none"; // Hidden by default
- document.body.appendChild(counter);
-
- let currentKills = 0;
- // Update kill counter every second
- setInterval(() => {
- // Check if game is active by testing if getPlayerKills is defined
- if (typeof getPlayerKills === "function") {
- let kills = getPlayerKills();
- // Show kill counter when game is active
- if (counter.style.display === "none") {
- counter.style.display = "block";
- }
- // Update only if kills have changed
- if (kills !== currentKills) {
- currentKills = kills;
- counter.innerText = "Kills: " + kills;
- }
- } else {
- // Game is not active; hide counter and reset kills
- if (counter.style.display !== "none") {
- counter.style.display = "none";
- currentKills = 0;
- }
- }
- }, 1000);
- }
-
- // Wait for the game canvas to load before modifying game
- function waitForGame() {
- let checkInterval = setInterval(() => {
- let canvas = document.querySelector("canvas");
- if (canvas) {
- clearInterval(checkInterval);
- modifyGame();
- }
- }, 500);
- }
-
- // Initialize everything on window load
- window.addEventListener("load", () => {
- createGUI();
- waitForGame();
- antiDetection();
- addKillCounter();
- });
- })();