Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ==UserScript==
- // @name NyanCatTW1's badge type display script
- // @namespace http://tampermonkey.net/
- // @version 1.000
- // @author Nyan Cat
- // @match https://*.roblox.com/badges/*
- // @grant GM.xmlHttpRequest
- // @grant unsafeWindow
- // @connect bor-valuable-badge-database-production.up.railway.app
- // ==/UserScript==
- /*jshint esversion: 8 */
- /*jshint loopfunc: true */
- /*global $ */
- var allNVLBadgeIds = new Set();
- function isNVL(badgeId) {
- return allNVLBadgeIds.has(parseInt(badgeId));
- }
- function getBadgeValue(placeId, badgeId) {
- if (badgeValuesDict[placeId].hasOwnProperty(badgeId)) {
- return badgeValuesDict[placeId][badgeId];
- }
- return NaN;
- }
- function reportMissingBadgesToDB(badgeIds) {
- GM.xmlHttpRequest({
- method: "GET",
- url: `https://bor-valuable-badge-database-production.up.railway.app/api/v3/user/reportmissing?badgeIds=${badgeIds.join(",")}`,
- onload: function(response) {
- return response;
- },
- onerror: function() {
- return "null";
- }
- });
- }
- function checkBadgeValuesOnload(placeId, response) {
- unsafeWindow.badgeDbNeedsRefresh = false;
- var resp = JSON.parse(response.responseText).data;
- var missingBadges = [];
- for (var badgeId in resp) {
- var badge = resp[badgeId];
- if (!badge.found) {
- unsafeWindow.badgeDbNeedsRefresh = true;
- missingBadges.push(badge.badge_id);
- continue;
- }
- valueCheckedBadgeIds[placeId].add(badge.badge_id);
- badgeValuesDict[placeId][badge.badge_id] = badge.value;
- if (badge.is_nvl) {
- allNVLBadgeIds.add(badge.badge_id);
- }
- }
- if (unsafeWindow.badgeDbNeedsRefresh) {
- reportMissingBadgesToDB(missingBadges);
- }
- }
- function checkBadgeValues() {
- for (let i = 0, n = allPlaces.length; i < n; i++) {
- let placeId = allPlaces[i];
- var toCheck = [];
- for (let i = 0, n = allBadgeIds[placeId].length; i < n; i++) {
- let id = allBadgeIds[placeId][i];
- if (!valueCheckedBadgeIds[placeId].has(id)) {
- toCheck.push(id);
- }
- }
- if (toCheck.length === 0) {
- continue;
- }
- toCheck = toCheck.slice(0, 100);
- const url = `https://bor-valuable-badge-database-production.up.railway.app/api/v3/query/bybadgeids?badgeIds=${toCheck.join(",")}`;
- GM.xmlHttpRequest({
- method: "GET",
- url: url,
- onload: checkBadgeValuesOnload.bind(null, placeId),
- });
- }
- }
- function initPlaceRecord(placeId) {
- if (allPlaces.includes(placeId)) {
- console.error("Who the hell called initPlaceRecord twice ??/?/???///");
- return;
- }
- allPlaces.push(placeId);
- allBadgeIds[placeId] = [];
- valueCheckedBadgeIds[placeId] = valueCheckedBadgeIds[placeId] || new Set();
- badgeValuesDict[placeId] = badgeValuesDict[placeId] || {};
- }
- var allPlaces = [];
- var allBadgeIds = {};
- var valueCheckedBadgeIds = {};
- var badgeValuesDict = {};
- var curPlaceId = 0;
- function updateBadgesPageDisplay() {
- var badgeValue = getBadgeValue(curPlaceId, allBadgeIds[curPlaceId][0]);
- if (isNaN(badgeValue)) {
- badgeValue = 0;
- } else {
- badgeValue += 1;
- }
- if (isNVL(allBadgeIds[curPlaceId][0])) {
- badgeValue = 4;
- }
- var badgeValueDescs = ["Loading...", "Free", "Valuable (non-legacy)", "Legacy", "Non-Valuable Legacy"];
- var badgeValueElm = document.getElementById("nyan-badge-value");
- if (badgeValueElm === null) {
- document.getElementsByClassName("clearfix item-type-field-container")[0].outerHTML += `
- <div class="clearfix item-field-container">
- <div class="font-header-1 text-subheader text-label text-overflow field-label">Value</div>
- <div class="field-content" id="nyan-badge-value">Loading...</div>
- </div>`;
- } else if (badgeValueElm.innerText != badgeValueDescs[badgeValue]) {
- badgeValueElm.innerText = badgeValueDescs[badgeValue];
- }
- }
- // Init
- if (location.href.includes("/badges/")) {
- // F: I know, I know, it's dirty like hell
- curPlaceId = [].concat.apply([], document.getElementsByTagName("a"))
- .filter((elm) => elm.href.includes("PlaceId="))[0]
- .href.split("PlaceId=")[1].split("&")[0];
- initPlaceRecord(curPlaceId);
- allBadgeIds[curPlaceId].push(location.href.split("/")[4])
- setInterval(updateBadgesPageDisplay, 100);
- setInterval(checkBadgeValues, 100);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement