Krunker.io Aimbot + ESP + FOV + Speed/Fly (Educational)

Aimbot, ESP, FOV, Speed, Fly, Team Check, Auto Shoot for Krunker.io. Press "/" to toggle GUI. Press "F" to toggle Fly mode. (EDUCATIONAL)

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         Krunker.io Aimbot + ESP + FOV + Speed/Fly (Educational)
// @namespace    http://tampermonkey.net/
// @version      1.1
// @description  Aimbot, ESP, FOV, Speed, Fly, Team Check, Auto Shoot for Krunker.io. Press "/" to toggle GUI. Press "F" to toggle Fly mode. (EDUCATIONAL)
// @author       16saiphh
// @match        *://krunker.io/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // ===== CONFIG =====
    let aimbotEnabled = false;
    let espEnabled = false;
    let speedEnabled = false;
    let flyEnabled = false;
    let teamCheck = true;
    let autoShoot = false;
    let fovSize = 140;
    let speedValue = 2.5; // 1 = normal, higher = faster
    let flyValue = 1.5;   // How much you rise per second

    // ===== GUI =====
    let gui, aimBtn, espBtn, speedBtn, flyBtn, fovSlider, fovLabel, teamBtn, autoShootBtn;
    let guiVisible = true;
    function createGUI() {
        gui = document.createElement('div');
        gui.id = "__krunker_cheat_gui";
        gui.style.position = 'fixed';
        gui.style.top = '80px';
        gui.style.right = '20px';
        gui.style.background = 'rgba(30,30,30,0.9)';
        gui.style.color = '#fff';
        gui.style.padding = '12px 14px 10px 14px';
        gui.style.borderRadius = '10px';
        gui.style.fontFamily = 'consolas, monospace';
        gui.style.zIndex = 99999;
        gui.style.userSelect = 'none';
        gui.style.fontSize = '16px';
        gui.style.minWidth = '200px';
        gui.innerHTML = `<b>Krunker Aimbot/ESP (16saiphh)</b><br><br>`;

        aimBtn = document.createElement('button');
        aimBtn.innerText = "Aimbot: OFF";
        aimBtn.style.marginRight = "5px";
        aimBtn.style.marginBottom = "6px";
        gui.appendChild(aimBtn);

        espBtn = document.createElement('button');
        espBtn.innerText = "ESP: OFF";
        espBtn.style.marginRight = "5px";
        espBtn.style.marginBottom = "6px";
        gui.appendChild(espBtn);

        speedBtn = document.createElement('button');
        speedBtn.innerText = "Speed: OFF";
        speedBtn.style.marginRight = "5px";
        speedBtn.style.marginBottom = "6px";
        gui.appendChild(speedBtn);

        flyBtn = document.createElement('button');
        flyBtn.innerText = "Fly: OFF";
        flyBtn.style.marginBottom = "6px";
        gui.appendChild(flyBtn);

        teamBtn = document.createElement('button');
        teamBtn.innerText = "TeamCheck: ON";
        teamBtn.style.marginBottom = "6px";
        teamBtn.style.marginLeft = "5px";
        gui.appendChild(teamBtn);

        autoShootBtn = document.createElement('button');
        autoShootBtn.innerText = "AutoShoot: OFF";
        autoShootBtn.style.marginBottom = "6px";
        autoShootBtn.style.marginLeft = "5px";
        gui.appendChild(autoShootBtn);

        gui.appendChild(document.createElement('br'));
        fovLabel = document.createElement('span');
        fovLabel.innerText = "FOV: " + fovSize;
        fovLabel.style.marginRight = "5px";
        gui.appendChild(fovLabel);

        fovSlider = document.createElement('input');
        fovSlider.type = "range";
        fovSlider.min = "30";
        fovSlider.max = "400";
        fovSlider.value = fovSize;
        fovSlider.step = "2";
        fovSlider.style.width = "90px";
        fovSlider.style.verticalAlign = "middle";
        gui.appendChild(fovSlider);

        document.body.appendChild(gui);

        aimBtn.onclick = ()=>{aimbotEnabled=!aimbotEnabled; aimBtn.innerText="Aimbot: "+(aimbotEnabled?"ON":"OFF");};
        espBtn.onclick =  ()=>{espEnabled=!espEnabled; espBtn.innerText="ESP: "+(espEnabled?"ON":"OFF");};
        speedBtn.onclick = ()=>{speedEnabled=!speedEnabled; speedBtn.innerText="Speed: "+(speedEnabled?"ON":"OFF");};
        flyBtn.onclick = ()=>{flyEnabled=!flyEnabled; flyBtn.innerText="Fly: "+(flyEnabled?"ON":"OFF");};
        teamBtn.onclick = ()=>{teamCheck=!teamCheck; teamBtn.innerText="TeamCheck: "+(teamCheck?"ON":"OFF");};
        autoShootBtn.onclick = ()=>{autoShoot=!autoShoot; autoShootBtn.innerText="AutoShoot: "+(autoShoot?"ON":"OFF");};
        fovSlider.oninput = ()=>{fovSize=+fovSlider.value; fovLabel.innerText="FOV: "+fovSize;};
    }
    createGUI();

    // ===== GUI TOGGLE ("/" key) =====
    document.addEventListener('keydown', function(e){
        if (e.key === "/" && !e.repeat) {
            guiVisible = !guiVisible;
            gui.style.display = guiVisible ? "" : "none";
        }
        // Fly keybind
        if(e.code==="KeyF" && !e.repeat) {
            flyEnabled = !flyEnabled;
            flyBtn.innerText = "Fly: "+(flyEnabled?"ON":"OFF");
        }
        // Other fast toggles (optional)
        if(e.code==="KeyY" && !e.repeat) {aimbotEnabled=!aimbotEnabled; aimBtn.innerText="Aimbot: "+(aimbotEnabled?"ON":"OFF");}
        if(e.code==="KeyU" && !e.repeat) {espEnabled=!espEnabled; espBtn.innerText="ESP: "+(espEnabled?"ON":"OFF");}
        if(e.code==="KeyI" && !e.repeat) {speedEnabled=!speedEnabled; speedBtn.innerText="Speed: "+(speedEnabled?"ON":"OFF");}
        // (fly is now F key)
    });

    // ===== CANVAS for ESP and FOV =====
    let overlay = document.createElement('canvas');
    overlay.width = window.innerWidth;
    overlay.height = window.innerHeight;
    overlay.style.position = 'fixed';
    overlay.style.left = '0';
    overlay.style.top = '0';
    overlay.style.pointerEvents = 'none';
    overlay.style.zIndex = 9999;
    document.body.appendChild(overlay);

    window.addEventListener('resize', ()=>{
        overlay.width = window.innerWidth;
        overlay.height = window.innerHeight;
    });

    // ===== GAME DATA HOOKING =====
    let inputs = null, me = null, players = [], world = null, gameActive = false;

    // Try to hook into game variables
    function gameHook() {
        // Krunker always attaches "window.inputs", "window.me", "window.players", "window.world"
        if (!window.inputs || !window.me || !window.players || !window.world) return false;
        inputs = window.inputs;
        me = window.me;
        players = window.players.list;
        world = window.world;
        return true;
    }

    // ===== FOV CIRCLE =====
    function drawFov(ctx, fov, color="rgba(0,220,0,0.45)") {
        let x = overlay.width/2, y = overlay.height/2;
        ctx.beginPath();
        ctx.arc(x, y, fov, 0, Math.PI*2);
        ctx.strokeStyle = color;
        ctx.lineWidth = 2.5;
        ctx.stroke();
    }

    // ===== ESP BOX DRAWING =====
    function worldToScreen(x,y,z) {
        // Use game's camera matrix
        if (!window.me || !window.me.camera || !window.me.camera.getWorldPosition) return [0,0,0];
        let pos = new window.THREE.Vector3(x,y,z);
        pos.project(window.me.camera);
        let sx = (pos.x+1)/2*overlay.width, sy = (-pos.y+1)/2*overlay.height;
        return [sx, sy, pos.z];
    }
    function drawBox(ctx, target, color) {
        // Use head and feet pos for box
        let head = worldToScreen(target.x, target.y+target.height-0.2, target.z);
        let feet = worldToScreen(target.x, target.y-0.2, target.z);
        let h = Math.abs(head[1] - feet[1]);
        let w = h/2.2;
        let cx = head[0];
        ctx.beginPath();
        ctx.rect(cx-w/2, head[1], w, h);
        ctx.strokeStyle = color;
        ctx.lineWidth = 2;
        ctx.stroke();
    }

    // ===== AIMBOT LOGIC =====
    function getClosestPlayerInFov() {
        let best = null, bestDist = 99999;
        players.forEach(p=>{
            if(!p.active || p.health<=0 || p.team==me.team && teamCheck || p==me) return;
            // Center of screen
            let [sx,sy,sz] = worldToScreen(p.x, p.y+p.height/2, p.z);
            if(sz > 1) return; // behind camera
            let dx = sx - overlay.width/2, dy = sy - overlay.height/2;
            let dist = Math.sqrt(dx*dx+dy*dy);
            if(dist < fovSize && dist < bestDist) {
                bestDist = dist;
                best = p;
            }
        });
        return best;
    }

    // ===== FLY/SPEED HOOK =====
    setInterval(()=>{
        if(gameHook()) {
            if(speedEnabled) me.velocity = me.velocity.map(v=>v*speedValue);
            if(flyEnabled) me.velocity[1] += flyValue;
        }
    }, 50);

    // ===== MAIN LOOP (DRAW & LOGIC) =====
    function mainLoop() {
        if(!gameHook()) return requestAnimationFrame(mainLoop);

        // Draw overlay
        let ctx = overlay.getContext('2d');
        ctx.clearRect(0,0,overlay.width,overlay.height);

        // FOV
        drawFov(ctx, fovSize);

        // ESP
        if(espEnabled) {
            players.forEach(p=>{
                if(!p.active || p.health<=0 || p==me) return;
                let col = (teamCheck && p.team==me.team) ? "#00f" : "#0f0";
                drawBox(ctx,p,col);
            });
        }

        // Aimbot
        let aimTarget = null;
        if(aimbotEnabled) {
            aimTarget = getClosestPlayerInFov();
            if(aimTarget) {
                // Aim at head
                let dx = aimTarget.x-me.x, dy = (aimTarget.y+aimTarget.height/2)-me.y, dz = aimTarget.z-me.z;
                let yaw = Math.atan2(-dx, -dz);
                let pitch = Math.atan2(dy, Math.sqrt(dx*dx+dz*dz));
                me.pitch = pitch;
                me.yaw = yaw;

                // Auto shoot
                if(autoShoot && me.weapon && me.weapon.canShoot && Date.now()-me.lastShot>me.weapon.rate)
                    me.shoot();
            }
        }

        requestAnimationFrame(mainLoop);
    }
    requestAnimationFrame(mainLoop);

    // ===== DRAGGABLE GUI =====
    // Credit: stackoverflow
    let drag = false, offsetX, offsetY;
    gui.addEventListener('mousedown', function(e){
        drag = true; offsetX = e.clientX - gui.offsetLeft; offsetY = e.clientY - gui.offsetTop;
    });
    document.addEventListener('mousemove', function(e){
        if(!drag) return;
        gui.style.left = (e.clientX-offsetX)+"px";
        gui.style.top = (e.clientY-offsetY)+"px";
    });
    document.addEventListener('mouseup', function(){drag=false;});

})();