// ==UserScript==
// @name IdlePixel Slap Chop - GodofNades Fork
// @namespace com.anwinity.idlepixel
// @version 3.0.15
// @description Ain't nobody got time for that! Adds some QoL 1-click actions.
// @author Original Author: Anwinity || Modded By: GodofNades
// @license MIT
// @match *://idle-pixel.com/login/play*
// @grant none
// @require https://greasyfork.org/scripts/441206-idlepixel/code/IdlePixel+.js?anticache=20220905
// ==/UserScript==
(function () {
"use strict";
// Overall Declarations for different variables used throughout the script
let IPP, getVar, getThis, singleOverride;
let foundryToggle = true;
let smelteryToggle = true;
const IMAGE_URL_BASE = document
.querySelector("itembox[data-item=copper] img")
.src.replace(/\/[^/]+.png$/, "");
let loaded = false;
let onLoginLoaded = false;
// Start New Code Base Const/Functions
const misc = function () {
return {
initStyles: function () {
var style = document.createElement("style");
style.id = "styles-slapchop";
style.innerHTML = `
#slapchop-quickfight, #slapchop-quickpreset {
position: relative;
}
#slapchop-quickpreset > .slapchop-quickpreset-buttons {
display: flex;
flex-direction: row;
justify-content: start;
}
#slapchop-quickpreset > .slapchop-quickpreset-buttons > div {
display: flex;
flex-direction: column;
justify-content: start;
}
#slapchop-quickpreset > .slapchop-quickpreset-buttons > div > button {
margin: 0.125em;
}
#slapchop-quickfight > .slapchop-quickfight-buttons {
display: flex;
flex-direction: row;
flex-wrap: wrap;
}
#slapchop-quickfight > .slapchop-quickfight-buttons .slapchop-quickfight-zone {
width: 150px;
max-width: 150px;
display: flex;
flex-direction: column;
justify-content: start;
align-items: center;
position: relative;
}
#slapchop-quickfight > .slapchop-quickfight-buttons .slapchop-quickfight-zone.blood button {
font-weight: 550;
background-color: rgb(136, 8, 8) !important;
color: rgb(255,255,255);
}
#slapchop-quickfight > .slapchop-quickfight-buttons .slapchop-quickfight-zone.blood button:disabled {
color: rgba(255,255,255,0.3);
background-color: rgba(136, 8, 8, 0.3) !important;
}
#slapchop-quickfight > .slapchop-quickfight-buttons .slapchop-quickfight-zone > * {
width: 100%;
}
#slapchop-quickfight > .slapchop-quickfight-buttons .slapchop-quickfight-zone > .slapchop-quickfight-progress-container {
width: 100%;
color: white;
text-shadow: 1px 0 0 #000, 0 -1px 0 #000, 0 1px 0 #000, -1px 0 0 #000;
text-align: left;
position: relative;
}
#slapchop-quickfight > .slapchop-quickfight-buttons .slapchop-quickfight-zone > .slapchop-quickfight-progress-container > .slapchop-quickfight-progress-value {
position: relative;
z-index: 5;
margin-left: 4px;
font-weight: bold;
}
#slapchop-quickfight > .slapchop-quickfight-buttons .slapchop-quickfight-zone > .slapchop-quickfight-progress-container.slapchop-quickfight-fightpoints {
background-color: rgba(255, 216, 0, 0.5);
border: 1px solid rgb(255, 216, 0);
}
#slapchop-quickfight > .slapchop-quickfight-buttons .slapchop-quickfight-zone > .slapchop-quickfight-progress-container.slapchop-quickfight-fightpoints .slapchop-quickfight-progress {
background-color: #ffd800;
}
#slapchop-quickfight > .slapchop-quickfight-buttons .slapchop-quickfight-zone > .slapchop-quickfight-progress-container.slapchop-quickfight-energy {
background-color: rgba(215, 0, 71, 0.5);
border: 1px solid rgb(215, 0, 71);
}
#slapchop-quickfight > .slapchop-quickfight-buttons .slapchop-quickfight-zone > .slapchop-quickfight-progress-container.slapchop-quickfight-energy .slapchop-quickfight-progress {
background-color: #d70047;
}
#slapchop-quickfight > .slapchop-quickfight-buttons .slapchop-quickfight-zone > .slapchop-quickfight-progress-container > .slapchop-quickfight-progress {
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 0; /* will be overwritten inline */
z-index: 3;
}
#slapchop-quicklamp > .slapchop-quickfight-buttons .slapchop-quickfight-zone {
width: 150px;
max-width: 150px;
display: flex;
flex-direction: column;
justify-content: start;
align-items: center;
position: relative;
}
#brewing-table .slapchop-quickbrew-button {
border: 1px solid rgba(124, 218, 255, 0.86);
background-color: rgba(124, 218, 255, 0.1);
padding: 2px;
display: flex;
justify-content: center;
align-items: center;
margin: 0.5em auto 0.125em auto;
max-width: 100px;
}
#brewing-table .slapchop-quickbrew-button:hover {
background-color: rgba(69, 177, 216, 0.5);
}
#crafting-table .slapchop-rocketfuelmax-button {
border: 1px solid rgba(124, 218, 255, 0.86);
background-color: rgba(124, 218, 255, 0.1);
padding: 2px;
display: flex;
justify-content: center;
align-items: center;
margin: 0.5em auto 0.125em auto;
max-width: 150px;
}
#crafting-table .slapchop-rocketfuelmax-button:hover {
background-color: rgba(69, 177, 216, 0.5);
}
#crafting-table .slapchop-rocketfuelsingle-button {
border: 1px solid rgba(124, 218, 255, 0.86);
background-color: rgba(124, 218, 255, 0.1);
padding: 2px;
display: flex;
justify-content: center;
align-items: center;
margin: 0.5em auto 0.125em auto;
max-width: 150px;
}
#crafting-table .slapchop-rocketfuelsingle-button:hover {
background-color: rgba(69, 177, 216, 0.5);
}
#quick-lamp-zone {
display: flex;
flex-direction: row;
flex-wrap: wrap;
}
#lamp-zone-all {
display: inline-flex;
}
#melee-lamp-zone {
display: flex;
flex-direction: column;
justify-content: start;
align-items: center;
position: relative;
}
#archery-lamp-zone {
display: flex;
flex-direction: column;
justify-content: start;
align-items: center;
position: relative;
padding-left: 20px;
}
#magic-lamp-zone {
display: flex;
flex-direction: column;
justify-content: start;
align-items: center;
position: relative;
padding-left: 20px;
}
.fighting-monster-loot-potion {
background-color: rgba(32, 36, 33, 0.67);
border-color: rgb(255, 255, 255) rgb(255, 255, 255) rgb(255, 255, 255) rgb(255, 255, 255);
color: rgb(232, 230, 227);
border: 1px solid black;
border-top-color: black;
border-top-style: solid;
border-top-width: 1px;
border-right-color: black;
border-bottom-color: black;
border-bottom-style: solid;
border-bottom-width: 1px;
border-left-color: black;
border-left-style: solid;
border-left-width: 1px;
padding: 10px;
color: white;
border-bottom-right-radius: 5px;
border-top-right-radius: 5px;
margin-right: -3px;
margin-top: 20px;
}
.fighting-monster-rain-potion {
background-color: rgba(38, 115, 153, 0.67);
border-color: rgb(33, 207, 247);
color: rgb(232, 230, 227);
border: 1px solid black;
border-top-color: black;
border-top-style: solid;
border-top-width: 1px;
border-right-color: black;
border-bottom-color: black;
border-bottom-style: solid;
border-bottom-width: 1px;
border-left-color: black;
border-left-style: solid;
border-left-width: 1px;
padding: 10px;
color: white;
border-bottom-right-radius: 5px;
border-top-right-radius: 5px;
margin-right: -3px;
margin-top: 20px;
}
.lumberjack-rain-pot-woodcutting {
width:100px;
height:100px;
display: inline-block;
border:1px solid rgb(66, 66, 66);
background: rgb(8,115,0);
background: linear-gradient(0deg, rgba(8,115,0,1) 6%, rgba(55,45,253,1) 25%, rgba(55,45,253,1) 50%, rgba(101,101,101,1) 75%, rgba(52,52,52,1) 100%);
border-radius: 5pt;
color:white;
}
#rare_monster_potion-brew {
padding: 3px;
width: 50px;
}
#rare_monster_potion-use {
padding: 3px;
width: 50px;
}
#super_rare_monster_potion-brew {
padding: 3px;
width: 50px;
}
#super_rare_monster_potion-use {
padding: 3px;
width: 50px;
}
#combat_loot_potion-label {
color: white;
}
#rain_potion-in-combat-label {
color: white;
}
#rain_potion-brew {
padding: 3px;
width: 50px;
}
#rain_potion-use {
padding: 3px;
width: 50px;
}
.itembox-fight-center {
margin-top: 0.55rem;
text-align: center;
}
.center-flex {
display: flex;
justify-content: center;
text-align: center;
}
`;
document.head.appendChild(style);
},
updateButtons: function () {
let potions = ["rare_monster_potion", "super_rare_monster_potion"];
potions.forEach((potion) => {
let useButton = document.getElementById(`${potion}-use`);
let brewButton = document.getElementById(`${potion}-brew`);
getVar(potion, 0, "int")
? (useButton.style.color = "white")
: (useButton.style.color = "red");
sCBrewing().canBrew(potion)
? (brewButton.style.color = "white")
: (brewButton.style.color = "red");
});
let combatLootPotionsAmount = document.getElementById(
"combat_loot_potion-label"
);
combatLootPotionsAmount.textContent =
getVar("combat_loot_potion_timer", 0, "int") == 0
? "Loot Potions: " + getVar("combat_loot_potion", 0, "int")
: format_time(getVar("combat_loot_potion_timer", 0, "int"));
let rainPotionsAmount = document.getElementById(
"rain_potion-in-combat-label"
);
rainPotionsAmount.textContent =
getVar("rain_potion_timer", 0, "int") == 0
? "Rain Potions: " + getVar("rain_potion", 0, "int")
: format_time(getVar("rain_potion_timer", 0, "int"));
},
};
};
const actionType = function () {
return {
primary: function (event) {
const prop = getThis.getConfig("primaryActionKey") || "none";
if (prop == "none") {
return !(event.altKey || event.ctrlKey || event.shiftKey);
} else {
return event[prop];
}
},
alt: function (event) {
const prop = getThis.getConfig("altActionKey") || "altKey";
return event[prop];
},
};
};
const mining_crafting = function () {
window.SCMACHINES = [
"drill",
"crusher",
"giant_drill",
"excavator",
"giant_excavator",
"massive_excavator",
];
window.SCMINERAL = [
"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",
];
window.SCMINING = [
"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",
];
window.SCSMELTABLES = [
"copper",
"iron",
"silver",
"gold",
"promethium",
"titanium",
"ancient_ore",
"dragon_ore",
];
return {
// Quick Smelting
initQuickSmelt: function () {
let htmlMining = `
<div id="slapchop-quicksmelt-mining" class="slapchop-quicksmelt">
<h5>Quick Smelt:</h5>
<div class="slapchop-quicksmelt-buttons">
`;
SCSMELTABLES.forEach((ore) => {
htmlMining += `
<button type="button" onclick="sCMiningCrafting().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>
`;
const panelMining = document.querySelector("#panel-mining .panel-logo-xp-area");
panelMining.insertAdjacentHTML("afterend", htmlMining);
let htmlCrafting = `
<div id="slapchop-quicksmelt-crafting" class="slapchop-quicksmelt">
<h5>Quick Smelt:</h5>
<div class="slapchop-quicksmelt-buttons">
`;
SCSMELTABLES.forEach((ore) => {
htmlCrafting += `
<button type="button" onclick="sCMiningCrafting().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>
`;
const panelCrafting = document.querySelector("#panel-crafting .panel-logo-xp-area");
panelCrafting.insertAdjacentHTML("afterend", htmlCrafting);
SCSMELTABLES.forEach((ore) => {
const itemboxes = document.querySelectorAll(
`itembox[data-item="${ore}"]`
);
itemboxes.forEach((itembox) => {
itembox.addEventListener("contextmenu", (event) => {
if (getThis.getConfig("quickSmeltRightClickEnabled")) {
const primary = sCActionType().primary(event);
const alt = sCActionType().alt(event);
if (primary || alt) {
sCMiningCrafting().quickSmelt(ore, !primary);
event.stopPropagation();
event.preventDefault();
return false;
}
}
return true;
});
});
});
},
maxSmeltable: function (ore) {
const oilPerOre = Crafting.getOilPerBar(ore);
const charcoalPerOre = Crafting.getCharcoalPerBar(ore);
const lavaPerOre = Crafting.getLavaPerBar(ore);
const plasmaPerOre = Crafting.getPlasmaPerBar(ore);
const oil = getVar("oil", 0, "int");
const capacity = Furnace.getFurnaceCapacity();
const oreCount = getVar(ore, 0, "int");
const maxSmeltFromOil = Math.floor(oil / oilPerOre);
const dragonFire = getVar("dragon_fire", 0, "int");
let maxSmeltCount = Math.min(capacity, oreCount, maxSmeltFromOil);
if (charcoalPerOre > 0) {
const charcoal = getVar("charcoal", 0, "int");
const maxSmeltFromCharcoal = Math.floor(charcoal / charcoalPerOre);
maxSmeltCount = Math.min(maxSmeltCount, maxSmeltFromCharcoal);
}
if (lavaPerOre > 0) {
const lava = getVar("lava", 0, "int");
const maxSmeltFromLava = Math.floor(lava / lavaPerOre);
maxSmeltCount = Math.min(maxSmeltCount, maxSmeltFromLava);
}
if (plasmaPerOre > 0) {
const plasma = getVar("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;
},
quickSmelt: function (ore) {
if (smelteryToggle) {
smelteryToggle = false;
const current = getVar("furnace_ore_type", "none");
if (current == "none") {
const max = sCMiningCrafting().maxSmeltable(ore);
if (max > 0) {
IdlePixelPlus.sendMessage(`SMELT=${ore}~${max}`);
}
}
setTimeout(function () {
smelteryToggle = true;
}, 1000);
}
},
maxCraftable: function () {
const oilPerFuel = 5000;
const charcoalPerFuel = 20;
const lavaPerFuel = 1;
const oil = getVar("oil", 0, "int");
const maxFuelFromOil = Math.floor(oil / oilPerFuel);
let maxFuelCount = Math.min(maxFuelFromOil);
if (charcoalPerFuel > 0) {
const charcoal = getVar("charcoal", 0, "int");
const maxCraftFromCharcoal = Math.floor(charcoal / charcoalPerFuel);
maxFuelCount = Math.min(maxFuelCount, maxCraftFromCharcoal);
}
if (lavaPerFuel > 0) {
const lava = getVar("lava", 0, "int");
const maxCraftFromLava = Math.floor(lava / lavaPerFuel);
maxFuelCount = Math.min(maxFuelCount, maxCraftFromLava);
}
return maxFuelCount || 0;
},
updateMaxCraftable: function () {
const max = sCMiningCrafting().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";
}
}
},
updateQuickSmelt: function () {
SCSMELTABLES.forEach((ore) => {
const max = sCMiningCrafting().maxSmeltable(ore);
const elements = document.querySelectorAll(
`[data-slap="max-smelt-${ore}"]`
);
elements.forEach((element) => {
element.textContent = max;
});
});
},
// Quick Mining
initQuickMining: function () {
SCMINING.forEach((item) => {
const itemboxes = document.querySelectorAll(
`itembox[data-item="${item}"]`
);
itemboxes.forEach((itembox) => {
itembox.addEventListener("contextmenu", (event) => {
if (getThis.getConfig("quickMiningRightClickEnabled")) {
const primary = sCActionType().primary(event);
const alt = sCActionType().alt(event);
if (primary || alt) {
sCMiningCrafting().quickMining(item, !primary);
event.stopPropagation();
event.preventDefault();
return false;
}
}
return true;
});
});
});
},
quickMining: function (item, alt) {
let n = getVar(item, 0, "int");
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`);
}
}
},
// Quick Mineral
initQuickMineral: function () {
SCMINERAL.forEach((item) => {
const itemboxes = document.querySelectorAll(
`itembox[data-item="${item}"]`
);
itemboxes.forEach((itembox) => {
itembox.addEventListener("contextmenu", (event) => {
if (getThis.getConfig("quickMineralRightClickEnabled")) {
const primary = sCActionType().primary(event);
const alt = sCActionType().alt(event);
if (primary || alt) {
sCMiningCrafting().quickMineral(item, !primary);
event.stopPropagation();
event.preventDefault();
return false;
}
}
return true;
});
});
});
},
quickMineral: function (item, alt) {
let n = getVar(item, 0, "int");
if (alt || singleOverride) {
n--;
}
if (n > 0) {
IdlePixelPlus.sendMessage(`MINERAL_XP=${item}~${n}`);
}
},
// Mining Machine Presets
initMiningPresets: function () {
let html = `
<div id="miningmachines-presets">
<h5>Mining Machine Presets:</h5>
<div id="slapchop-quickpreset">
<div class="slapchop-quickpreset-buttons">
<div>
<button onclick="sCMiningCrafting().noMachines()">None</button>
</div>
<div>
<button onclick="sCMiningCrafting().miningPresetSave(2)">Save 2</button>
<button onclick="sCMiningCrafting().miningPresetLoad(2)">Load 2</button>
</div>
<div>
<button onclick="sCMiningCrafting().miningPresetSave(3)">Save 3</button>
<button onclick="sCMiningCrafting().miningPresetLoad(3)">Load 3</button>
</div>
<div>
<button onclick="sCMiningCrafting().miningPresetSave(4)">Save 4</button>
<button onclick="sCMiningCrafting().miningPresetLoad(4)">Load 4</button>
</div>
<div>
<button onclick="sCMiningCrafting().allMachines()">All</button>
</div>
</div>
</div>
<hr>
</div>
`;
document
.querySelector("div.fresh-account-buy-pickaxe-text")
.insertAdjacentHTML("beforebegin", html);
},
miningPresetSave: function (presetNumber) {
let presetData = {};
let presetName = `Preset ${presetNumber}`;
let username = getVar("username", "", "string");
SCMACHINES.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)
);
},
miningPresetLoad: function (presetNumber) {
SCMACHINES.forEach(function (machine) {
let machineCount = `${machine}_on`;
let ippMachineOnCount = getVar(machineCount, 0, "int");
let ippMachineCrafted = getVar(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;
}
SCMACHINES.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`);
}
});
},
allMachines: function () {
SCMACHINES.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`);
}
});
},
noMachines: function () {
SCMACHINES.forEach(function (machine) {
let machineCount = `${machine}_on`;
let ippMachineOnCount = getVar(machineCount, 0, "int");
let ippMachineCrafted = getVar(machine, 0, "int");
let i = ippMachineOnCount;
while (i > 0) {
i--;
websocket.send(`MACHINERY=${machine}~decrease`);
}
});
},
// Rocket Fuel Crafting
initQuickRocketFuel: function () {
const rows = document.querySelectorAll(
"#crafting-table tbody tr[data-crafting-item=rocket_fuel]"
);
rows.forEach((row) => {
const craft = row.getAttribute("data-crafting-item");
if (!craft) {
return;
}
const fourthTd = row.querySelector("td:nth-child(4)");
if (fourthTd) {
fourthTd.insertAdjacentHTML(
"beforeend",
`
<div class="slapchop-rocketfuelsingle-button"
onclick="event.stopPropagation(); sCMiningCrafting().quickCraftSingle()">Quick Craft 1</div>
<div class="slapchop-rocketfuelmax-button"
onclick="event.stopPropagation(); sCMiningCrafting().quickCraft()">Quick Craft Max</div>
`
);
}
});
},
quickCraft: function () {
const max = sCMiningCrafting().maxCraftable();
if (max > 0) {
IdlePixelPlus.sendMessage(`CRAFT=rocket_fuel~${max}`);
}
},
quickCraftSingle: function () {
IdlePixelPlus.sendMessage(`CRAFT=rocket_fuel~1`);
},
};
};
const gathering = function () {
window.SCLOOT_BAGS = Array.from(
document.querySelectorAll(`itembox[data-item^="gathering_loot_bag_"]`)
).map((el) => el.getAttribute("data-item"));
return {
quickGather: function (bag, alt) {
let n = getVar(bag, 0, "int");
if (alt || singleOverride) {
n--;
}
if (n > 0) {
IdlePixelPlus.sendMessage(
`OPEN_GATHERING_LOOT=${bag.replace("gathering_loot_bag_", "")}~${n}`
);
}
},
initQuickGather: function () {
SCLOOT_BAGS.forEach((item) => {
const itemboxes = document.querySelectorAll(
`itembox[data-item="${item}"]`
);
itemboxes.forEach((itembox) => {
itembox.addEventListener("contextmenu", (event) => {
if (getThis.getConfig("quickGatherRightClickEnabled")) {
const primary = sCActionType().primary(event);
const alt = sCActionType().alt(event);
if (primary || alt) {
sCGathering().quickGather(item, !primary);
event.stopPropagation();
event.preventDefault();
return false;
}
}
return true;
});
});
});
},
};
};
const farming = function () {
window.SCBONEMEALABLE = [
"bones",
"big_bones",
"ice_bones",
"ashes",
"blood_bones",
];
window.SCPLANTABLES = Array.from(
document.querySelectorAll('itembox[data-item$="_seeds"]')
).map((el) => el.getAttribute("data-item"));
return {
quickBone: function (item, alt) {
if (getVar("bonemeal_bin", 0, "int") != 0) {
let n = getVar(item, 0, "int");
singleOverride = getThis.getConfig("autoSingleEnabled");
if (alt || singleOverride) {
n--;
}
if (n > 0) {
IdlePixelPlus.sendMessage(`ADD_BONEMEAL=${item}~${n}`);
}
}
},
initQuickBones: function () {
SCBONEMEALABLE.forEach((item) => {
const itemboxes = document.querySelectorAll(
`itembox[data-item="${item}"]`
);
itemboxes.forEach((itembox) => {
itembox.addEventListener("contextmenu", (event) => {
if (getThis.getConfig("quickBoneRightClickEnabled")) {
const primary = sCActionType().primary(event);
const alt = sCActionType().alt(event);
if (primary || alt) {
sCFarming().quickBone(item, !primary);
event.stopPropagation();
event.preventDefault();
return false;
}
}
return true;
});
});
});
},
initQuickHarvest: function () {
const firstItemBox = document.querySelector("#panel-farming itembox");
if (firstItemBox) {
firstItemBox.insertAdjacentHTML(
"beforebegin",
`
<itembox id="slapchop-bob" class="shadow hover" data-item="slapchop_bob" onclick="sCFarming().quickHarvest()">
<div class="center mt-1"><img width="50" height="50" src="data:image/png;base64,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"></div>
<div class="center mt-2">Harvest</div>
</itembox>
`
);
}
const notificationFarmingReady = document.querySelector(
"#notification-farming-ready"
);
if (notificationFarmingReady) {
if (getThis.getConfig("quickHarvestNotificationEnabled")) {
notificationFarmingReady.setAttribute(
"onclick",
`sCFarming().quickHarvest(); switch_panels('panel-farming')`
);
} else {
notificationFarmingReady.setAttribute(
"onclick",
`switch_panels('panel-farming')`
);
}
}
},
quickHarvest: function () {
for (let i = 1; i <= 5; i++) {
let status = getVar("farm_stage_" + i, 0, "int");
if (status == 4) {
IdlePixelPlus.sendMessage("CLICKS_PLOT=" + i);
}
}
},
quickPlant: function (seed, alt) {
let n = getVar(seed, 0, "int");
if (alt || singleOverride) {
n--;
}
if (!alt && !singleOverride && n > 1) {
n = 1;
}
const donor = DonorShop.has_donor_active(
Items.getItem("donor_farm_patches_timestamp")
);
const maxPlot = donor ? 5 : 3;
for (let plot = 1; plot <= maxPlot && n > 0; plot++) {
if (getVar(`farm_${plot}`) == "none") {
IdlePixelPlus.sendMessage(`PLANT=${seed}~${plot}`);
n--;
}
}
},
initQuickPlant: function () {
SCPLANTABLES.forEach((item) => {
const itemboxes = document.querySelectorAll(
`itembox[data-item="${item}"]`
);
itemboxes.forEach((itembox) => {
itembox.addEventListener("contextmenu", (event) => {
if (getThis.getConfig("quickPlantRightClickEnabled")) {
const primary = sCActionType().primary(event);
const alt = sCActionType().alt(event);
if (primary || alt) {
if (getThis.getConfig("quickPlantHarvestRightClickEnabled")) {
sCFarming().quickHarvest();
}
sCFarming().quickPlant(item, !primary);
event.stopPropagation();
event.preventDefault();
return false;
}
}
return true;
});
});
});
},
};
};
const brewing = function () {
window.POTIONS = Object.keys(Brewing.POTION_TIMERS);
window.POTIONSNOTIMER = [
"cooks_dust_potion",
"fighting_dust_potion",
"tree_dust_potion",
"farm_dust_potion",
];
POTIONSNOTIMER.forEach((potion) => {
POTIONS.push(potion);
});
return {
canBrew: function (potion) {
let ingredients = Brewing.get_ingredients(potion);
for (let i = 0; i < ingredients.length; i += 2) {
if (getVar(ingredients[i], 0, "int") < ingredients[i + 1])
return false;
}
return true;
},
quickPotion: function (potion, alt) {
let n = getVar(potion, 0, "int");
//console.log(potion);
if (alt || singleOverride) {
n--;
}
if (!alt && !singleOverride && n > 1) {
n = 1;
}
if (n > 0) {
if (
potion == "combat_loot_potion" &&
var_combat_loot_potion_timer == 0
) {
websocket.send(`BREWING_DRINK_COMBAT_LOOT_POTION`);
} else if (
potion == "rotten_potion" &&
var_rotten_potion_timer == 0
) {
websocket.send(`BREWING_DRINK_ROTTEN_POTION`);
} else if (
potion == "merchant_speed_potion" &&
var_merchant_speed_potion_timer == 0
) {
websocket.send(`BREWING_DRINK_MERCHANT_SPEED_POTION`);
} else {
IdlePixelPlus.sendMessage(`DRINK=${potion}`);
}
}
},
initQuickPotions: function () {
POTIONS.forEach((item) => {
const itemBoxes = document.querySelectorAll(`[data-item="${item}"]`);
itemBoxes.forEach((itemBox) => {
itemBox.oncontextmenu = "";
if (itemBox) {
itemBox.addEventListener("contextmenu", (event) => {
if (getThis.getConfig("quickPotionRightClickEnabled")) {
const primary = sCActionType().primary(event);
const alt = sCActionType().alt(event);
if (primary || alt) {
sCBrewing().quickPotion(item, !primary);
event.stopPropagation();
event.preventDefault();
return false;
}
}
return true;
});
}
});
});
const combatLootPotion = document.querySelector(
'[data-item="combat_loot_potion"]'
);
combatLootPotion.oncontextmenu = "";
if (combatLootPotion) {
combatLootPotion.addEventListener("contextmenu", (event) => {
if (getThis.getConfig("quickPotionRightClickEnabled")) {
const primary = sCActionType().primary(event);
const alt = sCActionType().alt(event);
if (primary || alt) {
sCBrewing().quickPotion("combat_loot_potion", !primary);
event.stopPropagation();
event.preventDefault();
return false;
}
}
return true;
});
}
const merchantSpeedPotion = document.querySelector(
'[data-item="merchant_speed_potion"]'
);
merchantSpeedPotion.oncontextmenu = "";
if (merchantSpeedPotion) {
merchantSpeedPotion.addEventListener("contextmenu", (event) => {
if (getThis.getConfig("quickPotionRightClickEnabled")) {
const primary = sCActionType().primary(event);
const alt = sCActionType().alt(event);
if (primary || alt) {
this.quickPotion("merchant_speed_potion", !primary);
event.stopPropagation();
event.preventDefault();
return false;
}
}
return true;
});
}
const rottenPotion = document.querySelector(
'[data-item="rotten_potion"]'
);
rottenPotion.oncontextmenu = "";
if (rottenPotion) {
rottenPotion.addEventListener("contextmenu", (event) => {
if (getThis.getConfig("quickPotionRightClickEnabled")) {
const primary = sCActionType().primary(event);
const alt = sCActionType().alt(event);
if (primary || alt) {
sCBrewing().quickPotion("rotten_potion", !primary);
event.stopPropagation();
event.preventDefault();
return false;
}
}
return true;
});
}
},
quickBrew: function (potion) {
IdlePixelPlus.sendMessage(`BREW=${potion}~1`);
},
initQuickBrew: function () {
const rows = document.querySelectorAll(
"#brewing-table tbody tr[data-brewing-item]"
);
rows.forEach((row) => {
const potion = row.getAttribute("data-brewing-item");
if (!potion) {
return;
}
const fourthTd = row.querySelector("td:nth-child(4)");
if (fourthTd) {
fourthTd.insertAdjacentHTML(
"beforeend",
`
<div class="slapchop-quickbrew-button"
onclick="event.stopPropagation(); sCBrewing().quickBrew('${potion}')">Quick Brew 1</div>
`
);
}
});
},
};
};
const woodcutting = function () {
window.SCLOGS = Object.keys(Cooking.LOG_HEAT_MAP);
return {
quickBurn: function (item, alt) {
let n = getVar(item, 0, "int");
singleOverride = getThis.getConfig("autoSingleEnabled");
if (alt || singleOverride) {
n--;
}
if (n > 0) {
IdlePixelPlus.sendMessage(`ADD_HEAT=${item}~${n}`);
}
},
initQuickBurn: function () {
SCLOGS.forEach((item) => {
const itemboxes = document.querySelectorAll(
`itembox[data-item="${item}"]`
);
itemboxes.forEach((itembox) => {
itembox.addEventListener("contextmenu", (event) => {
if (getThis.getConfig("quickBurnRightClickEnabled")) {
const primary = sCActionType().primary(event);
const alt = sCActionType().alt(event);
if (primary || alt) {
sCWoodcutting().quickBurn(item, !primary);
event.stopPropagation();
event.preventDefault();
return false;
}
}
return true;
});
});
});
},
initQuickFoundry: function () {
let html = `
<div id="slapchop-quickfoundry" class="slapchop-quickfight">
<h5>Quick Foundry:</h5>
<div class="slapchop-quicksmelt-buttons">
`;
SCLOGS.forEach((log) => {
if (log != "dense_logs") {
html += `
<button id="slapchop-quickfoundry-${log}" type="button" onclick="sCWoodcutting().quickFoundry('${log}')">
<img src="${IMAGE_URL_BASE}/${log}.png" class="img-20" />
${log
.replace("_logs", "")
.replace(/_/g, " ")
.replace(/(^|\s)\w/g, (s) => s.toUpperCase())}
(<span data-slap="max-foundry-${log}">?</span>)
</button>
`;
}
});
html += `
</div>
<hr>
</div>
`;
const panelWoodcutting = document.querySelector(
"#panel-woodcutting .panel-logo-xp-area"
);
if (panelWoodcutting) {
panelWoodcutting.insertAdjacentHTML("afterend", html);
}
},
updateQuickFoundry: function () {
const foundryBusy = getVar("foundry_amount", 0, "int") != 0;
SCLOGS.forEach((log) => {
if (log != "dense_logs") {
const max = sCWoodcutting().maxFoundry(log);
const maxFoundryElement = document.querySelector(
`[data-slap="max-foundry-${log}"]`
);
if (maxFoundryElement) {
maxFoundryElement.textContent = max;
}
const button = document.querySelector(
`#slapchop-quickfoundry-${log}`
);
if (button) {
button.disabled = foundryBusy || max <= 0;
}
}
});
},
quickFoundry: function (log) {
if (foundryToggle) {
foundryToggle = false;
const max = sCWoodcutting().maxFoundry(log);
if (max > 0) {
IdlePixelPlus.sendMessage(`FOUNDRY=${log}~${max}`);
}
setTimeout(function () {
foundryToggle = true;
}, 1000);
}
},
maxFoundry: function (log) {
if (getVar("charcoal_foundry_crafted", "0") != "1") {
return 0;
}
let max = getVar(log, 0, "int");
let foundryStorage = getVar("foundry_storage_crafted", 0, "int");
if (max >= 1000 && foundryStorage == 1) {
max = 1000;
} else if (max > 100 && foundryStorage != 1) {
max = 100;
}
let oilMax = Math.floor(getVar("oil", 0, "int") / 10);
if (max > oilMax) {
max = oilMax;
}
return max;
},
initQuickChop: function () {
const panelWoodcutting = document.querySelector("#panel-woodcutting");
const firstItembox = panelWoodcutting.querySelector("itembox");
const lumberjackHtml = `
<itembox id="slapchop-lumberjack" class="shadow hover" data-item="slapchop_lumberjack" onclick="sCWoodcutting().quickChop()">
<div class="center mt-1"><img width="50" height="50" src="data:image/png;base64,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"></div>
<div class="center mt-2">Chop</div>
</itembox>
`;
const rainPotHtml = `
<itembox id="slapchop-rain-pot" class="shadow hover" data-item="slapchop_rainpot" onclick="websocket.send('DRINK=rain_potion')">
<div class="center mt-1"><img width="50" height="50" src="${IMAGE_URL_BASE}/rain_potion.png" title="rain_potion"></div>
<div class="center mt-2">Chop</div>
</itembox>
`;
const rainPotDivHtml = `
<div id="rain_pot-woodcutting" class="lumberjack-rain-pot-woodcutting" data-tooltip="rain_pot">
<div class="itembox-fight-center"><img src="${IMAGE_URL_BASE}/rain_potion.png" title="rain_potion"></div>
<div class="center-flex">
<div id="rain_potion-brew" class="hover" onclick="sCBrewing().quickBrew('rain_potion')">BREW</div>
<div id="rain_potion-use" class="hover" onclick="websocket.send('DRINK=rain_potion')">USE</div>
</div>
</div>
`;
if (firstItembox) {
firstItembox.insertAdjacentHTML("beforebegin", lumberjackHtml);
firstItembox.insertAdjacentHTML("afterend", rainPotHtml);
document
.querySelector("#slapchop-lumberjack")
.insertAdjacentHTML("afterend", rainPotDivHtml);
}
const notificationTreesReady = document.querySelector(
"#notification-trees-ready"
);
if (notificationTreesReady) {
if (
IdlePixelPlus.plugins.slapchop.getConfig(
"quickTreeNotificationHarvestEnabled"
)
) {
notificationTreesReady.setAttribute(
"onClick",
"sCWoodcutting().quickChop(); switch_panels('panel-woodcutting')"
);
} else {
notificationTreesReady.setAttribute(
"onClick",
"switch_panels('panel-woodcutting')"
);
}
}
},
quickChop: function () {
for (let i = 1; i <= 5; i++) {
let status = getVar("tree_stage_" + i, 0, "int");
let treeType = getVar("tree_" + i, "none");
let sdCut = getThis.getConfig("quickChopSDTreesEnabled");
let regCut = getThis.getConfig("quickChopRegTreesEnabled");
if (
(status == 4 &&
treeType != "stardust_tree" &&
treeType != "tree") ||
(status == 4 && treeType == "stardust_tree" && sdCut) ||
(status == 4 && treeType == "tree" && regCut)
) {
IdlePixelPlus.sendMessage("CHOP_TREE=" + i);
}
}
},
};
};
const cooking = function () {
window.SCEDIBLES = Object.keys(Cooking.ENERGY_MAP).filter(
(s) => !s.startsWith("raw_")
);
window.SCCOOKABLES = Object.keys(Cooking.FOOD_HEAT_REQ_MAP);
return {
initQuickCook: function () {
SCCOOKABLES.forEach((item) => {
const itemboxes = document.querySelectorAll(
`itembox[data-item="${item}"]`
);
itemboxes.forEach((itembox) => {
itembox.addEventListener("contextmenu", (event) => {
if (getThis.getConfig("quickCookRightClickEnabled")) {
const primary = sCActionType().primary(event);
const alt = sCActionType().alt(event);
if (primary || alt) {
sCCooking().quickCook(item, !primary);
event.stopPropagation();
event.preventDefault();
return false;
}
}
return true;
});
});
});
},
maxCookable: function (food) {
return Cooking.can_cook_how_many(food) || 0;
},
quickCook: function (food, alt) {
const max = sCCooking().maxCookable(food);
let n = max;
if (alt || singleOverride) {
const owned = getVar(food, 0, "int");
if (owned == max || singleOverride) {
n--;
}
}
if (n > 0) {
IdlePixelPlus.sendMessage(`COOK=${food}~${n}`);
}
},
quickEat: function (food, alt) {
let n = getVar(food, 0, "int");
if (alt || singleOverride) {
n--;
}
if (n > 0) {
IdlePixelPlus.sendMessage(`CONSUME=${food}~${n}`);
}
},
initQuickEat: function () {
SCEDIBLES.forEach((item) => {
const itemboxes = document.querySelectorAll(
`itembox[data-item="${item}"]`
);
itemboxes.forEach((itembox) => {
itembox.addEventListener("contextmenu", (event) => {
if (getThis.getConfig("quickEatRightClickEnabled")) {
const primary = sCActionType().primary(event);
const alt = sCActionType().alt(event);
if (primary || alt) {
sCCooking().quickEat(item, !primary);
event.stopPropagation();
event.preventDefault();
return false;
}
}
return true;
});
});
});
},
};
};
const fishing = function () {
window.SCBOATS = Array.from(
document.querySelectorAll(
`itembox[data-item$="_boat"], itembox[data-item$="_ship"]`
)
).map((el) => el.getAttribute("data-item"));
window.SCBAITS = Array.from(
document.querySelectorAll(`itembox[data-item$="bait"]`)
).map((el) => el.getAttribute("data-item"));
return {
quickBoat: function (item) {
const n = getVar(`${item}_timer`);
if (n == "1") {
IdlePixelPlus.sendMessage(`BOAT_COLLECT=${item}`);
} else {
IdlePixelPlus.sendMessage(`BOAT_SEND=${item}`);
}
},
initQuickBoat: function () {
SCBOATS.forEach((item) => {
const itemboxes = document.querySelectorAll(
`itembox[data-item="${item}"]`
);
itemboxes.forEach((itembox) => {
itembox.addEventListener("contextmenu", (event) => {
if (getThis.getConfig("quickBoatRightClickEnabled")) {
const primary = sCActionType().primary(event);
const alt = sCActionType().alt(event);
if (primary || alt) {
sCFishing().quickBoat(item, !primary);
event.stopPropagation();
event.preventDefault();
return false;
}
}
return true;
});
});
});
},
quickBait: function (item) {
var baitUse = "THROW_" + item.toUpperCase();
websocket.send(`${baitUse}`);
},
initQuickBait: function () {
SCBAITS.forEach((item) => {
const itemboxes = document.querySelectorAll(
`itembox[data-item="${item}"]`
);
itemboxes.forEach((itembox) => {
itembox.addEventListener("contextmenu", (event) => {
if (getThis.getConfig("quickBaitRightClickEnabled")) {
const primary = sCActionType().primary(event);
const alt = sCActionType().alt(event);
if (primary || alt) {
sCFishing().quickBait(item, !primary);
event.stopPropagation();
event.preventDefault();
return false;
}
}
return true;
});
});
});
},
};
};
const invention = function () {
window.SCGRINDABLE = Array.from(
document.querySelectorAll(
`#panel-invention itembox[data-item^="blood_"][onclick^="Invention.clicks_limb"]`
)
).map((el) => el.getAttribute("data-item"));
return {
initQuickGrind: function () {
SCGRINDABLE.forEach((item) => {
const itemboxes = document.querySelectorAll(
`itembox[data-item="${item}"]`
);
itemboxes.forEach((itembox) => {
itembox.addEventListener("contextmenu", (event) => {
if (getThis.getConfig("quickGrindRightClickEnabled")) {
const primary = sCActionType().primary(event);
const alt = sCActionType().alt(event);
if (primary || alt) {
sCInvention().quickGrind(item, !primary);
event.stopPropagation();
event.preventDefault();
return false;
}
}
return true;
});
});
});
},
quickGrind: function (item, alt) {
let n = getVar(item, 0, "int");
if (alt || singleOverride) {
n--;
}
if (!alt && !singleOverride && n > 1) {
n = 1;
}
if (n > 0) {
IdlePixelPlus.sendMessage(`GRIND=${item}~${n}`);
}
},
quickCleanse: function (item, alt) {
let n = getVar(item, 0, "int");
if (alt || singleOverride) {
n--;
}
if (n > 0) {
IdlePixelPlus.sendMessage(`CLEANSE_EVIL_BLOOD=${item}~${n}`);
}
},
initQuickCleanse: function () {
const itembox = document.querySelector(
`itembox[data-item="evil_blood"]`
);
itembox.addEventListener("contextmenu", (event) => {
if (getThis.getConfig("quickCleanseRightClickEnabled")) {
const primary = sCActionType().primary(event);
const alt = sCActionType().alt(event);
if (primary || alt) {
sCInvention().quickCleanse("evil_blood", !primary);
event.stopPropagation();
event.preventDefault();
return false;
}
}
return true;
});
},
};
};
const combat = function () {
window.SCNEEDLEABLE = [
"lizard_mask",
"lizard_body",
"lizard_legs",
"lizard_boots",
"lizard_gloves",
"bat_mask",
"bat_body",
"bat_legs",
"bat_boots",
"bat_gloves",
"bear_mask",
"bear_body",
"bear_legs",
"bear_boots",
"bear_gloves",
];
window.SCFEATHER2ARROW = {
feathers: {
craft: "wooden_arrows",
required: {
feathers: 15,
logs: 5,
iron_bar: 5,
},
},
fire_feathers: {
craft: "fire_arrows",
required: {
fire_feathers: 15,
oak_logs: 5,
silver_bar: 5,
},
},
ice_feathers: {
craft: "ice_arrows",
required: {
ice_feathers: 15,
willow_logs: 5,
gold_bar: 5,
},
},
ancient_feathers: {
craft: "ancient_arrows",
required: {
ancient_feathers: 15,
redwood_logs: 5,
ancient_bars: 5,
},
},
};
window.SCEXPLOSIVES = ["bomb", "tnt", "large_tnt", "mega_bomb"];
window.SCUSERNAME = getVar("username", "", "string");
window.SCRINGS = [
"accuracy_ring",
"ancient_accuracy_ring",
"ancient_damage_ring",
"ancient_defence_ring",
"damage_ring",
"defence_ring",
"good_accuracy_ring",
"good_damage_ring",
"good_defence_ring",
"great_accuracy_ring",
"great_damage_ring",
"great_defence_ring",
"master_ring",
"perfect_accuracy_ring",
"perfect_damage_ring",
"perfect_defence_ring",
"weak_accuracy_ring",
"weak_damage_ring",
"weak_defence_ring",
];
return {
loadPresets: function (buttonNum) {
// Retrieve all presets from local storage
let allPresets =
JSON.parse(localStorage.getItem(SCUSERNAME + ".combat_presets")) ||
{};
// Check if the requested preset exists
if (!allPresets[buttonNum]) {
console.error("Preset not found for button number:", buttonNum);
return;
}
// Load the preset and equip each item
IdlePixelPlus.sendMessage("UNEQUIP_ALL");
allPresets[buttonNum].forEach((item) => {
if (item) {
IdlePixelPlus.sendMessage("EQUIP=" + item);
}
});
},
savePresets: function (buttonNum) {
// Retrieve all presets from local storage, or initialize a new object if none exist
let allPresets =
JSON.parse(localStorage.getItem(SCUSERNAME + ".combat_presets")) ||
{};
// Save current equipment settings into the relevant key of the allPresets object
allPresets[buttonNum] = [
getVar("head", null, "string"),
getVar("body", null, "string"),
getVar("legs", null, "string"),
getVar("boots", null, "string"),
getVar("gloves", null, "string"),
getVar("amulet", null, "string"),
getVar("weapon", null, "string"),
getVar("shield", null, "string"),
getVar("arrows", null, "string"),
];
// Update the single entry in local storage with the modified allPresets object
localStorage.setItem(
SCUSERNAME + ".combat_presets",
JSON.stringify(allPresets)
);
},
initQuickFight: async function () {
let html = `
<div id="slapchop-quickfight">
<h5>Quick Fight:</h5>
<div class="slapchop-quickfight-buttons">
`;
Object.values(IdlePixelPlus.info.combatZones).forEach((zone) => {
html += `
<div id="slapchop-quickfight-${
zone.id
}" class="slapchop-quickfight-zone m-1 ${
zone.blood ? "blood" : ""
}">
<button type="button" onclick="sCCombat().quickFight('${
zone.id
}')">${zone.id
.replace(/_/g, " ")
.replace(/(^|\s)\w/g, (s) => s.toUpperCase())}
</button>
<div class="slapchop-quickfight-fightpoints slapchop-quickfight-progress-container" title="Fight Points: ${zone.fightPointCost.toLocaleString()}">
<span class="slapchop-quickfight-progress-value">0</span>
<div class="slapchop-quickfight-progress"></div>
</div>
<div class="slapchop-quickfight-energy slapchop-quickfight-progress-container" title="Energy: ${zone.energyCost.toLocaleString()}">
<span class="slapchop-quickfight-progress-value">0</span>
<div class="slapchop-quickfight-progress"></div>
</div>
</div>
`;
});
html += `
<div id="slapchop-quickfight-pirate" class="slapchop-quickfight-zone m-1 pirate">
<button type="button" onclick="websocket.send('FIGHT_EVIL_PIRATE')">Evil Pirate</button>
<div class="slapchop-quickfight-fightpoints slapchop-quickfight-progress-container" title="Fight Points: Pirate">
<span class="slapchop-quickfight-progress-value">2,000 FP</span>
<div class="slapchop-quickfight-progress"></div>
</div>
<div class="slapchop-quickfight-energy slapchop-quickfight-progress-container" title="Evil Pirate Count">
<span class="slapchop-quickfight-progress-value">0</span>
<div class="slapchop-quickfight-progress"></div>
</div>
</div>
`;
html += `
<div id="slapchop-quickfight-castle" class="slapchop-quickfight-zone m-1 castle">
<button type="button" onclick="Castle.clicks_castle_entrance(); document.getElementById('combat-stats').style.display = 'none'; document.getElementById('game-panels-combat-items-area').style.display = 'none'; Combat.refresh_small_icons_combat_selection();"">Faradox Castle</button>
<div class="slapchop-quickfight-fightpoints slapchop-quickfight-progress-container" title="Fight Points: Castle">
<span class="slapchop-quickfight-progress-value">No FP to Enter</span>
<div class="slapchop-quickfight-progress"></div>
</div>
<div class="slapchop-quickfight-energy slapchop-quickfight-progress-container" title="Energy: Castle">
<span class="slapchop-quickfight-progress-value">No Energy to Enter</span>
<div class="slapchop-quickfight-progress"></div>
</div>
</div>
`;
html += `
<div id="slapchop-quickfight-trios" class="slapchop-quickfight-zone m-1 trios">
<button type="button" onclick="websocket.send('FIGHT_GUARDIAN=4')">Trio Fight</button>
<div class="slapchop-quickfight-fightpoints slapchop-quickfight-progress-container" title="Key Sets: Trios">
<span class="slapchop-quickfight-progress-value">0</span>
<div class="slapchop-quickfight-progress"></div>
</div>
<div class="slapchop-quickfight-energy slapchop-quickfight-progress-container" title="Energy: Guardian Trios">
<span class="slapchop-quickfight-progress-value">100,000 Energy</span>
<div class="slapchop-quickfight-progress"></div>
</div>
</div>
</div>
`;
html += `
</div>
<hr>
</div>
<div id="slapchop-quickpreset">
<h5>Quick Presets:</h5>
<div class="slapchop-quickpreset-buttons">
<div>
<button onclick="IdlePixelPlus.sendMessage('PRESET_SAVE=1')">Save 1</button>
<button onclick="IdlePixelPlus.sendMessage('PRESET_LOAD=1~1')">Load 1</button>
</div>
<div>
<button onclick="IdlePixelPlus.sendMessage('PRESET_SAVE=2')">Save 2</button>
<button onclick="IdlePixelPlus.sendMessage('PRESET_LOAD=2~1')">Load 2</button>
</div>
<div>
<button onclick="IdlePixelPlus.sendMessage('PRESET_SAVE=3')">Save 3</button>
<button onclick="IdlePixelPlus.sendMessage('PRESET_LOAD=3~1')">Load 3</button>
</div>
<div>
<button onclick="IdlePixelPlus.sendMessage('PRESET_SAVE=4')">Save 4</button>
<button onclick="IdlePixelPlus.sendMessage('PRESET_LOAD=4~1')">Load 4</button>
</div>
<div>
<button onclick="IdlePixelPlus.sendMessage('PRESET_SAVE=5')">Save 5</button>
<button onclick="IdlePixelPlus.sendMessage('PRESET_LOAD=5~1')">Load 5</button>
</div>
<div>
<button onclick="sCCombat().savePresets(6)">Save 6</button>
<button onclick="sCCombat().loadPresets(6)">Load 6</button>
</div>
<div>
<button onclick="sCCombat().savePresets(7)">Save 7</button>
<button onclick="sCCombat().loadPresets(7)">Load 7</button>
</div>
<div>
<button onclick="sCCombat().savePresets(8)">Save 8</button>
<button onclick="sCCombat().loadPresets(8)">Load 8</button>
</div>
<div>
<button onclick="sCCombat().savePresets(9)">Save 9</button>
<button onclick="sCCombat().loadPresets(9)">Load 9</button>
</div>
<div>
<button onclick="sCCombat().savePresets(10)">Save 10</button>
<button onclick="sCCombat().loadPresets(10)">Load 10</button>
</div>
</div>
<br>
<h5>Rings:</h5>
<div>
<button onclick="sCCombat().equipAllRings()">All</button>
<button onclick="sCCombat().unEquipAllRings()">None</button>
<hr>
</div>
`;
const panelCombat = document.getElementById("combat-stats").querySelectorAll("div")[4];
if (panelCombat) {
panelCombat.insertAdjacentHTML("afterend", html);
}
const gamePanelsCombatItemsArea = document.getElementById(
"itembox-fight-guardians"
);
if (gamePanelsCombatItemsArea) {
gamePanelsCombatItemsArea.insertAdjacentHTML(
"afterend",
`
<div id="rare-monster-pot-in-combat-tab" class="itembox-fight" data-tooltip="fight">
<div class="itembox-fight-center"><img src="${IMAGE_URL_BASE}/rare_monster_potion.png" title="fight"></div>
<div class="center-flex">
<div id="rare_monster_potion-brew" class="hover" onclick="sCBrewing().quickBrew('rare_monster_potion')">BREW</div>
<div id="rare_monster_potion-use" class="hover" onclick="Modals.clicks_rare_monster_potion()">USE</div>
</div>
</div>
`
);
}
const rareMonsterPotInCombatTab = document.querySelector(
"#rare-monster-pot-in-combat-tab"
);
if (rareMonsterPotInCombatTab) {
rareMonsterPotInCombatTab.insertAdjacentHTML(
"afterend",
`
<div id="super_rare-monster-pot-in-combat-tab" class="itembox-fight" data-tooltip="fight">
<div class="itembox-fight-center"><img src="${IMAGE_URL_BASE}/super_rare_monster_potion.png" title="fight"></div>
<div class="center-flex">
<div id="super_rare_monster_potion-brew" class="hover" onclick="sCBrewing().quickBrew('super_rare_monster_potion')">BREW</div>
<div id="super_rare_monster_potion-use" class="hover" onclick="Modals.clicks_super_rare_monster_potion()">USE</div>
</div>
</div>
`
);
}
const fightLeftBorderCombatBottomPanel = document.querySelector(
".fight-left-border .td-combat-bottom-panel"
);
if (fightLeftBorderCombatBottomPanel) {
fightLeftBorderCombatBottomPanel.insertAdjacentHTML(
"afterend",
`
<div id="fighting-combat_loot_potion" onclick="websocket.send('BREWING_DRINK_COMBAT_LOOT_POTION')" class="fighting-monster-loot-potion hover shadow">
<img src="https://idlepixel.s3.us-east-2.amazonaws.com/images/combat_loot_potion.png" title="combat_loot_potion_icon">
<span id="combat_loot_potion-label">Loot Potions: 0</span>
</div>
`
);
}
const fightLeftBorderFightingCombatLootPotion = document.querySelector(
".fight-left-border #fighting-combat_loot_potion"
);
if (fightLeftBorderFightingCombatLootPotion) {
fightLeftBorderFightingCombatLootPotion.insertAdjacentHTML(
"afterend",
`
<div id="fighting-rain_potion" onclick="websocket.send('DRINK=rain_potion')" class="fighting-monster-rain-potion hover shadow">
<img src="https://idlepixel.s3.us-east-2.amazonaws.com/images/rain_potion.png" title="rain_potion_in_combat_icon">
<span id="rain_potion-in-combat-label">Rain Potions: 0</span>
</div>
`
);
}
},
useLamps: function (typeLamp) {
var lampCount = getVar("combat_xp_lamp", 0, "int");
for (let i = lampCount; i > 0; i--) {
websocket.send("COMBAT_XP_LAMP=" + typeLamp);
}
},
initQuickLamps: function () {
const quickLampContainerHtml = `
<div id="quick-lamp-container">
<div id="quick-lamp-zone">
<h5>Quick Lamps:</h5>
<div id="lamp-zone-all">
<div id="melee-lamp-zone">
<div id="melee-zone-label">Melee</div>
<button id="lamp-melee-max" onclick="sCCombat().useLamps('melee')">Max</button>
</div>
<div id="archery-lamp-zone">
<div id="archery-zone-label">Archery</div>
<button id="lamp-archery-max" onclick="sCCombat().useLamps('archery')">Max</button>
</div>
<div id="magic-lamp-zone">
<div id="magic-zone-label">Magic</div>
<button id="lamp-magic-max" onclick="sCCombat().useLamps('magic')">Max</button>
</div>
</div>
</div>
<hr>
</div>
`;
const gamePanelsCombatItemsArea = document.querySelector(
"#game-panels-combat-items-area"
);
if (gamePanelsCombatItemsArea) {
gamePanelsCombatItemsArea.insertAdjacentHTML(
"beforebegin",
quickLampContainerHtml
);
}
const lamps = getVar("combat_xp_lamp", 0, "int");
const quickLampContainer = document.getElementById("quick-lamp-container");
if (quickLampContainer) {
if (lamps === 0) {
quickLampContainer.style.display = "none";
} else {
quickLampContainer.style.display = "block";
}
}
},
updateQuickFight: function () {
const fp = getVar("fight_points", 0, "int");
const energy = getVar("energy", 0, "int");
const evilPirate = getVar("evil_pirate", 0, "int");
const g1Key = getVar("green_gaurdian_key", 0, "int");
const g2Key = getVar("blue_gaurdian_key", 0, "int");
const g3Key = getVar("purple_gaurdian_key", 0, "int");
const maxTrio = Math.min(g1Key, g2Key, g3Key);
Object.values(IdlePixelPlus.info.combatZones).forEach((zone) => {
let disabled = fp < zone.fightPointCost || energy < zone.energyCost;
let disabledPirate = fp < 2000 || evilPirate == 0;
let disabledTrios = energy < 100000 || maxTrio == 0;
let fpPercent = (fp / zone.fightPointCost).toFixed(2).split(".");
let fpPiratePercent = (fp / 2000).toFixed(2).split(".");
let energyPercent = (energy / zone.energyCost).toFixed(2).split(".");
let trioEnergyPercent = (energy / 100000).toFixed(2).split(".");
let fpLabel = `× ${fpPercent[0]} + ${fpPercent[1].replace(
/^0/,
""
)}%`;
let fpPirateLabel = `× ${
fpPiratePercent[0]
} + ${fpPiratePercent[1].replace(/^0/, "")}%`;
let energyTrioLabel = `× ${
trioEnergyPercent[0]
} + ${trioEnergyPercent[1].replace(/^0/, "")}%`;
let energyLabel = `× ${
energyPercent[0]
} + ${energyPercent[1].replace(/^0/, "")}%`;
if (
zone.id === "volcano" &&
IdlePixelPlus.getVar("volcano_unlocked") !== "1"
) {
disabled = true;
} else if (
zone.id === "northern_field" &&
IdlePixelPlus.getVar("northern_field_unlocked") !== "1"
) {
disabled = true;
} else if (
zone.id === "mansion" &&
IdlePixelPlus.getVar("mansion_unlocked") !== "1"
) {
disabled = true;
} else if (
(zone.id === "blood_field" ||
zone.id === "blood_forest" ||
zone.id === "blood_cave" ||
zone.id === "blood_volcano") &&
IdlePixelPlus.getVar("blood_moon_active") !== "1"
) {
disabled = true;
}
const button = document.querySelector(
`#slapchop-quickfight-${zone.id} button`
);
button.disabled = disabled;
const fpProgress = document.querySelector(
`#slapchop-quickfight-${zone.id} .slapchop-quickfight-fightpoints .slapchop-quickfight-progress`
);
const energyProgress = document.querySelector(
`#slapchop-quickfight-${zone.id} .slapchop-quickfight-energy .slapchop-quickfight-progress`
);
const fpProgressValue = document.querySelector(
`#slapchop-quickfight-${zone.id} .slapchop-quickfight-fightpoints .slapchop-quickfight-progress-value`
);
const energyProgressValue = document.querySelector(
`#slapchop-quickfight-${zone.id} .slapchop-quickfight-energy .slapchop-quickfight-progress-value`
);
const fpProgressPirate = document.querySelector(
`#slapchop-quickfight-pirate .slapchop-quickfight-fightpoints .slapchop-quickfight-progress`
);
const fpPirateProgressValue = document.querySelector(
`#slapchop-quickfight-pirate .slapchop-quickfight-fightpoints .slapchop-quickfight-progress-value`
);
const energyPirateProgressValue = document.querySelector(
`#slapchop-quickfight-pirate .slapchop-quickfight-energy .slapchop-quickfight-progress-value`
);
const energyTrioProgressValue = document.querySelector(
`#slapchop-quickfight-trios .slapchop-quickfight-energy .slapchop-quickfight-progress-value`
);
const fpTrioProgressValue = document.querySelector(
`#slapchop-quickfight-trios .slapchop-quickfight-fightpoints .slapchop-quickfight-progress-value`
);
const buttonPirate = document.querySelector(
`#slapchop-quickfight-pirate button`
);
const buttonTrios = document.querySelector(
`#slapchop-quickfight-trios button`
);
buttonPirate.disabled = disabledPirate;
buttonTrios.disabled = disabledTrios;
fpProgress.style.width = `${fpPercent}%`;
fpProgressPirate.style.width = `${fpPiratePercent}%`;
energyProgress.style.width = `${energyPercent}%`;
fpProgressValue.innerHTML = fpLabel;
fpPirateProgressValue.innerHTML = fpPirateLabel;
fpTrioProgressValue.innerHTML = `${maxTrio} Remaining`;
energyProgressValue.innerHTML = energyLabel;
energyPirateProgressValue.innerHTML = `${evilPirate} Remaining`;
energyTrioProgressValue.innerHTML = energyTrioLabel;
});
},
quickFight: function (zoneId) {
const confirm = getThis.getConfig("quickFightConfirm");
if (confirm) {
if (
sCCombat().confirm(
`FIGHT: ${zoneId
.replace(/_/g, " ")
.replace(/(^|\s)\w/g, (s) => s.toUpperCase())} ?`
)
) {
if (zoneId.startsWith("blood_")) {
Combat.modal_blood_area_last_selected = zoneId;
} else {
Combat.modal_area_last_selected = zoneId;
}
IdlePixelPlus.sendMessage(`START_FIGHT=${zoneId}`);
}
} else {
if (zoneId.startsWith("blood_")) {
Combat.modal_blood_area_last_selected = zoneId;
} else {
Combat.modal_area_last_selected = zoneId;
}
IdlePixelPlus.sendMessage(`START_FIGHT=${zoneId}`);
}
},
quickExplode: function (item) {
IdlePixelPlus.sendMessage(`USE_${item.toUpperCase()}`);
},
initQuickExplode: function () {
SCEXPLOSIVES.forEach((item) => {
const itemboxes = document.querySelectorAll(
`itembox[data-item="${item}"]`
);
itemboxes.forEach((itembox) => {
itembox.addEventListener("contextmenu", (event) => {
if (getThis.getConfig("quickExplosionEnabled")) {
const primary = sCActionType().primary(event);
const alt = sCActionType().alt(event);
if (primary || alt) {
sCCombat().quickExplode(item);
event.stopPropagation();
event.preventDefault();
return false;
}
}
return true;
});
});
});
},
quickNeedle: function (item, alt) {
let n = getVar(item, 0, "int");
if (alt || singleOverride) {
n--;
}
if (n > 0) {
IdlePixelPlus.sendMessage(`USE_NEEDLE=${item}~${n}`);
}
},
initQuickNeedle: function () {
SCNEEDLEABLE.forEach((item) => {
const itemboxes = document.querySelectorAll(
`itembox[data-item="${item}"]`
);
itemboxes.forEach((itembox) => {
itembox.addEventListener("contextmenu", (event) => {
if (getThis.getConfig("quickNeedleRightClickEnabled")) {
const primary = sCActionType().primary(event);
const alt = sCActionType().alt(event);
if (primary || alt) {
sCCombat().quickNeedle(item, !primary);
event.stopPropagation();
event.preventDefault();
return false;
}
}
return true;
});
});
});
},
maxCraftableArrows: function (feather) {
const data = SCFEATHER2ARROW[feather];
if (!data) return 0;
let max = Number.MAX_SAFE_INTEGER;
Object.keys(data.required).forEach((item) => {
const needed = data.required[item];
const owned = getVar(item, 0, "int");
const craftable = Math.floor(owned / needed);
max = Math.min(max, craftable);
});
return max;
},
quickFeather2Arrow: function (item, alt) {
let n = sCCombat().maxCraftableArrows(item);
if (n > 0) {
IdlePixelPlus.sendMessage(
`CRAFT=${SCFEATHER2ARROW[item].craft}~${n}`
);
}
},
initQuickFeather2Arrow: function () {
Object.keys(SCFEATHER2ARROW).forEach((item) => {
const itemboxes = document.querySelectorAll(
`itembox[data-item="${item}"]`
);
itemboxes.forEach((itembox) => {
itembox.addEventListener("contextmenu", (event) => {
if (getThis.getConfig("quickCraftArrowRightClickEnabled")) {
const primary = sCActionType().primary(event);
const alt = sCActionType().alt(event);
if (primary || alt) {
sCCombat().quickFeather2Arrow(item, !primary);
event.stopPropagation();
event.preventDefault();
return false;
}
}
return true;
});
});
});
},
initPresets: function () {
const combatPresetsHtml = `
<br />
<br />
<img data-tooltip="Preset 6" id="in-combat-presets-icon-6" onclick="sCCombat().loadPresets(6)" class="combat-presets-combat-icon hover w30" src="${IMAGE_URL_BASE}/melee.png" />
<img data-tooltip="Preset 7" id="in-combat-presets-icon-7" onclick="sCCombat().loadPresets(7)" class="combat-presets-combat-icon hover w30" src="${IMAGE_URL_BASE}/melee.png" />
<img data-tooltip="Preset 8" id="in-combat-presets-icon-8" onclick="sCCombat().loadPresets(8)" class="combat-presets-combat-icon hover w30" src="${IMAGE_URL_BASE}/melee.png" />
<img data-tooltip="Preset 9" id="in-combat-presets-icon-9" onclick="sCCombat().loadPresets(9)" class="combat-presets-combat-icon hover w30" src="${IMAGE_URL_BASE}/melee.png" />
<img data-tooltip="Preset 10" id="in-combat-presets-icon-10" onclick="sCCombat().loadPresets(10)" class="combat-presets-combat-icon hover w30" src="${IMAGE_URL_BASE}/melee.png" />
<br />
<br />
<img id="in-combat-presets-equip-rings" onclick="sCCombat().equipAllRings()" class="combat-presets-combat-icon hover w30" style="background-color: darkgreen" src="${IMAGE_URL_BASE}/rings_icon.png" title="Equip All Rings">
<img id="in-combat-presets-unequip-rings" onclick="sCCombat().unEquipAllRings()" class="combat-presets-combat-icon hover w30" style="background-color: darkred" src="${IMAGE_URL_BASE}/rings_icon.png" title="All Rings">
`;
const combatPresetsArea = document.getElementById(
"combat-presets-area"
);
if (combatPresetsArea) {
combatPresetsArea.insertAdjacentHTML("beforeend", combatPresetsHtml);
}
},
initPresetListener: function () {
const KEY_ACTIONS = {
54: () => sCCombat().loadPresets(6),
55: () => sCCombat().loadPresets(7),
56: () => sCCombat().loadPresets(8),
57: () => sCCombat().loadPresets(9),
48: () => sCCombat().loadPresets(10),
189: () => sCCombat().equipAllRings(),
187: () => sCCombat().unEquipAllRings(),
};
document.addEventListener("keyup", (e) => {
const chatInput = document.getElementById("chat-area-input");
let chatFocused = chatInput && document.activeElement === chatInput;
let isRelevantPanel = [
"panel-combat-canvas",
"panel-combat",
"panel-combat-canvas-raids",
].includes(Globals.currentPanel);
if (chatFocused || !isRelevantPanel) {
return; // Early exit if chat is focused or the panel is not relevant
}
const action = KEY_ACTIONS[e.keyCode];
if (action) {
action(); // Execute the action associated with the key code
}
});
},
equipAllRings: function () {
SCRINGS.forEach((ring) => {
if (
getVar(ring, 0, "int") != 0 &&
getVar(ring + "_equipped", 0, "int") == 0 &&
(getVar(ring + "_crafted", 0, "int") == 1 ||
getVar(ring + "_assembled", 0, "int") == 1)
) {
IdlePixelPlus.sendMessage(`EQUIP_RING=${ring}`);
}
});
},
unEquipAllRings: function () {
SCRINGS.forEach((ring) => {
if (getVar(ring + "_equipped", 0, "int") == 1) {
IdlePixelPlus.sendMessage(`EQUIP_RING=${ring}`);
}
});
},
};
};
window.sCMisc = misc;
window.sCActionType = actionType;
window.sCMiningCrafting = mining_crafting;
window.sCGathering = gathering;
window.sCFarming = farming;
window.sCBrewing = brewing;
window.sCWoodcutting = woodcutting;
window.sCCooking = cooking;
window.sCFishing = fishing;
window.sCInvention = invention;
window.sCCombat = combat;
// End New Code Base Const/Functions
class SlapChopPlugin extends IdlePixelPlusPlugin {
constructor() {
super("slapchop", {
about: {
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,
},
config: [
{
label:
"------------------------------------------------<br/>Key Binds<br/>------------------------------------------------",
type: "label",
},
{
id: "primaryActionKey",
label: "Primary Action Key",
type: "select",
options: [
{ value: "none", label: "None" },
{ value: "altKey", label: "Alt" },
{ value: "shiftKey", label: "Shift" },
{ value: "ctrlKey", label: "Ctrl" },
],
default: "none",
},
{
id: "altActionKey",
label: "Alt Action Key",
type: "select",
options: [
{ value: "altKey", label: "Alt" },
{ value: "shiftKey", label: "Shift" },
{ value: "ctrlKey", label: "Ctrl" },
],
default: "altKey",
},
{
id: "autoSingleEnabled",
label:
"Enable the ability to use items without having to hold the 'ALT' key<br/>to keep a single item for slapchop commands.",
type: "boolean",
default: true,
},
{
label:
"------------------------------------------------<br/>Brewing<br/>------------------------------------------------",
type: "label",
},
{
id: "quickBrewButtonEnabled",
label: "Quick Brew (buttons): Enabled",
type: "boolean",
default: true,
},
{
id: "quickPotionRightClickEnabled",
label: "Quick Potion (right-click, primary=1): Enabled",
type: "boolean",
default: true,
},
{
label:
"------------------------------------------------<br/>Combat<br/>------------------------------------------------",
type: "label",
},
{
id: "quickCraftArrowRightClickEnabled",
label:
"Quick Craft Arrow (right-click feather, primary=max): Enabled",
type: "boolean",
default: true,
},
{
id: "quickExplosionEnabled",
label:
"Quick Detonation - Quickly use explosives in combat window (right-click): Enabled",
type: "boolean",
default: true,
},
{
id: "quickFightEnabled",
label: "Quick Fight: Enabled",
type: "boolean",
default: true,
},
{
id: "quickFightConfirm",
label: "Quick Fight: Confirm",
type: "boolean",
default: false,
},
{
id: "quickFightEnergyBar",
label: "Quick Fight: Energy Bar",
type: "boolean",
default: true,
},
{
id: "quickFightFPBar",
label: "Quick Fight: FP Bar",
type: "boolean",
default: true,
},
{
id: "quickLampShow",
label: "Quick Lamp Show (When you have Lamps)",
type: "boolean",
default: true,
},
{
id: "quickNeedleRightClickEnabled",
label:
"Quick Needle (right-click, primary=max, alt=keep-1): Enabled",
type: "boolean",
default: false,
},
{
id: "quickPresetsEnabled",
label: "Quick Presets: Enabled",
type: "boolean",
default: true,
},
{
label:
"------------------------------------------------<br/>Cooking/Eating<br/>------------------------------------------------",
type: "label",
},
{
id: "quickCookRightClickEnabled",
label: "Quick Cook (right-click, primary=max, alt=keep-1): Enabled",
type: "boolean",
default: true,
},
{
id: "quickEatRightClickEnabled",
label: "Quick Eat (right-click, primary=max, alt=keep-1): Enabled",
type: "boolean",
default: true,
},
{
label:
"------------------------------------------------<br/>Farming<br/>------------------------------------------------",
type: "label",
},
{
id: "quickBoneRightClickEnabled",
label:
"Quick Bonemeal (right-click, primary=max, alt=keep-1): Enabled",
type: "boolean",
default: true,
},
{
id: "quickHarvestEnabled",
label: "Quick Harvest (Bob): Enabled",
type: "boolean",
default: true,
},
{
id: "quickHarvestNotificationEnabled",
label:
"Harvest Farm plots when clicking on the notification: Enabled",
type: "boolean",
default: true,
},
{
id: "quickPlantRightClickEnabled",
label: "Quick Plant (right-click, primary=1, alt=max): Enabled",
type: "boolean",
default: true,
},
{
id: "quickPlantHarvestRightClickEnabled",
label:
"Quick Harvest And Plant (right-click, primary=1, alt=max): Enabled",
type: "boolean",
default: false,
},
{
label:
"------------------------------------------------<br/>Fishing<br/>------------------------------------------------",
type: "label",
},
{
id: "quickBaitRightClickEnabled",
label: "Quick Bait (right-click): Enabled",
type: "boolean",
default: true,
},
{
id: "quickBoatRightClickEnabled",
label: "Quick Boat (right-click): Enabled",
type: "boolean",
default: true,
},
{
label:
"------------------------------------------------<br/>Foundry/Mining/Smelting<br/>------------------------------------------------",
type: "label",
},
{
id: "quickFoundryEnabled",
label: "Quick Foundry (buttons): Enabled",
type: "boolean",
default: true,
},
{
id: "quickMiningRightClickEnabled",
label: "Quick Geode / Prism Use (right-click, primary=1): Enabled",
type: "boolean",
default: true,
},
{
id: "quickMineralRightClickEnabled",
label:
"Quick Mineral XP Conversion (right-click, primary=1): Enabled",
type: "boolean",
default: true,
},
{
id: "quickSmeltEnabled",
label: "Quick Smelt (buttons): Enabled",
type: "boolean",
default: true,
},
{
id: "quickSmeltRightClickEnabled",
label: "Quick Smelt (right-click, primary=max): Enabled",
type: "boolean",
default: true,
},
{
label:
"------------------------------------------------<br/>Gathering<br/>------------------------------------------------",
type: "label",
},
{
id: "quickGatherRightClickEnabled",
label:
"Quick Gather (right-click, primary=max, alt=keep-1): Enabled",
type: "boolean",
default: true,
},
{
label:
"------------------------------------------------<br/>Invention<br/>------------------------------------------------",
type: "label",
},
{
id: "quickGrindRightClickEnabled",
label: "Quick Blood Grind (right-click, primary=1): Enabled",
type: "boolean",
default: true,
},
{
id: "quickCleanseRightClickEnabled",
label:
"Quick Cleanse Blood in Invention (right-click, primary=1): Enabled",
type: "boolean",
default: true,
},
{
label:
"------------------------------------------------<br/>Woodcutting<br/>------------------------------------------------",
type: "label",
},
{
id: "quickBurnRightClickEnabled",
label:
"Quick Burn Logs (right-click, primary=max, alt=keep-1): Enabled",
type: "boolean",
default: true,
},
{
id: "quickChopEnabled",
label: "Quick Chop (Lumberjack): Enabled",
type: "boolean",
default: true,
},
{
id: "quickChopRegTreesEnabled",
label: "Quick Chop (Normal Trees Lumberjack): Enabled",
type: "boolean",
default: true,
},
{
id: "quickChopSDTreesEnabled",
label: "Quick Chop (SD Trees Lumberjack): Enabled",
type: "boolean",
default: true,
},
{
id: "quickTreeNotificationHarvestEnabled",
label: "Harvest Trees when clicking on the notification: Enabled",
type: "boolean",
default: true,
},
],
});
}
onPanelChanged(panelBefore, panelAfter) {
if (Globals.currentPanel == "panel-woodcutting") {
let woodCuttingElite = Achievements.has_completed_set(
"woodcutting",
"elite"
);
if (woodCuttingElite) {
document.getElementById("rain_pot-woodcutting").style.display = "";
} else {
document.getElementById("rain_pot-woodcutting").style.display =
"none";
}
if (Globals.currentPanel == "panel-combat") {
var lamps = getVar("combat_xp_lamp", 0, "int");
if (lamps == 0) {
document.getElementById("quick-lamp-container").style.display =
"none";
} else {
document.getElementById("quick-lamp-container").style.display = "";
}
sCMisc().updateQuickFight();
}
}
}
onConfigsChanged() {
if (onLoginLoaded) {
sCMisc().updateButtons();
const slapchopQuickFight = document.querySelector(
"#slapchop-quickfight"
);
const slapchopQuickFoundry = document.querySelector(
"#slapchop-quickfoundry"
);
const slapchopQuickPreset = document.querySelector(
"#slapchop-quickpreset"
);
const slapchopQuickFightFPBar = document.querySelectorAll(
".slapchop-quickfight-fightpoints"
);
const slapchopQuickFightEnergyBar = document.querySelectorAll(
".slapchop-quickfight-energy"
);
const slapchopQuickSmeltMining = document.getElementById(
"slapchop-quicksmelt-mining"
);
const slapchopQuickSmeltCrafting = document.getElementById(
"slapchop-quicksmelt-crafting"
);
const slapchopQuickBrewButton = document.querySelectorAll(
".slapchop-quickbrew-button"
);
singleOverride = getThis.getConfig("autoSingleEnabled");
if (getThis.getConfig("quickFightEnabled")) {
slapchopQuickFight.style.display = "block";
} else {
slapchopQuickFight.style.display = "none";
}
if (getThis.getConfig("quickFoundryEnabled")) {
slapchopQuickFoundry.style.display = "block";
} else {
slapchopQuickFoundry.style.display = "none";
}
const presetsUnlocked = IdlePixelPlus.getVar("combat_presets") == "1";
if (presetsUnlocked && getThis.getConfig("quickPresetsEnabled")) {
slapchopQuickPreset.style.display = "block";
} else {
slapchopQuickPreset.style.display = "none";
}
if (getThis.getConfig("quickFightFPBar")) {
slapchopQuickFightFPBar.forEach((bar) => {
bar.style.display = "block";
});
} else {
slapchopQuickFightFPBar.forEach((bar) => {
bar.style.display = "none";
});
}
if (getThis.getConfig("quickFightEnergyBar")) {
slapchopQuickFightEnergyBar.forEach((bar) => {
bar.style.display = "block";
});
} else {
slapchopQuickFightEnergyBar.forEach((bar) => {
bar.style.display = "none";
});
}
if (getThis.getConfig("quickSmeltEnabled")) {
slapchopQuickSmeltMining.style.display = "block";
slapchopQuickSmeltCrafting.style.display = "block";
} else {
slapchopQuickSmeltMining.style.display = "none";
slapchopQuickSmeltCrafting.style.display = "none";
}
if (getThis.getConfig("quickBrewButtonEnabled")) {
slapchopQuickBrewButton.forEach((button) => {
button.style.display = "block";
});
} else {
slapchopQuickBrewButton.forEach((button) => {
button.style.display = "none";
});
}
if (
getThis.getConfig("quickLampShow") &&
getVar("combat_xp_lamp", 0, "int") > 0
) {
document.getElementById("quick-lamp-container").style.display = "";
} else {
document.getElementById("quick-lamp-container").style.display =
"none";
}
if (getThis.getConfig("quickHarvestEnabled")) {
window.var_slapchop_bob = "1";
} else {
window.var_slapchop_bob = "0";
}
if (getThis.getConfig("quickChopEnabled")) {
window.var_slapchop_lumberjack = "1";
} else {
window.var_slapchop_lumberjack = "0";
}
const notificationTreesReady = document.getElementById(
"notification-trees"
);
if (getThis.getConfig("quickTreeNotificationHarvestEnabled")) {
notificationTreesReady.setAttribute(
"onClick",
`sCWoodcutting().quickChop(); switch_panels('panel-woodcutting')`
);
} else {
notificationTreesReady.setAttribute(
"onClick",
`switch_panels('panel-woodcutting')`
);
}
}
}
onLogin() {
IPP = IdlePixelPlus;
getVar = IdlePixelPlus.getVarOrDefault;
getThis = IdlePixelPlus.plugins.slapchop;
singleOverride = getThis.getConfig("autoSingleEnabled");
sCMisc().initStyles();
sCCombat().initQuickFight();
sCMiningCrafting().initQuickSmelt();
sCCooking().initQuickCook();
sCCooking().initQuickEat();
sCFarming().initQuickPlant();
sCFarming().initQuickBones();
sCBrewing().initQuickPotions();
sCFishing().initQuickBoat();
sCFishing().initQuickBait();
sCCombat().initQuickNeedle();
sCBrewing().initQuickBrew();
sCGathering().initQuickGather();
sCWoodcutting().initQuickBurn();
sCCombat().initQuickFeather2Arrow();
sCWoodcutting().initQuickFoundry();
sCWoodcutting().initQuickChop();
sCFarming().initQuickHarvest();
sCInvention().initQuickGrind();
sCMiningCrafting().initQuickRocketFuel();
sCMiningCrafting().initQuickMining();
sCInvention().initQuickCleanse();
sCMiningCrafting().initQuickMineral();
sCMiningCrafting().initMiningPresets();
sCCombat().initPresets();
sCCombat().initPresetListener();
sCCombat().initQuickExplode();
sCCombat().initQuickLamps();
sCCombat().updateQuickFight();
sCMiningCrafting().updateQuickSmelt();
sCWoodcutting().updateQuickFoundry();
setTimeout(function () {
onLoginLoaded = true;
IdlePixelPlus.plugins.slapchop.onConfigsChanged();
}, 5000);
loaded = true;
}
onVariableSet(key, valueBefore, valueAfter) {
if (onLoginLoaded) {
if (Globals.currentPanel != "panel-combat-canvas") {
if (Globals.currentPanel == "panel-combat") {
if (key.includes("combat_xp_lamp")) {
var lamps = getVar("combat_xp_lamp", 0, "int");
if (lamps == 0 || !getThis.getConfig("quickLampShow")) {
document.getElementById("quick-lamp-container").style.display =
"none";
} else {
document.getElementById("quick-lamp-container").style.display =
"";
}
}
}
if (
[
"fight_points",
"energy",
"volcano_unlocked",
"northern_field_unlocked",
"blood_moon_active",
].includes(key)
) {
sCCombat().updateQuickFight();
}
}
if (
Globals.currentPanel == "panel-mining" ||
Globals.currentPanel == "panel-crafting"
) {
if (
[
SCSMELTABLES,
"oil",
"charcoal",
"lava",
"dragon_fire",
"stone_furnace",
"bronze_furnace",
"iron_furnace",
"silver_furnace",
"gold_furnace",
"promethium_furnace",
"titanium_furnace",
"ancient_furnace",
"dragon_furnace",
].includes(key)
) {
sCMiningCrafting().updateQuickSmelt();
sCMiningCrafting().updateMaxCraftable();
}
}
if (Globals.currentPanel == "panel-woodcutting") {
if ([SCLOGS, "oil", "foundry_amount"].includes(key)) {
sCWoodcutting().updateQuickFoundry();
}
}
if (!loaded) {
this.delay();
return;
}
let variables = [
"dotted_green_leaf",
"strange_leaf",
"red_mushroom",
"rare_monster_potion",
"super_rare_monster_potion",
"combat_loot_potion",
"combat_loot_potion_timer",
"rain_potion",
"rain_potion_timer",
];
if (variables.includes(key)) {
sCMisc().updateButtons();
}
}
}
async delay() {
await new Promise((resolve) => {
const checkLoaded = () => {
if (loaded) {
resolve();
} else {
setTimeout(checkLoaded, 2000);
}
};
checkLoaded();
});
sCMisc().updateButtons();
}
}
const plugin = new SlapChopPlugin();
IdlePixelPlus.registerPlugin(plugin);
})();