Greasy Fork is available in English.
Modifies Robux display and item details on Roblox pages by OB
// ==UserScript==
// @name Enhanced Roblox Display Modifier by OB
// @namespace http://tampermonkey.net/
// @version 1.6
// @description Modifies Robux display and item details on Roblox pages by OB
// @match https://*.roblox.com/*
// @license MIT
// @grant none
// @run-at document-start
// ==/UserScript==
(function() {
'use strict';
// Configuration
const config = {
desiredRobuxAmount: 100000,
itemsToModify: [
{
originalName: "ITEM NAME",
newName: "Sparkle Time Fedora",
newImageUrl: "https://tr.rbxcdn.com/0c54305eb2775385ee670cb16f28e1f0/150/150/Hat/Webp",
hasRestrictionIcon: true
},
{
originalName: "ITEM NAME",
newName: "Blackvalk",
newImageUrl: "https://tr.rbxcdn.com/8d250084fe0bfe56b7ef82ead80fc079/150/150/Hat/Webp",
hasRestrictionIcon: true
},
{
originalName: "ITEM NAME",
newName: "Teal Sparkle Time Fedora",
newImageUrl: "https://tr.rbxcdn.com/401b49b8a1c3ca0956b3a137f9f2d17d/150/150/Hat/Webp",
hasRestrictionIcon: true
}
]
};
// Function to format the Robux amount with K for thousands (no decimal)
function formatRobuxAmountK(amount) {
return amount >= 1000 ? Math.floor(amount / 1000) + 'K' : amount.toString();
}
// Function to format the Robux amount with commas
function formatRobuxAmountCommas(amount) {
return amount.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}
// Function to edit the Robux display in the navigation bar
function editNavRobuxDisplay() {
const robuxAmountElement = document.getElementById('nav-robux-amount');
const formattedAmount = formatRobuxAmountK(config.desiredRobuxAmount);
if (robuxAmountElement && robuxAmountElement.textContent !== formattedAmount) {
robuxAmountElement.textContent = formattedAmount;
}
}
// Function to edit the Robux display in the balance area
function editBalanceRobuxDisplay() {
const balanceElements = document.querySelectorAll('span:has(.icon-robux-16x16)');
balanceElements.forEach(element => {
const robuxElement = element.querySelector('.icon-robux-16x16');
if (robuxElement && robuxElement.nextSibling) {
const formattedAmount = formatRobuxAmountCommas(config.desiredRobuxAmount);
robuxElement.nextSibling.textContent = formattedAmount;
}
});
}
// Function to modify item details
function modifyItemDetails() {
const itemCards = document.querySelectorAll('.item-card');
itemCards.forEach(card => {
const itemNameElement = card.querySelector('.item-card-name');
const itemImageElement = card.querySelector('.item-card-thumb-container img');
if (itemNameElement && itemImageElement) {
const itemName = itemNameElement.textContent.trim();
const originalItem = config.itemsToModify.find(item => item.originalName.toLowerCase() === itemName.toLowerCase());
if (originalItem) {
// Update the item name
itemNameElement.textContent = originalItem.newName;
itemNameElement.title = originalItem.newName;
// Update the item image
itemImageElement.src = originalItem.newImageUrl;
itemImageElement.setAttribute('ng-src', originalItem.newImageUrl); // For AngularJS bindings
// Check for restriction icon
const restrictionIconContainer = card.querySelector('.item-card-thumb-container');
// Create the restriction icon
if (originalItem.hasRestrictionIcon) {
const iconSpan = document.createElement('span');
iconSpan.className = 'restriction-icon icon-limited-unique-label';
iconSpan.setAttribute('ng-show', 'item.itemRestrictionIcon');
iconSpan.setAttribute('ng-class', 'item.itemRestrictionIcon');
// Remove existing icons to avoid duplicates
const existingIcon = restrictionIconContainer.querySelector('.restriction-icon');
if (existingIcon) {
existingIcon.remove();
}
// Append the new icon
restrictionIconContainer.appendChild(iconSpan);
}
}
}
});
}
// Function to continuously check and update all displays
function updateAllDisplays() {
editNavRobuxDisplay();
editBalanceRobuxDisplay();
modifyItemDetails();
requestAnimationFrame(updateAllDisplays);
}
// Start observing DOM changes
const observer = new MutationObserver(() => {
editNavRobuxDisplay();
editBalanceRobuxDisplay();
modifyItemDetails();
});
// Function to start everything
function init() {
updateAllDisplays();
observer.observe(document.body, { childList: true, subtree: true });
}
// Run init as soon as the DOM is ready
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', init);
} else {
init();
}
})();