Greasy Fork is available in English.

Smokin Hacks

Killaura + Auto-Spike

Du musst eine Erweiterung wie Tampermonkey, Greasemonkey oder Violentmonkey installieren, um dieses Skript zu installieren.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

Sie müssten eine Skript Manager Erweiterung installieren damit sie dieses Skript installieren können

(Ich habe schon ein Skript Manager, Lass mich es installieren!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==UserScript==
// @name         Smokin Hacks
// @namespace    https://bloxd.io
// @version      1.4
// @description  Killaura + Auto-Spike
// @license      No where
// @match        https://bloxd.io/*
// @match        https://staging.bloxd.io/*
// @match        https://www.bloxd.com/*
// @match        https://bloxd.com/*
// @grant        none
// @run-at       document-start
// ==/UserScript==

(() => {
    'use strict';

    const attempt = (fn, fb=null) => { try { return fn(); } catch(_) { return fb; } };
    const vals = o => Object.values(o ?? {});
    const ks   = o => Object.keys(o ?? {});

    const bloxd = {
        noa: null,
        _req: null,

        init() {
            const descs = Object.getOwnPropertyDescriptors(window);
            const ckey  = ks(descs).find(k => descs[k]?.set?.toString().includes('++'));
            if (!ckey || typeof window[ckey]?.push !== 'function') return;

            window[ckey].push([[Math.floor(Math.random() * 90000) + 10000], {}, req => {
                this._req = req;
                const mkeys = ks(req.m);
                for (let i = 0; i < mkeys.length; i++) {
                    try {
                        if (!req.m[mkeys[i]].toString().includes('nonBlocksClient:')) continue;
                        const mod   = req(mkeys[i]);
                        const props = vals(mod).find(e => e && typeof e === 'object');
                        const noa   = props && vals(props).find(e => e?.entities);
                        if (noa) { this.noa = noa; window.noa = noa; }
                        break;
                    } catch(_) {}
                }
            }]);
        }
    };

    const game = {
        _held: null,

        inGame()      { return !!(bloxd.noa?.bloxd?.client?.msgHandler); },
        getPos(id)    { return attempt(() => bloxd.noa.entities.getState(id, 'position').position); },
        getIds()      { return attempt(() => bloxd.noa?.bloxd?.getPlayerIds?.() ?? {}, {}); },

        getHeld(id=1) {
            if (!bloxd.noa) return null;
            if (!this._held) this._held = vals(bloxd.noa.entities).find(fn => {
                if (typeof fn !== 'function' || fn.length !== 1) return false;
                const s = fn.toString();
                return s.length < 80 && s.includes(').') && !s.includes('opWrapper');
            });
            return attempt(() => this._held?.(id));
        },

        doAttack(id) {
            attempt(() => {
                const item = this.getHeld(1);
                const fn   = item?.doAttack ?? item?.breakingItem?.doAttack;
                if (fn) fn.call(item, [0, 0, 0], id.toString(), 'HeadMesh');
            });
        },

        fireInput(action, down) {
            attempt(() => {
                const inp = bloxd.noa?.inputs; if (!inp) return;
                (down ? inp.down : inp.up)._events?.[action]?.(0);
            });
        },

        sendMsg(msg, color='#c084fc') {
            attempt(() => bloxd.noa?.bloxd?.client?.clientApi?.sendMessage?.(1, msg, { color }));
        }
    };

    class Mod {
        constructor(name, key) { this.name=name; this.key=key; this.enabled=false; this.btn=null; }
        toggle() {
            this.enabled = !this.enabled;
            this.onToggle(this.enabled);
            if (this.btn) {
                this.btn.classList.toggle('on', this.enabled);
            }
        }
        onToggle(_) {} onTick() {}
    }

    const modules = {
        killaura: new class extends Mod {
            constructor() {
                super('Killaura', 'KeyJ');
                this._last = 0;
                this.delay = 1;
                this.range = 7;
                this.multi = true;
            }
            onTick() {
                if (!game.inGame() || Date.now() - this._last < this.delay) return;
                const self = game.getPos(1); if (!self) return;

                for (const id of vals(game.getIds())) {
                    if (id == 1) continue;
                    const p = game.getPos(id); if (!p) continue;
                    if (Math.hypot(p[0]-self[0], p[1]-self[1], p[2]-self[2]) < this.range) {
                        this._last = Date.now();
                        game.doAttack(id);
                        if (!this.multi) break;
                    }
                }
            }
            onToggle(enabled) {
                if (enabled) {
                    game.sendMsg('⚡ Killaura enabled');
                } else {
                    game.sendMsg('⚡ Killaura disabled');
                }
            }
        }(),
        autoSpike: new class extends Mod {
            constructor() {
                super('Auto-Spike', 'KeyK');
                this._lastPlace = 0;
                this.placeDelay = 300;
                this.webFirst = true;
            }
            onTick() {
                if (!game.inGame() || Date.now() - this._lastPlace < this.placeDelay) return;
                const self = game.getPos(1); if (!self) return;

                const nearbyEnemies = vals(game.getIds()).filter(id => {
                    if (id == 1) return false;
                    const p = game.getPos(id);
                    if (!p) return false;
                    const dist = Math.hypot(p[0]-self[0], p[1]-self[1], p[2]-self[2]);
                    return dist < 15;
                });

                if (nearbyEnemies.length > 0) {
                    this._lastPlace = Date.now();

                    if (this.webFirst) {
                        game.fireInput('3', true);
                        setTimeout(() => game.fireInput('3', false), 50);
                    } else {
                        game.fireInput('4', true);
                        setTimeout(() => game.fireInput('4', false), 50);
                    }
                    this.webFirst = !this.webFirst;

                    setTimeout(() => {
                        game.fireInput('place', true);
                        setTimeout(() => game.fireInput('place', false), 50);
                    }, 100);
                }
            }
            onToggle(enabled) {
                if (enabled) {
                    game.sendMsg('🕷️ Auto-Spike enabled');
                } else {
                    game.sendMsg('🕷️ Auto-Spike disabled');
                }
            }
        }()
    };

    function buildUI() {
        if (document.getElementById('ch-root')) return;

        const css = document.createElement('style');
        css.textContent = `
            @import url('https://fonts.googleapis.com/css2?family=Teko:wght@700&family=Special+Elite&display=swap');

            #ch-root {
                position: fixed;
                top: 8px;
                left: 50%;
                transform: translateX(-50%);
                height: 42px;
                display: flex;
                align-items: center;
                gap: 0;
                background: #08001488;
                border: 1px solid #7c3aed;
                border-radius: 22px;
                font-family: 'Special Elite', monospace;
                font-size: 12px;
                color: #e2d9f3;
                z-index: 99999;
                box-shadow: 0 0 18px #7c3aed66, 0 2px 24px #00000088;
                user-select: none;
                transition: opacity .25s, transform .25s;
                backdrop-filter: blur(8px);
                padding: 0 12px;
                white-space: nowrap;
                overflow: visible;
                min-width: 920px;
            }
            #ch-root.hidden {
                opacity: 0;
                pointer-events: none;
                transform: translateX(-50%) translateY(-60px);
            }

            #ch-title {
                font-family: 'Teko', sans-serif;
                font-size: 17px;
                color: #c084fc;
                text-shadow: 0 0 10px #a855f7, 0 0 22px #7c3aed88;
                padding: 0 14px 0 10px;
                border-right: 1px solid #7c3aed55;
                letter-spacing: 1px;
            }

            .ch-div {
                width: 1px;
                height: 22px;
                background: #7c3aed44;
                margin: 0 4px;
            }

            .ch-btn {
                display: flex;
                align-items: center;
                gap: 6px;
                padding: 6px 14px;
                border-radius: 16px;
                border: 1px solid transparent;
                background: transparent;
                color: #6b7280;
                font-family: 'Special Elite', monospace;
                font-size: 12px;
                cursor: pointer;
                transition: all .18s;
                letter-spacing: 0.5px;
            }
            .ch-btn:hover {
                background: #3b076422;
                color: #c084fc;
                border-color: #7c3aed55;
            }
            .ch-btn.on {
                background: linear-gradient(135deg, #581c87aa, #3b0764aa);
                border-color: #a855f7;
                color: #f0abfc;
                box-shadow: 0 0 12px #a855f755;
            }
            .ch-key {
                font-size: 9px;
                color: #6d28d9;
                background: #0a0010;
                border: 1px solid #4c1d9577;
                border-radius: 4px;
                padding: 1px 5px;
                font-family: 'Special Elite', monospace;
            }
            .ch-btn.on .ch-key { color: #e879f9; border-color: #a855f7; }

            .ch-range-wrap {
                display: flex;
                align-items: center;
                gap: 6px;
                padding: 0 10px;
                color: #7c3aed;
                font-size: 11px;
                letter-spacing: 1px;
            }
            .ch-inp {
                background: #0d001a;
                border: 1px solid #4c1d95;
                border-radius: 8px;
                color: #e9d5ff;
                font-family: 'Special Elite', monospace;
                font-size: 11px;
                width: 46px;
                padding: 3px 6px;
                text-align: center;
                transition: all .15s;
            }
            .ch-inp:focus {
                outline: none;
                border-color: #a855f7;
                box-shadow: 0 0 8px #7c3aed66;
                color: #f0abfc;
            }

            .ch-chk {
                display: flex;
                align-items: center;
                gap: 5px;
                font-size: 11px;
                color: #7c3aed;
                cursor: pointer;
                padding: 0 10px;
            }
            .ch-chk input { accent-color: #a855f7; cursor: pointer; }
            .ch-chk:hover { color: #c084fc; }

            #ch-status {
                font-family: 'Special Elite', monospace;
                font-size: 10px;
                color: #3b0764;
                padding: 0 12px;
                letter-spacing: 1px;
                flex: 1;
                text-align: center;
            }
            #ch-status.on {
                color: #e879f9;
                text-shadow: 0 0 8px #a855f7;
            }

            .ch-hbtn {
                background: transparent;
                border: 1px solid #4c1d9566;
                color: #6d28d9;
                border-radius: 50%;
                width: 24px;
                height: 24px;
                cursor: pointer;
                font-size: 11px;
                display: flex;
                align-items: center;
                justify-content: center;
                transition: all .15s;
                padding: 0;
                font-family: monospace;
                flex-shrink: 0;
            }
            .ch-hbtn:hover {
                background: #7c3aed33;
                color: #e9d5ff;
                border-color: #a855f7;
                box-shadow: 0 0 8px #7c3aed88;
            }

            @keyframes glitch {
                0%,60%,100% { text-shadow: 0 0 10px #a855f7, 0 0 22px #7c3aed88; }
                20% { text-shadow: -2px 0 #f0abfc, 2px 0 #818cf8; }
                40% { text-shadow: 2px 0 #f0abfc, -2px 0 #818cf8; }
            }
            #ch-title:hover { animation: glitch .4s steps(1); cursor: default; }
        `;
        document.head.appendChild(css);

        const root = document.createElement('div');
        root.id = 'ch-root';
        root.innerHTML = `
            <span id="ch-title">👾 Smokin Hacks</span>
            <div class="ch-div"></div>
            <button class="ch-btn" id="ch-killaura">
                <span>Killaura</span>
                <span class="ch-key">J</span>
            </button>
            <div class="ch-div"></div>
            <button class="ch-btn" id="ch-autospike">
                <span>Auto-Spike</span>
                <span class="ch-key">K</span>
            </button>
            <div class="ch-div"></div>
            <div class="ch-range-wrap">
                <span>Range</span>
                <input class="ch-inp" id="ch-krange" type="number" min="1" max="20" step="0.5" value="7">
            </div>
            <div class="ch-div"></div>
            <label class="ch-chk">
                <input type="checkbox" id="ch-kmulti" checked> Multi
            </label>
            <div class="ch-div"></div>
            <span id="ch-status">waiting…</span>
            <div class="ch-div"></div>
            <button class="ch-hbtn" id="ch-hide" title="Hide (ShiftRight)">✕</button>
        `;
        document.body.appendChild(root);

        const kBtn = document.getElementById('ch-killaura');
        modules.killaura.btn = kBtn;
        kBtn.addEventListener('click', () => modules.killaura.toggle());

        const asBtn = document.getElementById('ch-autospike');
        modules.autoSpike.btn = asBtn;
        asBtn.addEventListener('click', () => modules.autoSpike.toggle());

        const bindInput = (id, cb) => {
            const el = document.getElementById(id);
            el.addEventListener('change', e => cb(+e.target.value || 0));
            el.addEventListener('focus',  () => attempt(() => { if (bloxd.noa?.inputs) bloxd.noa.inputs._paused = true; }));
            el.addEventListener('blur',   () => attempt(() => { if (bloxd.noa?.inputs) bloxd.noa.inputs._paused = false; }));
            el.addEventListener('keydown', e => e.stopPropagation(), true);
            el.addEventListener('keyup',   e => e.stopPropagation(), true);
        };
        bindInput('ch-krange', v => modules.killaura.range = Math.max(1, v));
        document.getElementById('ch-kmulti').addEventListener('change', e => modules.killaura.multi = e.target.checked);

        let visible = true;
        document.getElementById('ch-hide').addEventListener('click', () => {
            visible = false;
            root.classList.add('hidden');
        });

        document.addEventListener('keydown', e => {
            switch (e.code) {
                case 'ShiftRight': visible=!visible; root.classList.toggle('hidden', !visible); return;
                case 'KeyJ': modules.killaura.toggle(); return;
                case 'KeyK': modules.autoSpike.toggle(); return;
            }
        }, true);
    }

    function setStatus(msg, on) {
        const el = document.getElementById('ch-status'); if (!el) return;
        el.textContent = msg; el.className = on ? 'on' : '';
    }

    let inGame = false, announced = false;

    function rafLoop() {
        requestAnimationFrame(rafLoop);
        if (!inGame) return;
        attempt(() => vals(modules).forEach(m => { if (m.enabled) m.onTick(); }));
    }

    function watchGame() {
        setInterval(() => {
            const now = game.inGame();
            if (now && !inGame) {
                inGame = true; setStatus('● ONLINE', true);
                if (!announced) { game.sendMsg('👾 Smokin Hacks v1.4 — J=Killaura | K=Auto-Spike'); announced = true; }
            } else if (!now && inGame) {
                inGame = false; setStatus('awaiting game…', false);
            }
        }, 500);
    }

    let uiBuilt = false;

    function tryInit() {
        if (!window.noa) { bloxd.init(); return; }
        if (!uiBuilt) {
            uiBuilt = true;
            buildUI();
            watchGame();
            rafLoop();
        }
    }

    bloxd.init();

    const poll = setInterval(() => {
        tryInit();
        if (uiBuilt) clearInterval(poll);
    }, 250);

})();