您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Open the menu in HaremHeroes(topleft) to toggle AutoControlls. Messages are printed in local console.
当前为
// ==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 = "battle"; // 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 requires battle."); doBattle(); } 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] === '*'){ var energyNeeded = Number(sessionStorage.questRequirement.substr(1)); var energyCurrent = Number($("span[hero='energy_quest']").text()); if(energyNeeded<=energyCurrent) { // 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.("+energyNeeded+" needed)"); } } 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);