My First Multi-Player Radar

Scans and logs multiple players simultaneously using engine components

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey, Greasemonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да инсталирате разширение, като например Tampermonkey .

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Userscripts.

За да инсталирате скрипта, трябва да инсталирате разширение като Tampermonkey.

За да инсталирате този скрипт, трябва да имате инсталиран скриптов мениджър.

(Вече имам скриптов мениджър, искам да го инсталирам!)

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

(Вече имам инсталиран мениджър на стиловете, искам да го инсталирам!)

// ==UserScript==
// @name         My First Multi-Player Radar
// @namespace    http://tampermonkey.net
// @version      1.1
// @description  Scans and logs multiple players simultaneously using engine components
// @author       You
// @match        *://*.bloxd.io/*
// @match        *://*.bloxdhop.io/*
// @match        *://*://*
// @run-at       document-body
// @grant        none
// ==/UserScript==


(function() {
    'use strict';

    let savedEngine = null;

    // 1. THE ANTENNA: Hook into the game's loading files to grab the engine
    Object.defineProperty(Function.prototype, 'call', {
        enumerable: false,
        configurable: true,
        writable: true,
        value: function (thisArg, ...args) {
            const core = args[0];
            // If we catch a piece of code containing 'entities' and 'bloxd', save it!
            if (core && core.entities && core.bloxd) {
                savedEngine = core;
                console.log("Successfully hooked into the Bloxd engine!");
            }
            return Function.prototype.call.apply(this, [thisArg, ...args]);
        }
    });

    // 2. THE MULTI-TARGET MONITOR LOOP
    setInterval(() => {
        if (!savedEngine) return;

        // Fetch your own position (You are always ID 1)
        let pos = savedEngine.entities.getState(1, "position")?.position;
        if (!pos) return;

        // DYNAMIC SCANNER: Extract a fresh list of EVERY entity currently loaded around you
        let allPlayerIds = Object.keys(savedEngine.entities.components.position);

        // This loop automatically repeats your distance math for every single active ID found
        allPlayerIds.forEach(id => {
            if (id == "1") return; // Skip yourself to prevent self-targeting

            // Fetch the current loop player's coordinate array dynamically
            let enemypos = savedEngine.entities.getState(id, "position")?.position;
            if (!enemypos) return;

            // FIXED VECTOR MATH: Subtracting individual elements keeps the calculations stable
            let dx = pos[0] - enemypos[0];
            let dy = pos[1] - enemypos[1];
            let dz = pos[2] - enemypos[2];
            let distance = Math.sqrt(dx*dx + dy*dy + dz*dz);

            // Execute the action block if this specific player is within range
            if (distance <= 6.0) {
                console.log(`attack ID: ${id} | Distance: ${distance.toFixed(2)}`);
            }
        });
    }, 100);

})();