Open the menu in HaremHeroes(topleft) to toggle AutoControlls. Messages are printed in local console.
Fra
// ==UserScript==
// @name HaremHeroes Automatic
// @namespace JDscripts
// @version 0.6
// @description Open the menu in HaremHeroes(topleft) to toggle AutoControlls. Messages are printed in local console.
// @author JD
// @match http*://nutaku.haremheroes.com/*
// @require https://cdn.jsdelivr.net/js-cookie/2.2.0/js.cookie.js
// @grant GM_addStyle
// ==/UserScript==
GM_addStyle('/* The switch - the box around the slider */ .switch { position: relative; display: inline-block; width: 60px; height: 34px; } /* Hide default HTML checkbox */ .switch input {display:none;} /* The slider */ .slider { position: absolute; cursor: pointer; top: 0; left: 0; right: 0; bottom: 0; background-color: #ccc; -webkit-transition: .4s; transition: .4s; } .slider:before { position: absolute; content: ""; height: 26px; width: 26px; left: 4px; bottom: 4px; background-color: white; -webkit-transition: .4s; transition: .4s; } input:checked + .slider { background-color: #2196F3; } input:focus + .slider { box-shadow: 0 0 1px #2196F3; } input:checked + .slider:before { -webkit-transform: translateX(26px); -ms-transform: translateX(26px); transform: translateX(26px); } /* Rounded sliders */ .slider.round { border-radius: 34px; } .slider.round:before { border-radius: 50%; }');
var proceedQuest = function()
{
console.log("Starting auto quest.");
var currentQuestMunuOption = $("nav div[rel='content'] a:has(.continue_quest)");
if(typeof currentQuestMunuOption == "undefined"){console.log("Could not find current quest menu button for verification. Probably it hasn't yet loaded.");return;}
// Check if at correct page.
if(currentQuestMunuOption.attr("href") !== window.location.pathname)
{
// Click on current quest to naviagte to it.
console.log("Navigating to current quest.");
sessionStorage.autoLoop = "false";
window.location = window.location.origin+$("nav div[rel='content'] a:has(.continue_quest)").attr("href");
return;
}
// Get the proceed button type
var proceedButtonMatch = $("#controls button:not([style='display: none;'])");
var proceedCostEnergy = Number($("#controls .cost span[cur='*']").text());
var proceedCostMoney = Number($("#controls .cost span[cur='$']").text());
var proceedType = proceedButtonMatch.attr("act");
if(proceedButtonMatch.length === 0)console.log("Could not find resume button.");
else if(proceedType === "free")
{
console.log("Proceeding for free.");
proceedButtonMatch.click();
}
else if(proceedType === "use_item")
{
console.log("Proceeding by using X"+Number($("#controls .item span").text())+" of the required item.");
proceedButtonMatch.click();
}
else if(proceedType === "battle")
{
console.log("Proceeding to battle troll... W.I.P(Call auto-battle function here.)");
sessionStorage.battleRequiredForQuest = "true";
sessionStorage.questRequirement = "*2"; // Need at least 2 energy for quest battles.
sessionStorage.autoLoop = "false";
// Proceed to battle troll.
proceedButtonMatch.click();
}
else if(proceedType === "end_archive")
{
console.log("Reached end of current archive. Proceeding to next archive.");
sessionStorage.autoLoop = "false";
proceedButtonMatch.click();
}
else {
console.log("Could not identify given resume button.");
sessionStorage.questRequirement = "unknownQuestButton";
}
};
var getSalary = function(){
try{
if($("#breadcrumbs span").last().text() === "Harem"){
console.log("Detected Harem Screen. Fetching Salary");
$("#harem_whole #harem_left .salary:not('.loads') button").each(function(index){$(this).click();});
document.cookie = "nextSalaryTime=;";
}
else
{
// Not at Harem screen then goto the Harem screen.
console.log("Navigating to Harem window.");
sessionStorage.autoLoop = "false";
window.location = window.location.origin+$("nav div[rel='content'] a:has(.harem)").attr("href");
return;
}
}
catch(ex)
{
console.log("Could not collect salary... "+ex);
}
};
var doBattle = function()
{
console.log("Performing auto battle.");
// Confirm if on correct screen.
if($("#breadcrumbs span").last().text() === "Battle")
{
// On battle page.
if($("#arena[class='canvas']").length === 1)
{
// Oponent choose screen
}
else if($("#battle[class='canvas']").length === 1)
{
// Battle screen
}
else
{
console.log("Could not identify battle screen.");
if(sessionStorage.questRequirement === "battle")sessionStorage.questRequirement = "errorInAutoBattle";
return;
}
if(sessionStorage.questRequirement === "battle")
{
// Battle Done.
sessionStorage.questRequirement = "none";
}
}
};
var updateData = function()
{
//console.log("updating UI");
sessionStorage.autoSalary = document.getElementById("autoSalaryCheckbox").checked;
sessionStorage.autoQuest = document.getElementById("autoQuestCheckbox").checked;
};
var autoLoop = function()
{
updateData();
//console.log("sal="+sessionStorage.autoSalary);
if(sessionStorage.autoSalary === "true")
{
if(Cookies.get("nextSalaryTime") === undefined)
{
console.log("Time to fetch salary.");
getSalary();
}
else if(Cookies.get("nextSalaryTime") === "")
{
console.log("Salary fetched. Getting next fetch time");
if($("nav div[rel='content'] a:has(.home)").attr("href") !== window.location.pathname)
{
console.log("Moving to home.");
sessionStorage.autoLoop = "false";
// Goto Home page.
window.location = window.location.origin+$("nav div[rel='content'] a:has(.home)").attr("href");
return;
}
var closestTime = $("#collect_all_bar .in monospace m").first();
closestTime = (Number(closestTime.text()+closestTime.next().text())*60 + Number(closestTime.next().next().text() + closestTime.next().next().next().text()));
document.cookie = "nextSalaryTime=present;max-age="+(closestTime<0?0:closestTime);
console.log("New fetch time stored in nextSalaryTime cookie.(+"+closestTime+" sec.)");
}
}
if(sessionStorage.autoQuest === "true")
{
if(sessionStorage.questRequirement === "battle")
{
console.log("Quest may require battle.");
}
else if(sessionStorage.questRequirement !== "none") {
if(sessionStorage.questRequirement[0] === '$'){
if(Number(sessionStorage.questRequirement.substr(1))<Number($("div[hero='soft_currency'] span").text().trim().replace(',','')))
{
// We have enough money... requirement fulfilled.
console.log("Continuing quest, required money obtained.");
sessionStorage.questRequirement = "none";
proceedQuest();
}
else{
// Else we need more money.
console.log("Need money for quest, cannot continue. Fetching salary for money.");
getSalary();
}
}
else if(sessionStorage.questRequirement[0] === '*'){
if(Number(sessionStorage.questRequirement.substr(1))<Number($("span[hero='energy_quest']").text()))
{
// We have enough energy... requirement fulfilled.
console.log("Continuing quest, required energy obtained.");
sessionStorage.questRequirement = "none";
proceedQuest();
}
// Else we need energy, just wait.
else console.log("Replenishing energy for quest. Waiting...");
}
else if(sessionStorage.questRequirement === "unknownQuestButton")
{
console.log("AutoQuest disabled.AutoQuest cannot be performed due to unknown quest button. Please manually proceed the current quest screen.");
document.getElementById("autoQuestCheckbox").checked = false;
sessionStorage.autoQuest = "false";
sessionStorage.questRequirement = "none";
}
else if(sessionStorage.questRequirement === "errorInAutoBattle")
{
console.log("AutoQuest disabled.AutoQuest cannot be performed due errors in AutoBattle. Please manually proceed the current quest screen.");
document.getElementById("autoQuestCheckbox").checked = false;
sessionStorage.autoQuest = "false";
sessionStorage.questRequirement = "none";
}
}
else proceedQuest();
}
if(sessionStorage.autoLoop === "true")setTimeout(autoLoop, Number(sessionStorage.autoLoopTimeMili));
else console.log("autoLoop Disabled");
};
var setDefaults = function()
{
sessionStorage.autoSalary = "false";
sessionStorage.autoLoop = "true";
sessionStorage.autoLoopTimeMili = "200";
sessionStorage.autoQuest = "false";
sessionStorage.questRequirement = "";
sessionStorage.questRequirement = "none";
sessionStorage.freshStart = "no";
};
var start = function()
{
//console.log("script started");
// Add UI buttons.
$("#contains_all nav div[rel='content'] .extender").html('<center><table><td>AutoSal.</td><td>AutoQuest</td><tr><td><label class=\"switch\"><input id=\"autoSalaryCheckbox\" type=\"checkbox\"><span class=\"slider round\"></span></label></td><td><label class=\"switch\"><input id=\"autoQuestCheckbox\" type=\"checkbox\"><span class=\"slider round\"></span></label></td></tr></table></center>');
document.getElementById("autoSalaryCheckbox").checked = sessionStorage.autoSalary === "true";
document.getElementById("autoQuestCheckbox").checked = sessionStorage.autoQuest === "true";
if(typeof sessionStorage.freshStart == "undefined" || isNaN(Number(sessionStorage.autoLoopTimeMili)) || sessionStorage.autoLoop == "false"){
setDefaults();
}
autoLoop();
};
$("document").ready(start);