Kirka.io Chams/Wallhacks GUI (2025) **WORKING**

Toggleable working wallhack (chams) GUI for Kirka.io by Emulation

// ==UserScript==
// @name         Kirka.io Chams/Wallhacks GUI (2025) **WORKING**
// @author       Emulation
// @match        *://kirka.io/*
// @version      1.3
// @description  Toggleable working wallhack (chams) GUI for Kirka.io by Emulation
// @run-at       document-start
// @namespace    EmuChams
// @license      Emulation
// ==/UserScript==

(function () {
    let enabled = true;
    const modifiedMaterials = new WeakSet();

    // Patch material colors for chams ON/OFF
    const patchMaterial = (material) => {
        if (!material || !material.map || !material.map.image) return;
        const isTarget = material.map.image.width === 64 && material.map.image.height === 64;
        if (!isTarget) return;

        if (enabled && !modifiedMaterials.has(material)) {
            for (let key in material) {
                if (material[key] === 3) {
                    material[key] = 1;
                    modifiedMaterials.add(material);
                }
            }
        } else if (!enabled && modifiedMaterials.has(material)) {
            for (let key in material) {
                if (material[key] === 1) {
                    material[key] = 3;
                }
            }
            modifiedMaterials.delete(material);
        }
    };

    // Hook Array.isArray to intercept material use
    const proxyHandler = {
        apply(target, thisArg, args) {
            patchMaterial(args[0]);
            return Reflect.apply(target, thisArg, args);
        }
    };
    const originalIsArray = Array.isArray;
    Array.isArray = new Proxy(originalIsArray, proxyHandler);

    // Force material patching on any new materials dynamically
    const observeMaterials = () => {
        const interval = setInterval(() => {
            if (window.THREE) {
                const walk = (obj) => {
                    if (!obj || typeof obj !== "object") return;
                    if (obj.material) {
                        const mat = obj.material;
                        if (Array.isArray(mat)) mat.forEach(patchMaterial);
                        else patchMaterial(mat);
                    }
                    for (const key in obj) {
                        if (obj.hasOwnProperty(key)) walk(obj[key]);
                    }
                };
                walk(window);
                clearInterval(interval);
            }
        }, 1000);
    };

    // GUI creation function
    function createGUI() {
        const gui = document.createElement('div');
        gui.innerHTML = `
            <div id="emu-chams-gui" style="
                position: fixed;
                top: 120px;
                left: 120px;
                background: rgba(30, 30, 30, 0.9);
                border: 1px solid #00f0ff;
                border-radius: 12px;
                padding: 15px;
                width: 220px;
                font-family: 'Segoe UI', sans-serif;
                color: #fff;
                z-index: 9999;
                box-shadow: 0 0 15px rgba(0, 240, 255, 0.6);
                user-select: none;
                cursor: grab;
            ">
                <div style="margin-bottom: 10px; font-size: 17px; font-weight: bold;">
                    🎯 Emu's Chams
                </div>
                <div>Status: <span id="chams-status" style="color:#00ff90;">ON</span></div>
                <button id="toggle-chams" style="
                    margin-top: 10px;
                    width: 100%;
                    background: #00f0ff;
                    color: #000;
                    font-weight: bold;
                    border: none;
                    padding: 8px;
                    border-radius: 8px;
                    cursor: pointer;
                    transition: background 0.3s ease;
                ">Toggle Chams</button>
                <div style="margin-top: 10px; font-size: 12px; text-align: right;">By <b>Emulation</b></div>
            </div>
        `;
        document.body.appendChild(gui);

        const guiBox = document.getElementById('emu-chams-gui');
        const toggleBtn = document.getElementById('toggle-chams');
        const statusText = document.getElementById('chams-status');

        toggleBtn.onclick = () => {
            enabled = !enabled;
            statusText.textContent = enabled ? 'ON' : 'OFF';
            statusText.style.color = enabled ? '#00ff90' : '#ff4f4f';
            toggleBtn.style.background = enabled ? '#00f0ff' : '#ff4f4f';

            // Reapply patches to materials immediately after toggle
            observeMaterials();
        };

        // Draggable GUI logic
        let isDragging = false, offsetX = 0, offsetY = 0;

        guiBox.addEventListener('mousedown', (e) => {
            isDragging = true;
            offsetX = e.clientX - guiBox.getBoundingClientRect().left;
            offsetY = e.clientY - guiBox.getBoundingClientRect().top;
            guiBox.style.cursor = 'grabbing';
        });

        window.addEventListener('mousemove', (e) => {
            if (isDragging) {
                guiBox.style.left = `${e.clientX - offsetX}px`;
                guiBox.style.top = `${e.clientY - offsetY}px`;
            }
        });

        window.addEventListener('mouseup', () => {
            isDragging = false;
            guiBox.style.cursor = 'grab';
        });
    }

    // Wait for DOM to be ready then create GUI
    if (document.readyState === 'loading') {
        document.addEventListener('DOMContentLoaded', createGUI);
    } else {
        createGUI();
    }

    // Initial call to start watching materials
    observeMaterials();

})();

QingJ © 2025

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