您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Display idlescape.xyz prices on inventory items
// ==UserScript== // @name Idlescape Show prices on Inventory // @namespace ISSpoI // @version 1.0.0 // @description Display idlescape.xyz prices on inventory items // @author Dael // @include *://*idlescape.com/game* // @run-at document-start // @grant GM_xmlhttpRequest // @connect api.idlescape.xyz // ==/UserScript== (function() { 'use strict'; const priceDataRefreshRate = 60 * 1000; function start() { const gameContainer = document.getElementsByClassName("play-area-container"); if(gameContainer.length === 0) { setTimeout(start, 500); } else { if (_isIronManCharacter()) return; addMutationObserver(); getPriceData(); setInterval(() => { getPriceData(); }, priceDataRefreshRate); } } function _isIronManCharacter(){ return document.getElementsByClassName("header-league-icon")[0].getAttribute("src").includes("ironman"); } function addMutationObserver(){ const callback = function(mutationsList, observer) { if (document.getElementsByClassName("marketplace-content").length > 0) getPriceData(); if (document.getElementsByClassName("scrollcrafting-main").length > 0) getPriceData(); }; // Observe Play Area DOM changes const playAreaContainer = document.getElementsByClassName("play-area-container")[0]; const config = {attributes: true, childList: true, subtree: true }; const observer = new MutationObserver(callback); observer.observe(playAreaContainer, config); } function getPriceData() { GM_xmlhttpRequest({ method: "GET", url: "https://api.idlescape.xyz/prices", onload: (response) => { try{ const priceData = {}; const apiPriceData = JSON.parse(response.responseText)['items']; apiPriceData.forEach(data => { priceData[data["name"]] = data["price"]; }); _updateInventoryPrices(priceData); } catch(e) { //console.log("Api returned an invalid JSON: " + response.responseText); } } }); } function _updateInventoryPrices(priceData) { _addPriceToInventory(priceData); _addPriceToMarketplace(priceData); _addPriceToScrollcrafting(priceData); } function _addPriceToInventory(priceData) { let inventoryDiv = document.getElementsByClassName("inventory-panel"); if (inventoryDiv.length === 0) return; const regex = /\d+(.+)(vault|stockpile)/; inventoryDiv[0].querySelectorAll(".item").forEach(item => { let itemName = regex.exec(item.attributes['data-for'].nodeValue)[1]; const price = priceData[itemName]; _addPriceDivToItem(item, price); }) } function _addPriceToMarketplace(priceData) { let marketplaceDiv = document.getElementsByClassName("marketplace-content"); if (marketplaceDiv.length === 0) return; if (document.getElementsByClassName("marketplace-sell-items all-items").length > 0) return; marketplaceDiv[0].querySelectorAll(".item-icon").forEach(item => { const itemName = item.attributes['alt'].nodeValue; item = item.parentNode; const price = priceData[itemName]; _addPriceDivToItem(item, price); }) } function _addPriceToScrollcrafting(priceData) { let scrollCrafting = document.getElementsByClassName("scrollcrafting-main"); if (scrollCrafting.length === 0) return; scrollCrafting[0].querySelectorAll(".scrollcrafting-image").forEach(item => { const itemName = item.attributes['alt'].nodeValue; item = item.parentNode; const price = priceData[itemName]; _addPriceDivToItem(item, price); }) } function _addPriceDivToItem(item, price){ if(item.getElementsByClassName("price").length === 0){ // If the div was not created yet, create it with adapted CSS style and also move down the enchant icon const newNode = document.createElement("div"); newNode.className = "price"; newNode.style.position = "absolute"; newNode.style.top = "-4px"; newNode.style.left = "1px"; newNode.style.color = "#ffc107"; newNode.style.fontSize = "11px"; const lastNode = item.lastElementNode; item.insertBefore(newNode, lastNode); const enchantNode = item.getElementsByClassName("item-enchant").item(0); if (enchantNode != null){ enchantNode.style.position = "absolute"; enchantNode.style.top = "8px"; enchantNode.style.left = "0px"; } } if (price !== undefined) item.getElementsByClassName("price").item(0).textContent = price.toLocaleString(); } start(); })();