您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Greasy Fork is available in English.
Auxiliary functions for the page and the extender.
当前为
此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.greasyfork.icu/scripts/5618/20694/GOTA_Extender_Auxiliary.js
// --> Message handling function log(message, type) { if (extender_debugMode && console && console.log && typeof (console.log) == "function") { if (!type) type = "page"; var prefix = type.toString().toUpperCase() + " <" + new Date().toLocaleTimeString() + "> "; console.log(prefix + message); } } function error(message, type) { if (extender_debugMode && console && console.error && typeof (console.error) == "function") { if (!type) type = "page"; var prefix = type.toString().toUpperCase() + " - ERROR <" + new Date().toLocaleTimeString() + "> "; console.error(prefix + message); } } function warn(message, type) { if (extender_debugMode && console && console.warn && typeof (console.warn) == "function") { if (!type) type = "page"; var prefix = type.toString().toUpperCase() + " - WARNING <" + new Date().toLocaleTimeString() + "> "; console.warn(prefix + message); } } // <-- Message handling var extender = { command: function (name, args) { var cmd = { name: name, args: args }; $("textarea#observable").attr("command", JSON.stringify(cmd)); }, lastcommand: function () { return $("textarea#observable").attr("command"); }, option: function (option, val) { if (typeof option == "string") { this.command("option", [option, val]); } else { this.error("Please specify name and value as parameters."); } } }; var productionQueue = []; function attemptProduction() { if (!productionQueue || productionQueue.length == 0) { log('Attempted production, but queue was missing or empty. Exiting...'); return; } for (var i = 0; i < userContext.buildingsData.length; i++) { var b = userContext.buildingsData[i]; if (buildingProducing(b)) { log("Building " + b.symbol + " is busy."); continue; } if (buildingFinished(b)) { log("Building " + b.symbol + " finished production."); doFinishProduction(b.item_id, attemptProduction); return; } var element = getElement(b.symbol); if (element) { executeElement(element, attemptProduction); return; } } }; function getElement(buildingSymbol) { if (!productionQueue || productionQueue.length == 0) { log('Attempted to extract item from queue, but the production queue was missing or empty. Exiting...'); return null; } var element; for (var i = 0; i < productionQueue.length; i++) { if (productionQueue[i].activeBuildingPanel == buildingSymbol) { element = productionQueue[i]; break; } } if (!element) { log('No elements enqueued for building ' + buildingSymbol + '. Array size: ' + productionQueue.length); return null; } return element; }; function executeElement(element, callback) { var index = productionQueue.indexOf(element); log('Production of element ' + element.name + ' : ' + element.type + ' with index ' + index + ' initiated.'); if (element.type == "item") { userContext.recipeData = element.recipeData; userContext.activeBuildingPanel = element.activeBuildingPanel; doProduction(element.outputSymbol, element.recipeCategory, null, null, element.recipeName, callback); productionQueue.splice(index, 1); log('Production details: ' + element.name + ' at ' + element.activeBuildingPanel + ', ' + element.outputSymbol + ', ' + element.recipeCategory + ', ' + element.recipeName + ';'); } else { var buildingId = buildingBySymbol(element.activeBuildingPanel).id; applySelectedUpgrade({ building_id: buildingId, id: element.upgradeId, gold: 0, silver: 0 }, null, callback); productionQueue.splice(index, 1); log('Production details: ' + element.name + ' : ' + element.type + ' at ' + element.activeBuildingPanel + ', ' + element.symbol + ';'); } }; function buildingFinished(b) { return b.producing_archetype_id && !b.build_remaining; } function buildingProducing(b) { return b.producing_archetype_id && b.build_remaining; } var bruteForceTimeout; function bruteForce(enabled) { if (typeof enabled == "boolean" && !enabled) { bruteForceTimeout = clearTimeout(bruteForceTimeout); log("Bruting terminated."); return; } if (extender_bruteWounds && extender_bruteWounds == 0) { warn("Bruting is disabled. Please set number of max wounds from options to continue."); bruteForce(false); } var s = userContext.setSwornSword; if (!s) { error("Bruting failed, no sworn sword set."); bruteForce(false); return; } if (s.damage < extender_bruteWounds) { doAdventure("", s.modifier, false, function () { bruteForce(true); }); return; } if (extender_bruteSwitchOff) { warn("Sworn sword recieved " + extender_bruteWounds + " wounds! Brute timer will self terminate."); bruteForce(false); return; } // Add a minute to the cooldown, and then multiply by wounds var interval = extender_bruteWounds * (s.damage_cooldown + 60); warn("Sworn sword recieved " + extender_bruteWounds + " wounds! " + "Brute timer will self adjust. Wait " + interval + " seconds."); bruteForceTimeout = setTimeout(function () { bruteForce(true); }, interval * 1000); } function increment(me) { var opt = $(me); var min = parseInt(opt.attr("min")); var max = parseInt(opt.attr("max")); var step = parseInt(opt.attr("step")); var val = parseInt(opt.text()); if (isNaN(min) || isNaN(max) || isNaN(step) || isNaN(val)) { return; } var newVal = val + step > max ? min : val + step; opt.text(newVal); }; function check(me) { $(me).toggleClass('checked'); }; function bruteSwitchToggle(me) { var bSwitch = $(me).find("a.btngold"); bSwitch.text() == "switch off" ? bSwitch.text("adjust") : bSwitch.text("switch off"); }; log("Auxiliary injected..", "auxiliary");