您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Attempts to automate all the routine tasks in ikariam, like transporting wine
当前为
- // ==UserScript==
- // @name Ikariam Automation
- // @namespace Danielv123
- // @version 1.1
- // @description Attempts to automate all the routine tasks in ikariam, like transporting wine
- // @author Danielv123
- // @match http*://*.ikariam.gameforge.com/*
- // @grant unsafeWindow
- // ==/UserScript==
- function main () {
- // Ikariam user tools
- // SEND CTs ---------------------------------------------------------
- // check if the CT option exists in message dialog
- // document.querySelector("option[value='77']").click();
- // Send the message
- // document.querySelector("#js_messageSubmitButton").click()
- // SEND RESOURCES ---------------------------------------------------
- window.sendAlot = function(townNumber, townFromNumber, resource, amount) {
- localStorage.resource = resource;
- localStorage.amount = amount;
- localStorage.destination = townNumber;
- localStorage.origin = townFromNumber;
- asdadas();
- //sendResources(townNumber, resource, window.asdadas);
- };
- window.asdadas = function(){
- if(localStorage.amount < 0) {
- transporterStatus = "Nothing to do, all resources sent";
- }
- if(document.querySelector("#js_GlobalMenu_freeTransporters").innerHTML < 2) {
- transporterStatus = "Waiting for free cargoships";
- }
- if(localStorage.paused == "true"){
- transporterStatus = "Script is paused";
- }
- if(localStorage.resource && localStorage.amount > 0) {
- //localStorage.amount -= 5000;
- sendResources(localStorage.destination, localStorage.origin, localStorage.resource);
- }
- };
- // send 5000 resources from one town to another
- window.sendResources = function(townNumber, fromTownNumber, resource, callback) {
- if(localStorage.paused == "true" /*|| Number(document.querySelector("#js_GlobalMenu_maxActionPoints").innerHTML) < 1*/ || document.querySelector("#js_GlobalMenu_freeTransporters").innerHTML < 2/* || document.querySelector("#js_CityPosition1PortCountdownText").innerHTML*/) {
- // if we have no action points OR the city is currently loading some ships, wait and do nothing.
- //setTimeout(function(){window.sendResources(townNumber,fromTownNumber,resource,callback);}, 10000);
- // NO, STOP IT, DON'T!
- // we already have a loop that keeps retrying. Relax.
- } else {
- // if sending to the same town, STOP IT. ITS NOT FUNNY.
- if(townNumber == fromTownNumber){
- throw "ERROR sending to same town? Not on my watch!";
- }
- // correct for the fact that the dock GUI does not show the currently selected town
- if(townNumber > fromTownNumber){
- townNumber--;
- }
- transporterStatus = "Going to town " + fromTownNumber + " to send resources";
- gotoTown(fromTownNumber, function(){
- if(Number(document.querySelector("#js_GlobalMenu_maxActionPoints").innerHTML) > 0){
- // click dock on the left (gotta have dock there, no shipyardy stuff)
- document.querySelector("#js_CityPosition1Link").click();
- setTimeout(function(){
- // get list if town sending targets from dock and click one
- document.querySelectorAll(".cities.clearfix > li > a")[townNumber].click();
- setTimeout(function(){
- // either pick totalShips/actionPoints or 20, whatever is smaller.
- let numberOfShips = Math.min(Math.floor(document.querySelector("#js_GlobalMenu_freeTransporters").innerHTML / Number(document.querySelector("#js_GlobalMenu_maxActionPoints").innerHTML)), 20);
- if(document.querySelector("#js_GlobalMenu_freeTransporters").innerHTML >= numberOfShips){
- // find the right resource selector slider and set it to 5k, then click the send button
- let resourceID = "#textfield_" + resource;
- // Set how much we send. Pick whatever is smaller of localStorage and what we can send right now.
- document.querySelector(resourceID).value = Math.min(500*numberOfShips, localStorage.amount);
- let sentAmount = Math.min(500*numberOfShips, localStorage.amount);
- document.querySelector("#submit").click();
- setTimeout(function(){
- // close window when stuff is sent
- transporterStatus = "Sent " + sentAmount + " " + resource;
- localStorage.amount -= sentAmount;
- if(callback && typeof callback == "function"){
- setTimeout(callback, 1000);
- }
- document.querySelector("div.close").click();
- }, 2000);
- } else {
- transporterStatus = "Not enough ships";
- }
- },2000);
- },2000);
- } else {
- transporterStatus = "No action points left";
- }
- }); // end gototown callback
- }
- };
- window.gotoTown = function(townNumber, callback) {
- console.log("going to town " +townNumber);
- document.querySelector("#js_citySelectContainer > span").click();
- setTimeout(function(){
- try{
- document.querySelectorAll("#dropDown_js_citySelectContainer > div.bg > ul > li > a")[townNumber].click();
- } catch (e){}
- setTimeout(callback, 1000);
- },1000);
- };
- window.getTownResources = function(townNumber, callback) {
- var checkResources = function() {
- console.log(typeof callback);
- var resources = {};
- resources.wood = stringToNumber(document.querySelector("#resources_wood > span").innerHTML);
- resources.wine = stringToNumber(document.querySelector("#resources_wine > span").innerHTML);
- resources.marble = stringToNumber(document.querySelector("#resources_marble > span").innerHTML);
- resources.glass = stringToNumber(document.querySelector("#resources_glass > span").innerHTML);
- resources.sulfur = stringToNumber(document.querySelector("#resources_sulfur > span").innerHTML);
- callback(resources);
- };
- gotoTown(townNumber, checkResources);
- };
- window.stringToNumber = function(str) {
- return parseFloat(str.replace(',','').replace(' ',''));
- };
- setInterval(asdadas, 10000);
- // update userscript status box
- var transporterStatus;
- setInterval(function(){
- $("#transporterMaterial")[0].innerHTML = "Material: " + localStorage.resource;
- $("#transporterAmount")[0].innerHTML = "Amount: " + localStorage.amount;
- // transporterStatus is a global variable that is assigned throughout the functions to give an approximate as to what the script is doing
- $("#transporterStatus")[0].innerHTML = transporterStatus;
- },1000);
- // create form to send resources
- window.createForm = function (){
- let HTML = '<div><span>From: </span><select id="transporterSendFromTown">';
- let townList = document.querySelector("#dropDown_js_citySelectContainer > div.bg > ul").childNodes;
- for(let i = 0; i < townList.length; i++){
- HTML += '<option value="'+i+'">'+townList[i].childNodes[0].innerHTML+'</option>';
- }
- HTML += '</select></div>';
- HTML += '<div><span>Destination: </span><select id="transporterSendDestination">';
- for(let i = 0; i < townList.length; i++){
- HTML += '<option value="'+i+'">'+townList[i].childNodes[0].innerHTML+'</option>';
- }
- HTML += '</select></div>';
- HTML += '<div><span>Resource: </span><select id="transporterSendResource">';
- HTML += '<option value="wood">Wood</option>';
- HTML += '<option value="wine">Wine</option>';
- HTML += '<option value="marble">Marble</option>';
- HTML += '<option value="glass">Crystal</option>';
- HTML += '<option value="sulfur">Sulfur</option>';
- HTML += '</select></div>';
- HTML += '<div><span>Amount: </span><input id="transporterSendAmount" type="number"></div>';
- HTML += '<button onclick="sendResourcesFromForm();">Send resources</button>';
- return HTML;
- };
- window.sendResourcesDialog = function () {
- // use ikariams built in fancy dialog box for our dialog for extra fancyness
- ikariam.createPopup("ikaMationTransporterDialog","Mass transport resources",createForm(),"???","class");
- };
- window.sendResourcesFromForm = function () {
- let destination = document.querySelector("#transporterSendDestination").value;
- let fromTown = document.querySelector("#transporterSendFromTown").value;
- let resource = document.querySelector("#transporterSendResource").value;
- let amount = document.querySelector("#transporterSendAmount").value;
- sendAlot(destination, fromTown, resource, amount);
- document.querySelector("#ikaMationTransporterDialog").outerHTML = "";
- };
- }
- $('body').append("<div id='userscript' style='position:fixed;background-color:white;z-index:100000000;bottom:0px;right:0px;height:150px;width:200px;'></div>");
- $("#userscript").append("<h2 style='font-size:20px;font-weight:bold;'>IkaMation</h2><button onclick='localStorage.paused = localStorage.paused == \"false\"'>Pause/resume script</button><p id='transporterMaterial'>Material: </p><p id='transporterAmount'>Amount:</p><p id='transporterStatus'></p>");
- $("#userscript").append('<button onclick="sendResourcesDialog();">Mass send resources</button>');
- var script = document.createElement('script');
- script.appendChild(document.createTextNode('('+ main +')();'));
- (document.body || document.head || document.documentElement).appendChild(script);
- /*
- let infoBox = document.createElement("div");
- infoBox.appendChild(document.createTextNode("<div id='userscript' style='position:fixed;background-color:white;z-index:100000000;bottom:0px;right:0px;height:100px;width:200px;'></div>"));
- (document.body|| document.documentElement).appendChild(infoBox);
- */