ეს სკრიპტი არ უნდა იყოს პირდაპირ დაინსტალირებული. ეს ბიბლიოთეკაა, სხვა სკრიპტებისთვის უნდა ჩართეთ მეტა-დირექტივაში // @require https://update.greasyfork.org/scripts/483506/1304198/IdlePixel%20SlapChop%20-%20MiningCrafting%20Tabs.js
.
// ==UserScript==
// @name IdlePixel SlapChop - Mining/Crafting Tabs
// @namespace godofnades.idlepixel
// @version 0.2.1
// @description Split off of IdlePixel Slapchop for all Mining and Crafting Code.
// @author GodofNades
// @license MIT
// @match *://idle-pixel.com/login/play/
// @grant none
// ==/UserScript==
(function () {
"use strict";
const IMAGE_URL_BASE = document
.querySelector("itembox[data-item=copper] img")
.src.replace(/\/[^/]+.png$/, "");
const SMELTABLES = [
"copper",
"iron",
"silver",
"gold",
"promethium",
"titanium",
"ancient_ore",
"dragon_ore",
];
const MINING = [
"small_stardust_prism",
"medium_stardust_prism",
"large_stardust_prism",
"huge_stardust_prism",
"grey_geode",
"blue_geode",
"green_geode",
"red_geode",
"cyan_geode",
"ancient_geode",
"meteor",
];
const MINERAL = [
"amber_mineral",
"amethyst_mineral",
"blood_crystal_mineral",
"blue_marble_mineral",
"clear_marble_mineral",
"dense_marble_mineral",
"fluorite_mineral",
"frozen_mineral",
"jade_mineral",
"lime_quartz_mineral",
"magnesium_mineral",
"opal_mineral",
"purple_quartz_mineral",
"sea_crystal_mineral",
"smooth_pearl_mineral",
"sulfer_mineral",
"tanzanite_mineral",
"topaz_mineral",
];
const miningEquipment = [
"drill",
"crusher",
"giant_drill",
"excavator",
"giant_excavator",
"massive_excavator",
];
const IPP = IdlePixelPlus;
const getVar = IdlePixelPlus.getVarOrDefault;
var smelteryToggle = true;
function maxSmeltable(ore) {
const oilPerOre = Crafting.getOilPerBar(ore);
const charcoalPerOre = Crafting.getCharcoalPerBar(ore);
const lavaPerOre = Crafting.getLavaPerBar(ore);
const plasmaPerOre = Crafting.getPlasmaPerBar(ore);
const oil = IdlePixelPlus.getVarOrDefault("oil", 0, "int");
const capacity = Furnace.getFurnaceCapacity();
const oreCount = IdlePixelPlus.getVarOrDefault(ore, 0, "int");
const maxSmeltFromOil = Math.floor(oil / oilPerOre);
const dragonFire = IdlePixelPlus.getVarOrDefault("dragon_fire", 0, "int");
let maxSmeltCount = Math.min(capacity, oreCount, maxSmeltFromOil);
if (charcoalPerOre > 0) {
const charcoal = IdlePixelPlus.getVarOrDefault("charcoal", 0, "int");
const maxSmeltFromCharcoal = Math.floor(charcoal / charcoalPerOre);
maxSmeltCount = Math.min(maxSmeltCount, maxSmeltFromCharcoal);
}
if (lavaPerOre > 0) {
const lava = IdlePixelPlus.getVarOrDefault("lava", 0, "int");
const maxSmeltFromLava = Math.floor(lava / lavaPerOre);
maxSmeltCount = Math.min(maxSmeltCount, maxSmeltFromLava);
}
if (plasmaPerOre > 0) {
const plasma = IdlePixelPlus.getVarOrDefault("plasma", 0, "int");
const maxSmeltFromPlasma = Math.floor(plasma / plasmaPerOre);
maxSmeltCount = Math.min(maxSmeltCount, maxSmeltFromPlasma);
}
if (ore == "dragon_ore") {
maxSmeltCount = Math.min(maxSmeltCount, dragonFire);
}
if (ore == "copper") {
maxSmeltCount = Math.min(capacity, oreCount);
}
return maxSmeltCount || 0;
}
function initQuickSmelt() {
let htmlMining = `
<div id="slapchop-quicksmelt-mining" class="slapchop-quicksmelt">
<h5>Quick Smelt:</h5>
<div class="slapchop-quicksmelt-buttons">
`;
SMELTABLES.forEach((ore) => {
htmlMining += `
<button type="button" onclick="window.quickSmelt('${ore}')">
<img src="${IMAGE_URL_BASE}/${ore}.png" class="img-20" />
${ore
.replace(/_/g, " ")
.replace(/(^|\s)\w/g, (s) => s.toUpperCase())}
(<span data-slap="max-smelt-${ore}">?</span>)
</button>
`;
});
htmlMining += `
</div>
<hr>
</div>
`;
$("#panel-mining hr").first().after(htmlMining);
let htmlCrafting = `
<div id="slapchop-quicksmelt-crafting" class="slapchop-quicksmelt">
<h5>Quick Smelt:</h5>
<div class="slapchop-quicksmelt-buttons">
`;
SMELTABLES.forEach((ore) => {
htmlCrafting += `
<button type="button" onclick="window.quickSmelt('${ore}')">
<img src="${IMAGE_URL_BASE}/${ore}.png" class="img-20" />
${ore
.replace(/_/g, " ")
.replace(/(^|\s)\w/g, (s) => s.toUpperCase())}
(<span data-slap="max-smelt-${ore}">?</span>)
</button>
`;
});
htmlCrafting += `
</div>
<hr>
</div>
`;
$("#panel-crafting hr").first().after(htmlCrafting);
SMELTABLES.forEach((ore) => {
$(`itembox[data-item="${ore}"]`).on("contextmenu", (event) => {
if (
IdlePixelPlus.plugins.slapchop.getConfig(
"quickSmeltRightClickEnabled"
)
) {
const primary = window.isPrimaryActionSlapchop(event);
const alt = window.isAltActionSlapchop(event);
if (primary || alt) {
window.quickSmelt(item, !primary);
event.stopPropagation();
event.preventDefault();
return false;
}
}
return true;
});
});
}
function quickSmelt(ore) {
if (smelteryToggle) {
smelteryToggle = false;
const current = IdlePixelPlus.getVarOrDefault("furnace_ore_type", "none");
if (current == "none") {
const max = window.maxSmeltable(ore);
if (max > 0) {
IdlePixelPlus.sendMessage(`SMELT=${ore}~${max}`);
}
}
setTimeout(function () {
smelteryToggle = true;
}, 1000);
}
}
function maxCraftable() {
const oilPerFuel = 5000;
const charcoalPerFuel = 20;
const lavaPerFuel = 1;
const oil = IdlePixelPlus.getVarOrDefault("oil", 0, "int");
const maxFuelFromOil = Math.floor(oil / oilPerFuel);
let maxFuelCount = Math.min(maxFuelFromOil);
if (charcoalPerFuel > 0) {
const charcoal = IdlePixelPlus.getVarOrDefault("charcoal", 0, "int");
const maxCraftFromCharcoal = Math.floor(charcoal / charcoalPerFuel);
maxFuelCount = Math.min(maxFuelCount, maxCraftFromCharcoal);
}
if (lavaPerFuel > 0) {
const lava = IdlePixelPlus.getVarOrDefault("lava", 0, "int");
const maxCraftFromLava = Math.floor(lava / lavaPerFuel);
maxFuelCount = Math.min(maxFuelCount, maxCraftFromLava);
}
return maxFuelCount || 0;
}
function updateMaxCraftable() {
const max = window.maxCraftable();
const maxText = "Quick Craft Max (" + max + ")";
const oilMax = 5000 * max;
const oilText = "5,000 (" + oilMax.toLocaleString() + ") (oil)";
const coalMax = 20 * max;
const coalText = "20 (" + coalMax.toLocaleString() + ") (charcoal)";
const lavaMax = 1 * max;
const lavaText = "1 (" + lavaMax.toLocaleString() + ") (lava)";
const label = document.querySelector(
"#crafting-table tbody tr[data-crafting-item=rocket_fuel] td item-crafting-table[data-materials-item]"
).dataset.materialsItem;
const maxCraftableButton = document.querySelector(
"#crafting-table .slapchop-rocketfuelmax-button"
);
const oilTableCell = document.querySelector(
"#crafting-table tbody tr[data-crafting-item=rocket_fuel] td item-crafting-table[data-materials-item=oil]"
);
const coalTableCell = document.querySelector(
"#crafting-table tbody tr[data-crafting-item=rocket_fuel] td item-crafting-table[data-materials-item=charcoal]"
);
const lavaTableCell = document.querySelector(
"#crafting-table tbody tr[data-crafting-item=rocket_fuel] td item-crafting-table[data-materials-item=lava"
);
const singleCraftButton = document.querySelector(
"#crafting-table .slapchop-rocketfuelsingle-button"
);
if (maxCraftableButton) {
maxCraftableButton.textContent = maxText;
}
if (oilTableCell) {
oilTableCell.textContent = oilText;
}
if (coalTableCell) {
coalTableCell.textContent = coalText;
}
if (lavaTableCell) {
lavaTableCell.textContent = lavaText;
}
if (singleCraftButton) {
if (max === 0) {
singleCraftButton.style.display = "none";
} else {
singleCraftButton.style.display = "block";
}
}
}
function updateQuickSmelt() {
SMELTABLES.forEach((ore) => {
const max = window.maxSmeltable(ore);
const elements = document.querySelectorAll(
`[data-slap="max-smelt-${ore}"]`
);
elements.forEach((element) => {
element.textContent = max;
});
});
}
function initQuickMining() {
MINING.forEach((item) => {
$(`itembox[data-item="${item}"]`).on("contextmenu", (event) => {
if (
IdlePixelPlus.plugins.slapchop.getConfig(
"quickMiningRightClickEnabled"
)
) {
const primary = window.isPrimaryActionSlapchop(event);
const alt = window.isAltActionSlapchop(event);
if (primary || alt) {
window.quickMining(item, !primary);
event.stopPropagation();
event.preventDefault();
return false;
}
}
return true;
});
});
}
function quickMining(item, alt) {
let n = IdlePixelPlus.getVarOrDefault(item, 0, "int");
singleOverride =
IdlePixelPlus.plugins.slapchop.getConfig("autoSingleEnabled");
if (alt || singleOverride) {
console.log("Inside the minus: " + singleOverride);
n--;
}
if (n > 0) {
if (item.includes("_stardust_prism")) {
IdlePixelPlus.sendMessage(`SMASH_STARDUST_PRISM=${item}~${n}`);
} else if (item.includes("_geode")) {
IdlePixelPlus.sendMessage(`CRACK_GEODE=${item}~${n}`);
} else if (item == "meteor") {
websocket.send(`MINE_METEOR`);
}
}
}
function initQuickMineral() {
MINERAL.forEach((item) => {
$(`itembox[data-item="${item}"]`).on("contextmenu", (event) => {
if (
IdlePixelPlus.plugins.slapchop.getConfig(
"quickMineralRightClickEnabled"
)
) {
const primary = window.isPrimaryActionSlapchop(event);
const alt = window.isAltActionSlapchop(event);
if (primary || alt) {
window.quickMineral(item, !primary);
event.stopPropagation();
event.preventDefault();
return false;
}
}
return true;
});
});
}
function quickMineral(item, alt) {
let n = IdlePixelPlus.getVarOrDefault(item, 0, "int");
singleOverride =
IdlePixelPlus.plugins.slapchop.getConfig("autoSingleEnabled");
if (alt || singleOverride) {
n--;
}
if (n > 0) {
IdlePixelPlus.sendMessage(`MINERAL_XP=${item}~${n}`);
}
}
function initMiningPresets() {
let html = `
<div id="miningmachines-presets">
<h5>Mining Machine Presets:</h5>
<div id="slapchop-quickpreset">
<div class="slapchop-quickpreset-buttons">
<div>
<button onclick="window.noMachines()">None</button>
</div>
<div>
<button onclick="window.miningPresetSave(2)">Save 2</button>
<button onclick="window.miningPresetLoad(2)">Load 2</button>
</div>
<div>
<button onclick="window.miningPresetSave(3)">Save 3</button>
<button onclick="window.miningPresetLoad(3)">Load 3</button>
</div>
<div>
<button onclick="window.miningPresetSave(4)">Save 4</button>
<button onclick="window.miningPresetLoad(4)">Load 4</button>
</div>
<div>
<button onclick="window.allMachines()">All</button>
</div>
</div>
</div>
<hr>
</div>
`;
document
.querySelector("div.fresh-account-buy-pickaxe-text")
.insertAdjacentHTML("beforebegin", html);
}
function miningPresetSave(presetNumber) {
let presetData = {};
let presetName = `Preset ${presetNumber}`;
let username = getVar("username", "", "string");
miningEquipment.forEach(function (machine) {
let machineCount = `${machine}_on`;
let ippMachineOnCount = getVar(machineCount, 0, "int");
presetData[machine] = ippMachineOnCount;
});
let allPresets =
JSON.parse(localStorage.getItem(`${username}.miningPresets`)) || {};
allPresets[presetName] = presetData;
localStorage.setItem(
`${username}.miningPresets`,
JSON.stringify(allPresets)
);
}
function miningPresetLoad(presetNumber) {
miningEquipment.forEach(function (machine) {
let machineCount = `${machine}_on`;
let ippMachineOnCount = getVar(machineCount, 0, "int");
let ippMachineCrafted = IdlePixelPlus.getVarOrDefault(machine, 0, "int");
let i = ippMachineOnCount;
while (i > 0) {
i--;
websocket.send(`MACHINERY=${machine}~decrease`);
}
});
let username = getVar("username", "", "string");
let allPresets =
JSON.parse(localStorage.getItem(`${username}.miningPresets`)) || {};
let presetName = `Preset ${presetNumber}`;
let presetData = allPresets[presetName];
if (!presetData) {
return;
}
miningEquipment.forEach(function (machine) {
let machineCount = `${machine}_on`;
let ippMachineOnCount = getVar(machineCount, 0, "int");
let ippMachinePresetCount = presetData[machine] || 0;
let i = 0;
while (i < ippMachinePresetCount) {
i++;
websocket.send(`MACHINERY=${machine}~increase`);
}
});
}
function allMachines() {
miningEquipment.forEach(function (machine) {
let machineCount = `${machine}_on`;
let ippMachineOnCount = getVar(machineCount, 0, "int");
let ippMachineCrafted = getVar(machine, 0, "int");
let i = ippMachineOnCount;
while (i < ippMachineCrafted) {
i++;
websocket.send(`MACHINERY=${machine}~increase`);
}
});
}
function noMachines() {
miningEquipment.forEach(function (machine) {
let machineCount = `${machine}_on`;
let ippMachineOnCount = getVar(machineCount, 0, "int");
let ippMachineCrafted = IdlePixelPlus.getVarOrDefault(machine, 0, "int");
let i = ippMachineOnCount;
while (i > 0) {
i--;
websocket.send(`MACHINERY=${machine}~decrease`);
}
});
}
function quickCraft() {
const max = window.maxCraftable();
if (max > 0) {
IdlePixelPlus.sendMessage(`CRAFT=rocket_fuel~${max}`);
}
}
function quickCraftSingle() {
IdlePixelPlus.sendMessage(`CRAFT=rocket_fuel~1`);
}
function initQuickRocketFuel() {
$("#crafting-table tbody tr[data-crafting-item=rocket_fuel]").each(
function () {
const el = $(this);
const craft = el.attr("data-crafting-item");
if (!craft) {
return;
}
el.find("td:nth-child(4)").append(`
<div class="slapchop-rocketfuelsingle-button"
onclick="event.stopPropagation(); window.quickCraftSingle()"">Quick Craft 1</div>
<div class="slapchop-rocketfuelmax-button"
onclick="event.stopPropagation(); window.quickCraft()"">Quick Craft Max</div>
`);
}
);
}
window.initQuickMineral = initQuickMineral;
window.initQuickMining = initQuickMining;
window.initQuickSmelt = initQuickSmelt;
window.initQuickRocketFuel = initQuickRocketFuel;
window.initMiningPresets = initMiningPresets;
window.maxSmeltable = maxSmeltable;
window.quickSmelt = quickSmelt;
window.maxCraftable = maxCraftable;
window.updateMaxCraftable = updateMaxCraftable;
window.updateQuickSmelt = updateQuickSmelt;
window.quickMining = quickMining;
window.quickMineral = quickMineral;
window.quickCraft = quickCraft;
window.quickCraftSingle = quickCraftSingle;
window.allMachines = allMachines;
window.noMachines = noMachines;
window.miningPresetSave = miningPresetSave;
window.miningPresetLoad = miningPresetLoad;
window.SMELTABLES = SMELTABLES;
window.MINING = MINING;
window.MINERAL = MINERAL;
})();