ESP PRIVATE VOXIOM

ESP Voxiom Private

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         ESP PRIVATE VOXIOM
// @namespace    http://tampermonkey.net/
// @version      0.69696971
// @description  ESP Voxiom Private
// @author       Whoami
// @match        *://voxiom.io/*
// @license MIT
// @icon         data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant        none
// @require      https://unpkg.com/three@latest/build/three.min.js
// ==/UserScript==

let playersVisible = true;

window.addEventListener('keyup', function (event) {
    if (event.code === 'KeyV') {
        playersVisible = !playersVisible;
        console.log(`Players visible: ${playersVisible}`);
    }
});

const THREE = window.THREE;
const geo = new THREE.EdgesGeometry(new THREE.BoxGeometry(1.0, 1.0, 1.0).translate(0, 0.5, 0));

// Prevents items from getting dropped when detected
Object.defineProperty(window, 'THREE', { get() { return undefined; } });

let currentColor = 0;

function makeHitbox() {
    let hitbox = new THREE.LineSegments(geo);
    hitbox.material = new THREE.RawShaderMaterial({
        vertexShader: `attribute vec3 position;uniform mat4 projectionMatrix;uniform mat4 modelViewMatrix;void main() {gl_Position = projectionMatrix*modelViewMatrix*vec4( position, 1.0 );gl_Position.z = 1.0;}`,
        fragmentShader: `precision mediump float;uniform vec3 color;void main() {gl_FragColor = vec4( color, 1.0 );}`,
        uniforms: { color: { value: new THREE.Color(`hsl(${currentColor}, 100%, 50%)`) } }
    });
    hitbox.scale.set(0.4, 1.2, 0.4);
    return hitbox;
}

let gameScene;
WeakMap.prototype.set = new Proxy(WeakMap.prototype.set, {
    apply(target, thisArg, [scene]) {
        if (scene.type === 'Scene') {
            if (scene.children.length === 9) {
                window.scene = scene;
                gameScene = scene;
                console.log('Game scene detected and set.');
            }
        }
        return Reflect.apply(target, thisArg, arguments);
    }
});

window.requestAnimationFrame = new Proxy(window.requestAnimationFrame, {
    apply(target, thisArg, args) {
        args[0] = new Proxy(args[0], {
            apply(callback, callbackThis, callbackArgs) {
                if (gameScene == null) {
                    return Reflect.apply(callback, callbackThis, callbackArgs);
                }

                currentColor = (currentColor + 1) % 360; // Increment currentColor by 1 and reset to 0 when it reaches 360

                const allEntities = gameScene.children[5].children;
                for (let i = 0; i < allEntities.length; i++) {
                    const entity = allEntities[i];
                    if (entity.children.length === 0) {
                        continue;
                    }
                    if (!entity.HitBox) {
                        const name = entity.children[0].name;
                        // Game scene saves name as parachute, hence can be used to recognize a player
                        if (name === 'Parachute') {
                            entity.isPlayer = true;
                            // Generate a hitbox for the player
                            let hitbox = makeHitbox();
                            entity.add(hitbox);
                            entity.HitBox = hitbox;
                            console.log('Hitbox added to player.');
                        }
                    }
                    if (entity.HitBox != null) {
                        entity.HitBox.material.uniforms.color.value = new THREE.Color(`hsl(${currentColor}, 100%, 50%)`); // Update hitbox color
                        entity.HitBox.visible = playersVisible;
                    }
                }
                return Reflect.apply(callback, callbackThis, callbackArgs);
            }
        });
        return Reflect.apply(target, thisArg, args);
    }
});

console.log('Script loaded.');