// ==UserScript== // @name Alienware Arena Filters // @namespace http://updownleftdie.com/ // @version 1.1 // @description Filter out tier-restricted content on Alienware Arena // @author UpDownLeftDie // @match https://*.alienwarearena.com/* // @grant GM_setValue // @grant GM_getValue // @license AGPL // @downloadURL https://update.greasyfork.icu/scripts/522440/Alienware%20Arena%20Filters.user.js // @updateURL https://update.greasyfork.icu/scripts/522440/Alienware%20Arena%20Filters.meta.js // ==/UserScript== (function () { 'use strict'; // Settings management const defaultSettings = { hideClosedGiveaways: true, hideTierRestricted: true, autoSyncTier: true, hideOutOfStock: true, hideClaimed: true, }; function getSettings() { const savedSettings = GM_getValue('filterSettings'); // Start with default settings as base const settings = { ...defaultSettings }; if (savedSettings) { try { const parsed = JSON.parse(savedSettings); // Merge saved settings with defaults Object.assign(settings, parsed); // Ensure userTier is a number or undefined settings.userTier = parsed.userTier != null ? Number(parsed.userTier) : undefined; // If Number() returned NaN, set to undefined if (Number.isNaN(settings.userTier)) { settings.userTier = undefined; } } catch (e) { console.error('Error parsing saved settings:', e); // On error, return defaults return defaultSettings; } } return settings; } function saveSettings(settings) { const prevSettings = getSettings(); const newSettings = { ...prevSettings, ...settings, }; GM_setValue('filterSettings', JSON.stringify(newSettings)); } // Function to extract tier number from text function extractTier(text) { const match = text.match(/Tier\s*(\d+)/i); return match ? parseInt(match[1]) : null; } // Function to check and store user's tier on control center page function checkAndStoreTier() { const tierImg = document.querySelector( 'img[src*="/images/content/tier-tags/"]', ); if (tierImg) { const tierMatch = tierImg.src.match(/tier-tags\/(\d+)\.png/); if (tierMatch) { const userTier = parseInt(tierMatch[1]); saveSettings({ userTier }); console.log('Stored user tier:', userTier); } } } // Function to filter community giveaways function filterGiveaways() { const settings = getSettings(); const userTier = settings.userTier ?? 99; const giveaways = document.querySelectorAll( 'div.mb-3.community-giveaways__listing__row', ); giveaways.forEach((giveaway) => { const text = giveaway.textContent; if (settings.hideClosedGiveaways && text.includes('Closed')) { giveaway.style.display = 'none'; return; } if (settings.hideTierRestricted) { const tierNumber = extractTier(text); if (tierNumber && tierNumber > userTier) { giveaway.style.display = 'none'; } } }); } // Function to filter marketplace items function filterMarketplace() { const settings = getSettings(); const userTier = settings.userTier ?? 99; const items = document.querySelectorAll( '.pointer.marketplace-game-small, .pointer.marketplace-game-large, .product-tile, .featured-tile', ); items.forEach((item) => { const text = item.textContent; if ( settings.hideOutOfStock && text.toLowerCase().includes('out of stock') ) { item.style.display = 'none'; return; } if (settings.hideClaimed && text.toLowerCase().includes('claimed')) { item.style.display = 'none'; return; } if (settings.hideTierRestricted) { const tierNumber = extractTier(text); if (tierNumber && tierNumber > userTier) { item.style.display = 'none'; } } }); if ( [...document.querySelectorAll('.row.mt-3 .featured-tile')].every( (tile) => tile.style.display === 'none', ) ) { const flashDealsSection = document.querySelector( 'div[style*="border-style: solid"][class*="row mt-3"]', ); if (flashDealsSection) { flashDealsSection.style.display = 'none'; } } } // Function to create settings menu function createSettingsMenu() { const settings = getSettings(); const menuHTML = `