Greasy Fork

p_dh Robux Spoofer

Combines fake Robux transactions with spoofed Robux display and formatting

// ==UserScript==
// @name         p_dh Robux Spoofer
// @namespace    http://tampermonkey.net/
// @version      1.22
// @description  Combines fake Robux transactions with spoofed Robux display and formatting
// @author       p_dh
// @match        *://*.roblox.com/*
// @grant        GM.setValue
// @grant        GM.getValue
// @icon         https://upload.wikimedia.org/wikipedia/commons/thumb/c/c7/Robux_2019_Logo_gold.svg/1883px-Robux_2019_Logo_gold.svg.png
// @license      MIT
// ==/UserScript==

// esc to access the menu

(function() {
    'use strict';

    var amount = 12820;
    var salesOfGoodsExtra = 460325; // Amount to add to "Sales of Goods"
    var purchasesBaseAmount = 460325; // Base amount for Purchases

    document.addEventListener('keydown', function(event){
        if(event.key === "Escape"){
            var UsernameDoc = document.querySelector(".age-bracket-label-username");
            if (UsernameDoc) {
                var newAmount = prompt("Choose the Number to set " + UsernameDoc.innerHTML + "'s Robux to:                                MINIMUM OF 1,100,000");
                if (!isNaN(newAmount)) {
                    setValue(Number(newAmount) + salesOfGoodsExtra);
                } else {
                    console.log("Invalid amount entered");
                }
            } else {
                console.log("Username element not found");
            }
        }
    });

    function setValue(amount) {
        GM.setValue("RobuxSaved", amount).then(function() {
            updateAmounts();
        }).catch(function(error) {
            console.error("Error setting RobuxSaved:", error);
        });
    }

    function getValue(key, defaultValue) {
        return GM.getValue(key, defaultValue);
    }

    function updateAmounts() {
        getValue("RobuxSaved", salesOfGoodsExtra).then(function(savedAmount) {
            amount = savedAmount;
            updateRobuxDisplay();
            replaceTransactionAmounts();
        }).catch(function(error) {
            console.error("Error getting RobuxSaved:", error);
        });
    }

    function format(num) {
        if (num < 1000) { return num.toString(); }
        if (num >= 1000 && num < 1000000) { return (num / 1000).toFixed(1) + "K+"; }
        if (num >= 1000000 && num < 1000000000) { return (num / 1000000).toFixed(1) + "M+"; }
        if (num >= 1000000000 && num < 1000000000000) { return (num / 1000000000).toFixed(1) + "B+"; }
        if (num >= 1000000000000 && num < 1000000000000000) { return (num / 1000000000000).toFixed(1) + "T+"; }
        if (num >= 1000000000000000) { return (num / 1000000000000000).toFixed(1) + "Q+"; }
    }

    function addCommas(num) {
        return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
    }

    function updateRobuxDisplay() {
        var robux = document.getElementById("nav-robux-amount");
        if (robux && robux.innerHTML !== format(amount)) {
            robux.innerHTML = format(amount);
        }
        var robux2 = document.getElementById("nav-robux-balance");
        if (robux2 && robux2.innerHTML && robux2.innerHTML !== amount.toLocaleString()) {
            robux2.innerHTML = amount.toLocaleString() + ' Robux';
        }
    }

    function replaceTransactionAmounts() {
        var categories = ['premium stipends', 'currency purchases', 'sales of goods', 'group payouts', 'purchases'];
        var transactionRows = document.querySelectorAll('tr');

        // Allocate a higher percentage to "Sales of Goods" and "Group Payouts"
        var salesOfGoodsPercentage = 0.5; // 50%
        var groupPayoutsPercentage = 0.2; // 20%

        var salesOfGoodsAmount = (amount * salesOfGoodsPercentage).toFixed(0);
        var groupPayoutsAmount = (amount * groupPayoutsPercentage).toFixed(0);

        salesOfGoodsAmount = Number(salesOfGoodsAmount) + salesOfGoodsExtra;

        var premiumStipendsAmount = 4400;
        var purchasesAmount = purchasesBaseAmount + amount - salesOfGoodsAmount - groupPayoutsAmount - premiumStipendsAmount;

        var replacedTotal = false;

        transactionRows.forEach(function(row) {
            var transactionLabel = row.querySelector('.summary-transaction-label');
            if (transactionLabel) {
                var label = transactionLabel.textContent.trim().toLowerCase();
                var tdBalanceElement = row.querySelector('.amount.icon-robux-container span:last-child');
                if (tdBalanceElement) {
                    if (label === 'premium stipends') {
                        tdBalanceElement.textContent = addCommas(premiumStipendsAmount);
                    } else if (label === 'sales of goods') {
                        tdBalanceElement.textContent = addCommas(salesOfGoodsAmount);
                    } else if (label === 'group payouts') {
                        tdBalanceElement.textContent = addCommas(groupPayoutsAmount);
                    } else if (label === 'purchases') {
                        tdBalanceElement.textContent = addCommas(purchasesAmount);
                    } else if (label === 'total') {
                        tdBalanceElement.textContent = addCommas(amount);
                        replacedTotal = true;
                    } else if (categories.includes(label)) {
                        var otherCategoriesAmount = (amount - premiumStipendsAmount - salesOfGoodsAmount - groupPayoutsAmount).toFixed(0);
                        tdBalanceElement.textContent = addCommas(otherCategoriesAmount);
                    }
                }
            }
        });

        var balanceElement = document.querySelector('.balance-label.icon-robux-container span');
        if (balanceElement) {
            balanceElement.innerHTML = 'My Balance: <span class="icon-robux-16x16"></span>' + addCommas(amount);
        }
    }

    function start() {
        updateRobuxDisplay();
        updateAmounts();
        setInterval(function() {
            updateAmounts();
        }, 1000);
    }

    window.onload = function() {
        start();
    };
})();