您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Calculator for Idle-Pixel.com for Mining / Crafting / Farming / Brewing
// ==UserScript== // @name IdlePixel XP Calculator - GodofNades Fork (rehost) // @namespace namespaceuniquetome // @version 1.4.2 // @description Calculator for Idle-Pixel.com for Mining / Crafting / Farming / Brewing // @author Original Author: shtos || Modded By: GodofNades // @license MIT // @match *://idle-pixel.com/login/play* // @grant none // @require https://gf.qytechs.cn/scripts/441206-idlepixel/code/IdlePixel+.js // ==/UserScript== (function() { 'use strict'; let loaded = false; const POTION_XP_MAP = { "stardust_potion": 75, "energy_potion": 50, "anti_disease_potion": 250, "tree_speed_potion": 525, "smelting_upgrade_potion": 550, "great_stardust_potion": 1925, "farming_speed_potion": 500, "rare_monster_potion": 2125, "super_stardust_potion": 4400, "gathering_unique_potion": 3000, "heat_potion": 2500, "bait_potion": 1000, "bone_potion": 1550, "furnace_speed_potion": 6000, "promethium_potion": 2000, "oil_potion": 5000, "super_rare_monster_potion": 6000, "ultra_stardust_potion": 12900, "magic_shiny_crystal_ball_potion": 7000, "birdhouse_potion": 800, "rocket_potion": 1500, "titanium_potion": 5000, "blue_orb_potion": 50000, "geode_potion": 9500, "magic_crystal_ball_potion": 12000, "stone_converter_potion": 4000, "rain_potion": 2500, "combat_loot_potion": 9500, "rotten_potion": 1250, "merchant_speed_potion": 50000, "green_orb_potion": 200000, "guardian_key_potion": 42500, "ancient_potion": 40000, "red_orb_potion": 500000, "cooks_dust_potion": 100000, "farm_dust_potion": 100000, "fighting_dust_potion": 100000, "tree_dust_potion": 100000, "infinite_oil_potion": 0 } const INGREDIENT_XP_MAP = { "dotted_green_leaf": 25, "green_leaf": 100, "lime_leaf":250, "gold_leaf":800, "red_mushroom": 5, "strange_leaf":500, "moonstone": 249, "rocket_fuel": 250, "seaweed":0, "bones":0, "promethium":0, "titanium":0, "stranger_leaf":2875, "crystal_leaf": 2000, "super_bait": 0, "fruit_skin": 0, "maggots":0, "stone":0, "ancient_ore": 0, "blue_shooting_star": 50000, "green_shooting_star": 200000, "red_shooting_star": 500000, "charcoal": 0, "feathers": 0, "ice_feathers": 0, "fire_feathers": 0, "cooks_dust": 20000, "farm_dust": 20000, "fighting_dust": 20000, "tree_dust": 20000, "achievements": 0 } const BARS_XP_MAP = { "bronze": 5, "iron": 25, "silver": 50, "gold": 100, "promethium": 500, "titanium": 2000, "ancient": 5000, "dragon": "Nan" } const ORES_XP_MAP = { "stone": 0.1, "copper": 1, "iron": 5, "silver": 10, "gold": 20, "promethium":100, "titanium":300, "ancient": "NaN", "dragon": "NaN" } const SEEDS_XP_MAP = { "red_mushroom_seeds": 40, "dotted_green_leaf_seeds": 150, "stardust_seeds": 222, "green_leaf_seeds": 300, "lime_leaf_seeds": 390, "gold_leaf_seeds": 1000, "crystal_leaf_seeds": 2450, "tree_seeds": 3000, "oak_tree_seeds": 10000, "willow_tree_seeds": 20000, "apple_tree_seeds": 20000, "maple_tree_seeds": 45000, "banana_tree_seeds": 47800, "stardust_tree_seeds": 70000, "orange_tree_seeds": 72850, "pine_tree_seeds": 90000, "palm_tree_seeds": 100000, "redwood_tree_seeds": 150000, "bone_tree_seeds": 200000, "lava_tree_seeds": 264000, "strange_tree_seeds": 425145, "dragon_fruit_tree_seeds": 400000 } const BONEMEAL_SEED_MAP = { "red_mushroom_seeds": 0, "dotted_green_leaf_seeds": 0, "stardust_seeds": 0, "green_leaf_seeds": 0, "lime_leaf_seeds": 1, "gold_leaf_seeds": 5, "crystal_leaf_seeds": 25, "tree_seeds": 10, "oak_tree_seeds": 25, "willow_tree_seeds": 50, "apple_tree_seeds": 50, "maple_tree_seeds": 120, "banana_tree_seeds": 70, "stardust_tree_seeds": 150, "orange_tree_seeds": 120, "pine_tree_seeds": 180, "palm_tree_seeds": 200, "redwood_tree_seeds": 300, "bone_tree_seeds": 0, "lava_tree_seeds": 300, "strange_tree_seeds": 500, "dragon_fruit_tree_seeds": 500 } let potionArray = Object.keys(POTION_XP_MAP).toString().split(','); const calculatorSettings = { mining: { targetLevel: 0, tool: 'none', orb: false, hide: false, outfit: { gloves: false, shirt: false, pants: false, boots: false, bonus: 0, }, fullOutfit: false, }, crafting: { targetLevel: 0, tool: 'none', orb: false, hide: false, perk: false, outfit: { gloves: false, shirt: false, pants: false, boots: false, bonus: 0, }, fullOutfit: false, }, brewing: { targetLevel: 0, hide: false, outfit: { gloves: false, shirt: false, pants: false, boots: false, bonus: 0, }, fullOutfit: false }, farming: { targetLevel: 0, hide: false, outfit: { gloves: false, shirt: false, pants: false, boots: false, bonus: 0, }, fullOutfit: false, }, shared: { donor: false, } } class XpCalculatorPlugin extends IdlePixelPlusPlugin { constructor() { super("xpcalculator", { // unique plugin id, "sample" about: { // optional, but highly recommended name: GM_info.script.name + " (ver: " + GM_info.script.version + ")", version: GM_info.script.version, author: GM_info.script.author, description: GM_info.script.description } }); } onLogin(){ // CRAFTING HTML let html = $('#oil-summary-crafting').children().length ? '#oil-summary-crafting' : '#panel-crafting .progress-bar'; $(html).after( `<hr> <div style="display: flex; flex-direction: column;"> <h5>XP Calculator:<button id="crafting-visibility-button">Hide</button></h5> <div id="crafting-calculator-div"> <div> <label>Target Level:</label><input id="crafting-target-level" style="width:70px" type="number"> <span >Required XP: <span id="crafting-xp-required"></span></span> <span>Required SD: <span id="crafting-sd-required"></span></span> <span>Required bars: <span id="crafting-bars-required"> <span><img style="height: 32px; width: 32px;" src="https://d1xsc8x7nc5q8t.cloudfront.net/images/bronze_bar.png"> <span id="crafting-calculator-bronze"> 0</span> </span> <span><img style="height: 32px; width: 32px;" src="https://d1xsc8x7nc5q8t.cloudfront.net/images/iron_bar.png"> <span id="crafting-calculator-iron"> 0</span> </span> <span><img style="height: 32px; width: 32px;" src="https://d1xsc8x7nc5q8t.cloudfront.net/images/silver_bar.png"> <span id="crafting-calculator-silver"> 0</span> </span> <span><img style="height: 32px; width: 32px;" src="https://d1xsc8x7nc5q8t.cloudfront.net/images/gold_bar.png"> <span id="crafting-calculator-gold"> 0</span> </span> <span><img style="height: 32px; width: 32px;" src="https://d1xsc8x7nc5q8t.cloudfront.net/images/promethium_bar.png"> <span id="crafting-calculator-promethium"> 0</span> </span> <span><img style="height: 32px; width: 32px;" src="https://d1xsc8x7nc5q8t.cloudfront.net/images/titanium_bar.png"> <span id="crafting-calculator-titanium"> 0</span> </span> <span><img style="height: 32px; width: 32px;" src="https://d1xsc8x7nc5q8t.cloudfront.net/images/ancient_bar.png"> <span id="crafting-calculator-ancient"> 0</span> </span> <span><img style="height: 32px; width: 32px;" src="https://d1xsc8x7nc5q8t.cloudfront.net/images/dragon_bar.png"> <span id="crafting-calculator-dragon"> 0</span> </span> </span> </span> </div> <div id="crafting-xp-options" style=" margin-top: 15px; "> <form id="crafting-calculator-form"> <span>Tool gem: </span><label for="none" style="margin-right: 5px;">None</label><input type="radio" id="none" value="none" name="tool"> <label for="sapphire" style="margin-right: 5px;">Sapphire</label><input type="radio" id="sapphire" value="sapphire" name="tool"> <label for="emerald" style="margin-right: 5px;">Emerald</label><input type="radio" id="emerald" value="emerald" name="tool"> <label for="ruby" style="margin-right: 5px;">Ruby</label><input type="radio" id="ruby" value="ruby" name="tool"> <label for="diamond" style="margin-right: 5px;">Diamond</label><input type="radio" id="diamond" value="diamond" name="tool"> </form> <span>Donor perk: </span> <input id="crafting-donor-perk-check" type="checkbox" style="margin-right: 10px;"> <span>Blue orb: </span> <input id="crafting-blue-orb-check" type="checkbox" style="margin-right: 10px;"> <span>Medium perk: </span> <input id="crafting-medium-achievement-check" type="checkbox" style="margin-right: 10px;"> <span>Outfit bonus: </span> <input id="crafting-outfit-check" type="checkbox" style="margin-right: 10px;"> </div> </div> </div> `) document.querySelector('#crafting-visibility-button').onclick = ()=>{this.handleVisibility('crafting')}; document.querySelector('#crafting-target-level').onchange = (event)=>{this.calculatorSettingsChanged('crafting', 'targetLevel', event.target.value)}; document.querySelector('#crafting-calculator-form').onchange = (event)=>{this.calculatorSettingsChanged('crafting', 'tool', event.target.value)}; document.querySelector('#crafting-blue-orb-check').onchange = (event)=>{this.calculatorSettingsChanged('crafting', 'orb', event.target.checked)}; document.querySelector('#crafting-medium-achievement-check').onchange = (event)=>{this.calculatorSettingsChanged('crafting', 'perk', event.target.checked)}; document.querySelector('#crafting-donor-perk-check').onchange = (event)=>{this.calculatorSettingsChanged('shared', 'donor', event.target.checked)}; document.querySelector('#crafting-outfit-check').onchange = (event)=>{this.calculatorSettingsChanged('crafting', 'fullOutfit', event.target.checked)}; // // // MINING HTML html = $('#oil-summary-mining').children().length ? '#oil-summary-mining' : '#panel-mining .progress-bar'; $(html).after( `<hr> <div style="display: flex; flex-direction: column;"> <h5>XP Calculator:<button id="mining-visibility-button">Hide</button></h5> <div id="mining-calculator-div"> <div> <label>Target Level:</label><input id="mining-target-level" style="width:70px" type="number"> <span >Required XP: <span id="mining-xp-required"></span></span> <span>Required SD: <span id="mining-sd-required"></span></span> <span>Required ores: <span id="mining-ores-required"> <span><img style="height: 32px; width: 32px;" src="https://d1xsc8x7nc5q8t.cloudfront.net/images/stone.png"> <span id="mining-calculator-stone"> 0</span> </span> <span><img style="height: 32px; width: 32px;" src="https://d1xsc8x7nc5q8t.cloudfront.net/images/copper.png"> <span id="mining-calculator-copper"> 0</span> </span> <span><img style="height: 32px; width: 32px;" src="https://d1xsc8x7nc5q8t.cloudfront.net/images/iron.png"> <span id="mining-calculator-iron"> 0</span> </span> <span><img style="height: 32px; width: 32px;" src="https://d1xsc8x7nc5q8t.cloudfront.net/images/silver.png"> <span id="mining-calculator-silver"> 0</span> </span> <span><img style="height: 32px; width: 32px;" src="https://d1xsc8x7nc5q8t.cloudfront.net/images/gold.png"> <span id="mining-calculator-gold"> 0</span> </span> <span><img style="height: 32px; width: 32px;" src="https://d1xsc8x7nc5q8t.cloudfront.net/images/promethium.png"> <span id="mining-calculator-promethium"> 0</span> </span> <span><img style="height: 32px; width: 32px;" src="https://d1xsc8x7nc5q8t.cloudfront.net/images/titanium.png"> <span id="mining-calculator-titanium"> 0</span> </span> <span><img style="height: 32px; width: 32px;" src="https://d1xsc8x7nc5q8t.cloudfront.net/images/ancient_ore.png"> <span id="mining-calculator-ancient"> 0</span> </span> <span><img style="height: 32px; width: 32px;" src="https://d1xsc8x7nc5q8t.cloudfront.net/images/dragon_ore.png"> <span id="mining-calculator-dragon"> 0</span> </span> </span> </span> </div> <div id="mining-xp-options" style=" margin-top: 15px; "> <form id="mining-calculator-form"> <span>Tool gem: </span><label for="none" style="margin-right: 5px;">None</label><input type="radio" id="none" value="none" name="tool"> <label for="sapphire" style="margin-right: 5px;">Sapphire</label><input type="radio" id="sapphire" value="sapphire" name="tool"> <label for="emerald" style="margin-right: 5px;">Emerald</label><input type="radio" id="emerald" value="emerald" name="tool"> <label for="ruby" style="margin-right: 5px;">Ruby</label><input type="radio" id="ruby" value="ruby" name="tool"> <label for="diamond" style="margin-right: 5px;">Diamond</label><input type="radio" id="diamond" value="diamond" name="tool"> </form> <span>Donor perk: </span> <input id="mining-donor-perk-check" type="checkbox" style="margin-right: 10px;"> <span>Blue orb: </span> <input id="mining-blue-orb-check" type="checkbox" style="margin-right: 10px;"> <span>Outfit bonus: </span> <input id="mining-outfit-check" type="checkbox" style="margin-right: 10px;"> </div> </div> </div> `) document.querySelector('#mining-visibility-button').onclick = ()=>{this.handleVisibility('mining')}; document.querySelector('#mining-target-level').onchange = (event)=>{this.calculatorSettingsChanged('mining', 'targetLevel', event.target.value)}; document.querySelector('#mining-calculator-form').onchange = (event)=>{this.calculatorSettingsChanged('mining', 'tool', event.target.value)}; document.querySelector('#mining-blue-orb-check').onchange = (event)=>{this.calculatorSettingsChanged('mining', 'orb', event.target.checked)}; document.querySelector('#mining-donor-perk-check').onchange = (event)=>{this.calculatorSettingsChanged('shared', 'donor', event.target.checked)}; document.querySelector('#mining-outfit-check').onchange = (event)=>{this.calculatorSettingsChanged('mining', 'fullOutfit', event.target.checked)}; //////////////////////////////////////////////////////////////////// //Array.from(document.querySelectorAll('#brewing-table img[src*="potion"]')).forEach((potion)=>potionArray.push(potion.title)) $("#panel-brewing .progress-bar").first().after(` <hr> <div style="display: flex; flex-direction: column;"> <h5>XP Calculator:<button id="brewing-visibility-button">Hide</button></h5> <div id="brewing-calculator-div"> <div> <label>Target Level:</label><input id="brewing-target-level" style="width:70px" type="number"> <span >Required XP: <span id="brewing-xp-required"></span></span> <div style="margin-top: 10px;">Required potions: <span id="brewing-potions-required"> </span> </div> </div> <div id="brewing-xp-options" style=" margin-top: 15px; "> <span>Donor perk: </span> <input id="brewing-donor-perk-check" type="checkbox" style="margin-right: 10px;"> <span>Outfit bonus: </span> <span id="brewing-outfit-bonus" style="margin-right: 10px;">0</span> </div> </div> </div>`) let potionHTML = ''; potionArray.forEach((potion)=>{ if(potion != "infinite_oil_potion") { potionHTML += `<span><img style="height: 32px; width: 32px;" src="https://d1xsc8x7nc5q8t.cloudfront.net/images/${potion}.png"> <span id="brewing-calculator-${potion}"> 0</span> </span>` } }) document.querySelector('#brewing-potions-required').innerHTML = potionHTML; document.querySelector('#brewing-visibility-button').onclick = ()=>{this.handleVisibility('brewing')}; document.querySelector('#brewing-target-level').onchange = (event)=>{this.calculatorSettingsChanged('brewing', 'targetLevel', event.target.value)}; document.querySelector('#brewing-donor-perk-check').onchange = (event)=>{this.calculatorSettingsChanged('shared', 'donor', event.target.checked)}; ////////////////////////////////////////////////////////////////////// //Array.from(document.querySelectorAll("#farming-table img[src*=farming]")).forEach((seeds)=>seedsArray.push(seeds.title)) $("#panel-farming .progress-bar").first().after(` <hr> <div style="display: flex; flex-direction: column;"> <h5>XP Calculator:<button id="farming-visibility-button">Hide</button></h5> <div id="farming-calculator-div"> <div> <label>Target Level:</label><input id="farming-target-level" style="width:70px" type="number"> <span >Required XP: <span id="farming-xp-required"></span></span> <div style="margin-top: 10px;">Required Seeds (Bonemeal): <span id="farming-seeds-required"> </span> </div> </div> <div id="farming-xp-options" style=" margin-top: 15px; "> <span>Donor perk: </span> <input id="farming-donor-perk-check" type="checkbox" style="margin-right: 10px;"> <span>Outfit bonus: </span> <span id="farming-outfit-bonus" style="margin-right: 10px;">0</span> </div> </div> </div>`) let farmingHTML = ''; let seeds = Object.keys(SEEDS_XP_MAP); seeds.forEach((seeds)=>{ farmingHTML += `<span><img style="height: 32px; width: 32px;" src="https://d1xsc8x7nc5q8t.cloudfront.net/images/${seeds}.png"> <span id="farming-calculator-${seeds}"> 0</span> </span>` }) document.querySelector('#farming-seeds-required').innerHTML = farmingHTML; document.querySelector('#farming-visibility-button').onclick = ()=>{this.handleVisibility('farming')}; document.querySelector('#farming-target-level').onchange = (event)=>{this.calculatorSettingsChanged('farming', 'targetLevel', event.target.value)}; document.querySelector('#farming-donor-perk-check').onchange = (event)=>{this.calculatorSettingsChanged('shared', 'donor', event.target.checked)}; //////////////////////////////////////////////////////////////////// calculatorSettings.crafting.targetLevel = get_level(IdlePixelPlus.getVarOrDefault('crafting_xp', 0, 'int'))+1; document.querySelector('#crafting-target-level').value = calculatorSettings.crafting.targetLevel; calculatorSettings.mining.targetLevel = get_level(IdlePixelPlus.getVarOrDefault('mining_xp', 0, 'int'))+1; document.querySelector('#mining-target-level').value = calculatorSettings.mining.targetLevel; calculatorSettings.brewing.targetLevel = get_level(IdlePixelPlus.getVarOrDefault('brewing_xp', 0, 'int'))+1; document.querySelector('#brewing-target-level').value = calculatorSettings.brewing.targetLevel; calculatorSettings.farming.targetLevel = get_level(IdlePixelPlus.getVarOrDefault('farming_xp', 0, 'int'))+1; document.querySelector('#farming-target-level').value = calculatorSettings.farming.targetLevel; if (IdlePixelPlus.getVarOrDefault('diamond_hammer', 0, 'int')) calculatorSettings.crafting.tool = 'diamond' else if (IdlePixelPlus.getVarOrDefault('ruby_hammer', 0, 'int')) calculatorSettings.crafting.tool = 'ruby' else if (IdlePixelPlus.getVarOrDefault('emerald_hammer', 0, 'int')) calculatorSettings.crafting.tool = 'emerald' else if (IdlePixelPlus.getVarOrDefault('sapphire_hammer', 0, 'int')) calculatorSettings.crafting.tool = 'sapphire' else calculatorSettings.crafting.tool = 'none' if (IdlePixelPlus.getVarOrDefault('diamond_pickaxe', 0, 'int')) calculatorSettings.mining.tool = 'diamond' else if (IdlePixelPlus.getVarOrDefault('ruby_pickaxe', 0, 'int')) calculatorSettings.mining.tool = 'ruby' else if (IdlePixelPlus.getVarOrDefault('emerald_pickaxe', 0, 'int')) calculatorSettings.mining.tool = 'emerald' else if (IdlePixelPlus.getVarOrDefault('sapphire_pickaxe', 0, 'int')) calculatorSettings.mining.tool = 'sapphire' else calculatorSettings.mining.tool = 'none' if (IdlePixelPlus.getVarOrDefault('blue_hammer_orb_absorbed', 0, 'int')) calculatorSettings.crafting.orb = true; if (IdlePixelPlus.getVarOrDefault('blue_pickaxe_orb_absorbed', 0, 'int')) calculatorSettings.mining.orb = true; let donorTimestamp = IdlePixelPlus.getVarOrDefault('donor_bonus_xp_timestamp', 0, 'int'); let hasDonorXpPerk = DonorShop.has_donor_active(donorTimestamp); calculatorSettings.shared.donor = hasDonorXpPerk; Array.from(document.querySelector('#crafting-calculator-form').children).find(elem=>elem.id == calculatorSettings.crafting.tool).checked = true; Array.from(document.querySelector('#mining-calculator-form').children).find(elem=>elem.id == calculatorSettings.mining.tool).checked = true; document.querySelector('#mining-donor-perk-check').checked = calculatorSettings.shared.donor; document.querySelector('#crafting-donor-perk-check').checked = calculatorSettings.shared.donor; document.querySelector('#brewing-donor-perk-check').checked = calculatorSettings.shared.donor; document.querySelector('#farming-donor-perk-check').checked = calculatorSettings.shared.donor; if(IdlePixelPlus.getVarOrDefault('ach_medium_oil_capacity_1600', 0, 'int') && IdlePixelPlus.getVarOrDefault('ach_medium_smelt_promethium_bar', 0, 'int') && IdlePixelPlus.getVarOrDefault('ach_medium_convert_500_gold_bars', 0, 'int') && IdlePixelPlus.getVarOrDefault('ach_medium_use_charcoal_foundry', 0, 'int') && IdlePixelPlus.getVarOrDefault('ach_medium_craft_10_iron_buckets', 0, 'int') && IdlePixelPlus.getVarOrDefault('ach_medium_crush_50_bones_into_ashes', 0, 'int')) calculatorSettings.crafting.perk = true; document.querySelector('#crafting-medium-achievement-check').checked = calculatorSettings.crafting.perk; this.checkForSkillingOutfits(); document.querySelector('#mining-outfit-check').checked = calculatorSettings.mining.fullOutfit; document.querySelector('#crafting-outfit-check').checked = calculatorSettings.crafting.fullOutfit; //document.querySelector('#farming-outfit-check').checked = calculatorSettings.farming.fullOutfit; this.calculateCraftingXP(); this.calculateMiningXP(); this.calculateBrewingXP(); this.calculateFarmingXP(); this.handleVisibility('mining'); this.handleVisibility('crafting'); this.handleVisibility('brewing'); this.handleVisibility('farming'); loaded = true; } calculatorSettingsChanged(skill, type, value){ if (skill == 'crafting'){ calculatorSettings.crafting[type] = value; this.calculateCraftingXP(); } if (skill == 'mining'){ calculatorSettings.mining[type] = value; this.calculateMiningXP(); } if (skill == 'brewing'){ calculatorSettings.brewing[type] = value; this.calculateBrewingXP(); } if (skill == 'farming'){ calculatorSettings.farming[type] = value; this.calculateFarmingXP(); } if (skill = 'shared'){ calculatorSettings.shared[type] = value; this.calculateCraftingXP(); this.calculateMiningXP(); this.calculateBrewingXP(); this.calculateFarmingXP(); } } calculateCraftingXP(){ let currentXp = IdlePixelPlus.getVarOrDefault('crafting_xp', 0, 'int'); let requiredXp = get_xp_required(calculatorSettings.crafting.targetLevel); let hasDonorPerk = calculatorSettings.shared.donor ? 1.1 : 1; //let bonusXp = parseFloat((hasDonorPerk + calculatorSettings.crafting.outfit.bonus / 100).toFixed(2)); let bonusXp = hasDonorPerk; let deltaXp = requiredXp + 1 - currentXp let toolGem = this.getSdByGem(calculatorSettings.crafting.tool) let hasAchPerk = calculatorSettings.crafting.perk ? 1 : 0; let hasBlueorb = calculatorSettings.crafting.orb ? 2 : 0; let hasFullOutfit = calculatorSettings.crafting.fullOutfit ? 1 : 0; let requiredSd = deltaXp * (toolGem - hasAchPerk - hasBlueorb - hasFullOutfit); document.querySelector('#crafting-xp-required').textContent = window.format_number(deltaXp); document.querySelector('#crafting-sd-required').textContent = window.format_number(requiredSd); let bars = Object.keys(BARS_XP_MAP); bars.forEach(bar=>{ document.querySelector(`#crafting-calculator-${bar}`).textContent = window.format_number(Math.ceil(deltaXp / ((BARS_XP_MAP[bar] * bonusXp )))); }) } calculateMiningXP(){ let currentXp = IdlePixelPlus.getVarOrDefault('mining_xp', 0, 'int'); let requiredXp = get_xp_required(calculatorSettings.mining.targetLevel); let hasDonorPerk = calculatorSettings.shared.donor ? 1.1 : 1; //let bonusXp = parseFloat((hasDonorPerk + calculatorSettings.mining.outfit.bonus / 100).toFixed(2)); let bonusXp = hasDonorPerk; let deltaXp = requiredXp + 1 - currentXp let toolGem = this.getSdByGem(calculatorSettings.mining.tool) let hasBlueOrb = calculatorSettings.mining.orb ? 2 : 0; let hasFullOutfit = calculatorSettings.mining.fullOutfit ? 1 : 0; let requiredSd = deltaXp * (toolGem - hasBlueOrb - hasFullOutfit); document.querySelector('#mining-xp-required').textContent = window.format_number(deltaXp); document.querySelector('#mining-sd-required').textContent = window.format_number(requiredSd); let ores = Object.keys(ORES_XP_MAP); ores.forEach(ore=>{ document.querySelector(`#mining-calculator-${ore}`).textContent = window.format_number(Math.ceil(deltaXp / ((ORES_XP_MAP[ore] * bonusXp )))); }) } calculateFarmingXP(){ let currentXp = IdlePixelPlus.getVarOrDefault('farming_xp', 0, 'int'); let requiredXp = get_xp_required(calculatorSettings.farming.targetLevel); let hasDonorPerk = calculatorSettings.shared.donor ? 1.1 : 1; let bonusXp = hasDonorPerk + calculatorSettings.farming.outfit.bonus; let deltaXp = requiredXp + 1 - currentXp let hasDonorPatches = IdlePixelPlus.getVarOrDefault('donor_farm_patches_timestamp', 0, 'int'); let farm_1_XP = 0; let farm_2_XP = 0; let farm_3_XP = 0; let farm_4_XP = 0; let farm_5_XP = 0; let farm_Total_XP = 0; //farm_1_XP = SEEDS_XP_MAP[IdlePixelPlus.getVarOrDefault('farm_1')]; //farm_2_XP = SEEDS_XP_MAP[IdlePixelPlus.getVarOrDefault('farm_2')]; //farm_3_XP = SEEDS_XP_MAP[IdlePixelPlus.getVarOrDefault('farm_3')]; if(SEEDS_XP_MAP[IdlePixelPlus.getVarOrDefault('farm_1')]) { farm_1_XP = SEEDS_XP_MAP[IdlePixelPlus.getVarOrDefault('farm_1')]; } else { farm_1_XP = 0; } if(SEEDS_XP_MAP[IdlePixelPlus.getVarOrDefault('farm_2')]) { farm_2_XP = SEEDS_XP_MAP[IdlePixelPlus.getVarOrDefault('farm_2')]; } else { farm_2_XP = 0; } if(SEEDS_XP_MAP[IdlePixelPlus.getVarOrDefault('farm_3')]) { farm_3_XP = SEEDS_XP_MAP[IdlePixelPlus.getVarOrDefault('farm_3')]; } else { farm_3_XP = 0; } if(hasDonorPatches > 0) { if(SEEDS_XP_MAP[IdlePixelPlus.getVarOrDefault('farm_4')]) { farm_4_XP = SEEDS_XP_MAP[IdlePixelPlus.getVarOrDefault('farm_4')]; } else { farm_4_XP = 0; } if(SEEDS_XP_MAP[IdlePixelPlus.getVarOrDefault('farm_5')]) { farm_5_XP = SEEDS_XP_MAP[IdlePixelPlus.getVarOrDefault('farm_5')]; } else { farm_5_XP = 0; } }; farm_Total_XP = (farm_1_XP + farm_2_XP + farm_3_XP + farm_4_XP + farm_5_XP) * bonusXp; if(deltaXp < 0) { deltaXp = 0 } let bonemeal = IdlePixelPlus.getVarOrDefault('bonemeal', 0, 'int'); document.querySelector('#farming-xp-required').textContent = window.format_number(deltaXp); let seeds = Object.keys(SEEDS_XP_MAP); let bones = Object.keys(BONEMEAL_SEED_MAP); seeds.forEach(seeds=>{ let bonemealReq = (Math.ceil((deltaXp - farm_Total_XP) / ((SEEDS_XP_MAP[seeds] * bonusXp))) * BONEMEAL_SEED_MAP[seeds]) - bonemeal; if(bonemealReq < 0) { bonemealReq = 0; } document.querySelector(`#farming-calculator-${seeds}`).textContent = window.format_number(Math.ceil((deltaXp - farm_Total_XP) / ((SEEDS_XP_MAP[seeds] * bonusXp)))) + ` (${bonemealReq})`; }) } calculateBrewingXP(){ let currentXp = IdlePixelPlus.getVarOrDefault('brewing_xp', 0, 'int'); let requiredXp = get_xp_required(calculatorSettings.brewing.targetLevel); let hasDonorPerk = calculatorSettings.shared.donor ? 1.1 : 1; let bonusXp = hasDonorPerk + calculatorSettings.brewing.outfit.bonus; let deltaXp = requiredXp + 1 - currentXp document.querySelector('#brewing-xp-required').textContent = window.format_number(deltaXp); let potions = Object.keys(POTION_XP_MAP); potionArray.forEach(potion=>{ if(potion != "infinite_oil_potion") { let ingredients = Brewing.get_ingredients(potion); let xpPerPotion = 0; let maxCraftable = Number.MAX_SAFE_INTEGER; for (let i=0;i<ingredients.length;i+=2){ xpPerPotion += Math.floor((INGREDIENT_XP_MAP[ingredients[i]] * bonusXp) * parseInt(ingredients[i+1])); let craftable = Math.floor(IdlePixelPlus.getVarOrDefault(ingredients[i], 0, 'int') / parseInt(ingredients[i+1])); craftable < maxCraftable ? maxCraftable = craftable : null; } document.querySelector(`#brewing-calculator-${potion}`).textContent = window.format_number(Math.ceil(deltaXp / xpPerPotion)) + ` (${maxCraftable})`; } }) } getSdByGem(gem){ let sd = {none: 13, sapphire: 12, emerald: 11, ruby: 10, diamond: 9} return sd[gem] } handleVisibility(key){ calculatorSettings[key].hide = !calculatorSettings[key].hide; if (calculatorSettings[key].hide) document.querySelector(`#${key}-calculator-div`).style.display = 'none' else document.querySelector(`#${key}-calculator-div`).style.display = 'block' calculatorSettings[key].hide ? document.querySelector(`#${key}-visibility-button`).textContent = 'Show' : document.querySelector(`#${key}-visibility-button`).textContent = 'Hide'; } onVariableSet(key, valueBefore, valueAfter) { if (!loaded) return; switch (key){ case 'crafting_xp': calculatorSettings.crafting.targetLevel = get_level(IdlePixelPlus.getVarOrDefault('crafting_xp', 0, 'int'))+1; document.querySelector('#crafting-target-level').value = calculatorSettings.crafting.targetLevel; this.calculateCraftingXP(); break; case 'mining_xp': calculatorSettings.mining.targetLevel = get_level(IdlePixelPlus.getVarOrDefault('mining_xp', 0, 'int'))+1; document.querySelector('#mining-target-level').value = calculatorSettings.mining.targetLevel; this.calculateMiningXP(); break; case 'brewing_xp': calculatorSettings.brewing.targetLevel = get_level(IdlePixelPlus.getVarOrDefault('brewing_xp', 0, 'int'))+1; document.querySelector('#brewing-target-level').value = calculatorSettings.brewing.targetLevel; this.calculateBrewingXP(); break; case 'farming_xp': calculatorSettings.farming.targetLevel = get_level(IdlePixelPlus.getVarOrDefault('farming_xp', 0, 'int'))+1; document.querySelector('#farming-target-level').value = calculatorSettings.farming.targetLevel; this.calculateFarmingXP(); break; default: break; } if (key.includes('skilling')) this.checkForSkillingOutfits(); } checkForSkillingOutfits(){ ['gloves', 'boots', 'pants', 'shirt'].forEach(item=>{ ['crafting', 'mining', 'brewing', 'farming'].forEach(skill=>{ let hasItem = IdlePixelPlus.getVarOrDefault(`${skill}_skilling_${item}`, 0, 'int') if (hasItem && !calculatorSettings[skill].outfit[item]){ calculatorSettings[skill].outfit[item] = true; calculatorSettings[skill].outfit.bonus += 0.01; if (calculatorSettings[skill].outfit.gloves && calculatorSettings[skill].outfit.shirt && calculatorSettings[skill].outfit.pants && calculatorSettings[skill].outfit.boots){ calculatorSettings[skill].fullOutfit = true; calculatorSettings[skill].outfit.bonus = 0.05; } this.updateOutfitBonus(); } }) }) } updateOutfitBonus(){ //document.querySelector('#brewing-outfit-bonus').textContent = calculatorSettings.brewing.fullOutfit ? '5%' : calculatorSettings.brewing.outfit.bonus + '%'; document.querySelector('#brewing-outfit-bonus').textContent = `${calculatorSettings.brewing.outfit.bonus * 100}%` document.querySelector('#farming-outfit-bonus').textContent = `${calculatorSettings.farming.outfit.bonus * 100}%` this.calculateCraftingXP(); this.calculateMiningXP(); this.calculateBrewingXP(); this.calculateFarmingXP(); } } const plugin = new XpCalculatorPlugin(); IdlePixelPlus.registerPlugin(plugin); // register the plugin })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址