返回首頁 

Ikariam Automation

Attempts to automate all the routine tasks in ikariam, like transporting wine


Install this script?
// ==UserScript==// @name         Ikariam Automation// @namespace    Danielv123// @version      1.2.2// @description  Attempts to automate all the routine tasks in ikariam, like transporting wine// @author       Danielv123// @match        *://*.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();// OR document.querySelector(".message_subject")[0].value = 77// Send the message// document.querySelector("#js_messag###bmitButton").click()window.sendCulturalTreaty = function(callback, returnN) {callback = callback || function(x){};// if 77 (send cultural treaty) is an optionif(document.querySelector("option[value='77']")){// Select cultural treatydocument.querySelector(".message_subject")[0].value = 77;// click send buttondocument.querySelector("#js_messag###bmitButton").click();callback(true, returnN);} else {if(document.querySelector("#js_backlinkButton")){document.querySelector("#js_backlinkButton").click();}callback(false, returnN);}};window.sendManyCulturalTreaties = function(numberOfTreaties){// get array of all players in current high score screenlet players = [].slice.call(document.querySelectorAll(".table01.highscore tbody tr"), 1);// let notPicked = true;let luckyPlayer = players[Math.floor(Math.random()*players.length)];/*let i = 0;while(notPicked){// players[i]}*/// select message, send and then repeat if we got more stuff to sendsetTimeout(function(){sendCulturalTreaty(function(status, returnN){if(status){returnN -= 1;}if(returnN > 0){setTimeout(function(){sendManyCulturalTreaties(returnN);}, 2000);}}, numberOfTreaties);},2000);};// 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 anotherwindow.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 townif(Number(townNumber) > Number(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) or fixed now?if(document.querySelector("#position1").className.includes("port")){document.querySelector("#js_CityPosition1Link").click();} else if (document.querySelector("#position2").className.includes("port")){document.querySelector("#js_CityPosition2Link").click();} else {transporterStatus = "No dock, what do you think you are doing???";}setTimeout(function(){// get list if town sending targets from dock and click onedocument.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 buttonlet 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 senttransporterStatus = "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 boxvar 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 resourceswindow.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 fancynessikariam.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/r###me 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);*/