const Manifest = chrome.runtime.getManifest(); const SettingsURL = chrome.runtime.getURL('settings.html'); const DefaultSettings = { PinnedGamesOn: true, ForumMentsOn: true, BestFriendsOn: false, ImprovedFrListsOn: false, IRLPriceWithCurrency: { Enabled: true, Currency: 0, Package: 0 }, IRLPriceWithCurrencyOn: true, IRLPriceWithCurrencyCurrency: 0, IRLPriceWithCurrencyPackage: 0, HideNotifBadgesOn: false, StoreOwnTagOn: true, ThemeCreatorOn: false, ThemeCreator: { Enabled: false, BGColor: null, BGImage: null, BGImageSize: 'fit', PrimaryTextColor: null, SecondaryTextColor: null, LinkTextColor: null, WebsiteLogo: null }, ModifyNavOn: false, ModifyNav: [ { Label: 'Places', Link: 'https://polytoria.com/places' }, { Label: 'Store', Link: 'https://polytoria.com/store' }, { Label: 'Guilds', Link: 'https://polytoria.com/guilds' }, { Label: 'People', Link: 'https://polytoria.com/users' }, { Label: 'Forum', Link: 'https://polytoria.com/forum' } ], MoreSearchFiltersOn: true, ApplyMembershipTheme: { Enabled: false, Theme: 0 }, ApplyMembershipThemeOn: false, ApplyMembershipThemeTheme: 0, MultiCancelOutTradesOn: true, ItemWishlistOn: true, HideUpgradeBtnOn: false, TryOnItemsOn: true, OutfitCostOn: true, ShowPlaceRevenueOn: true, ReplaceItemSalesOn: false, HoardersListOn: true, HoardersList: { Enabled: true, AvatarsEnabled: false, MinCopies: 2 }, LibraryDownloadsOn: true, EventItemsCatOn: true, HomeFriendCountOn: true, HideUserAds: { Enabled: false, Banners: true, Rectangles: true }, UploadMultipleDecals: true, GD_ServerBalanceOn: true, AvatarDimensionToggleOn: true, TheGreatDivide: { Enabled: true, UnbalancedIndicatorOn: true, MVPUserIndicatorOn: true, UserStatsOn: true, LeaderboardsOn: true }, CollectibleInventoryCatOn: true, ValueListInfo: { Enabled: true, ItemValuation: true, TradeValuation: true }, ImprovedAchievements: { Enabled: true, ProgressBarOn: true, PercentageOn: true, OpacityOn: true }, ReaddCopyablePlacesOn: true, TimePlayedOn: true, HomeJoinFriendsButtonOn: true, ImprovedPlaceManagement: { Enabled: true, QuickActivityToggleOn: true, PlaceFileDownloadOn: true, MultiWhitelistOn: true, ClearWhitelistOn: true }, MoreBlockedDetailsOn: true, AssetDesignerCreditOn: true } // ON EXTENSION INSTALL / RELOAD chrome.runtime.onInstalled.addListener(() => { chrome.storage.sync.get(['PolyPlus_Settings'], function(result){ const MergedSettings = MergeObjects((result.PolyPlus_Settings || DefaultSettings), DefaultSettings) chrome.storage.sync.set({'PolyPlus_Settings': MergedSettings}, function(){ console.log('Successfully merged settings') }) }) }); let RecordingTimePlayed = false chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) { if (request.action === 'reload') { chrome.runtime.reload(); } else if (request.action === 'greatdivide_stats') { chrome.storage.local.get(['PolyPlus_GreatDivideStats'], async function(result){ const Cache = (result['PolyPlus_GreatDivideStats']||{[request.userID]:undefined}) // cache for 5 minutes if (Cache[request.userID] === undefined || (new Date().getTime() - Cache[request.userID].requested > 300000)) { let Statistics = (await (await fetch('https://stats.silly.mom/player_stats?id=' + request.userID)).json()).results if (Statistics !== null) { Statistics = Statistics[0] } Cache[request.userID] = { data: Statistics, requested: new Date().getTime() } chrome.storage.local.set({['PolyPlus_GreatDivideStats']: Cache}, function(){}) } chrome.tabs.query({ active: true, currentWindow: true }, function(tabs){ chrome.scripting .executeScript({ target: {tabId: tabs[0].id}, func: LoadStats, args: [Cache[request.userID].data] }) }) }) const LoadStats = function(stats){ const GreatDivideCard = document.getElementById('p+greatdivide_card') if (stats !== null) { let KDR = (stats.Kills / stats.Deaths) if (isNaN(KDR)) { KDR = "N/A" } else { KDR = KDR.toFixed(4) } if (stats.Team === 'phantoms') { GreatDivideCard.parentElement.style.backgroundImage = 'linear-gradient(rgba(0.7, 0.7, 0.7, 0.7), rgba(0.7, 0.7, 0.7, 0.7)), url("https://c0.ptacdn.com/assets/N3DH4x5a6iW7raaQ-3lwHpRHHpWShdXc.png")'; GreatDivideCard.parentElement.style.borderColor = ''; GreatDivideCard.parentElement.style.border = '1.25px solid blue !important'; } else { GreatDivideCard.parentElement.style.backgroundImage = 'linear-gradient(rgba(0.7, 0.7, 0.7, 0.7), rgba(0.7, 0.7, 0.7, 0.7)), url("https://c0.ptacdn.com/assets/1HXpaoDLHJo2rrvwwxqJEDWvDZ6BgvSE.png")'; GreatDivideCard.parentElement.style.borderColor = ''; GreatDivideCard.parentElement.style.border = '1.25px solid green !important'; } GreatDivideCard.innerHTML = `
This user didn't participate in The Great Divide.
` } } return true } else if (request.action === 'start_time_played') { if (RecordingTimePlayed === true) { console.log('Time Played: Already Started Interval') return } RecordingTimePlayed = true chrome.storage.sync.get(['PolyPlus_TimePlayed'], function(result){ console.log('Time Played: Start Interval') const Playtime = result.PolyPlus_TimePlayed || { [request.placeID]: 0 }; let LoadedIn = false const TimePlayedInterval = setInterval(async () => { console.log('Time Played: Run Check') const PlaceStatus = (await (await fetch('https://api.polytoria.com/v1/users/' + request.userID)).json()).playing if (PlaceStatus === null) { console.log('Time Played: Not Playing Anything') if (LoadedIn === true) { console.log('Time Played: End Interval') clearInterval(TimePlayedInterval) } } else { LoadedIn = true if (!Playtime[PlaceStatus.placeID]) { Playtime[PlaceStatus.placeID] = 0 } Playtime[PlaceStatus.placeID] += 5 console.log('Time Played: Time Increase: ', new Date(Playtime[PlaceStatus.placeID] * 1000).toISOString().slice(11, 19), PlaceStatus) chrome.storage.sync.set({'PolyPlus_TimePlayed': Playtime}, function(){ console.log('Time Played: Saved Playtime') }) } }, 5000); }) } else if (request.action == "item_valuation") { chrome.storage.local.get(['PolyPlus_ItemValuationData'], async function(result){ const Cache = (result['PolyPlus_ItemValuationData']||{[request.itemID]:undefined}) // cache for 5 minutes if (Cache[request.itemID] === undefined || (new Date().getTime() - Cache[request.itemID].requested > 300000)) { let ValueDetails = (await (await fetch('https://polytoria.trade/api/trpc/getItem?batch=1&input={"0":' + request.itemID + '}',{mode:'no-cors'})).json()) if (ValueDetails.result.length > 0) { ValueDetails = ValueDetails[0].result.data } Cache[request.itemID] = { data: ValueDetails, requested: new Date().getTime() } chrome.storage.local.set({['PolyPlus_GreatDivideStats']: Cache}, function(){}) } chrome.tabs.query({ active: true, currentWindow: true }, function(tabs){ chrome.scripting .executeScript({ target: {tabId: tabs[0].id}, func: LoadValuation, args: [Cache[request.itemID].data] }) }) }) const LoadValuation = async function(valuation) { const GetTagColor = function(label) { if (TagColors[label] !== undefined) { return TagColors[label] } else if (TagColors[label.substring(1)] !== undefined) { return TagColors[label.substring(1)] } else { return 'dark' } } const TagColors = { "Projected": "warning", "Hoarded": "success", "Rare": "primary", "Freaky": "danger" } //const ValueDetails = (await (await fetch('https://polytoria.trade/api/trpc/getItem?batch=1&input={"0":' + ItemID + '}')).json()) if (valuation !== undefined) { ValueCard.innerHTML = `