// ==UserScript==
// @name Ikariam Auto Builder HACK
// @namespace http://google.com/
// @version 3.0.1
// @description Ikariam Auto Builder Hack lets you add your building to an upgrading queue (YES! NOW YOU CAN DO IT FOR FREE!).
// @include http://*.ikariam.gameforge.com/*
// @copyright 2012+, You\
// @require http://code.jquery.com/jquery-latest.min.js
// ==/UserScript==
var updateInterval = 600000; //In ms (1000 ms = 1s). How often the upgrader will make checks.
var timerUpdateInterval = 1000; //In ms (1000 ms = 1s). This indicates how often will be the timer refreshed. RECOMMENDED: 1000
//TRANSLATIONS//
var addToQueueText = "Add to queue"; //This appears on the button
var queueEmptyText = "The building queue is empty in the current city"; //This appears when the queue is empty
var queuePrefix = "IAcity_"; //do NOT change this!
var separator = ";"; ////do NOT change this!
function callFunc(f,params){
f.apply(this, params);
}
unsafeWindow.doAfterLoading = function doAfterLoading(f){
if($("div#loadingPreview").css("display") == "none"){
var params = Array.prototype.slice.call(arguments);
params.shift();
alert(params[0]);
f.apply(this,params);
}
else setTimeout(callFunc,100, doAfterLoading, arguments);
}
function clickCityInDropDown(id){
$("div#dropDown_js_citySelectContainer div.bg ul li")[id-1].click();
}
unsafeWindow.goToCity = function(id){
$("div#js_citySelectContainer span").click();
setTimeout(clickCityInDropDown, 100, id);
}
unsafeWindow.getCityName = function(){
return $("div#js_citySelectContainer span a").text();
}
unsafeWindow.getQueue = function getQueue(){
var raw = getValue(queuePrefix + getCityName());
if(raw === undefined) return [];
return raw.split(separator);
}
unsafeWindow.addToQueue = function addToQueue(id){
var before = getValue(queuePrefix + getCityName());
if(before === undefined){
setValue(queuePrefix + getCityName(), id);
}
else setValue(queuePrefix + getCityName(), before + separator + id);
updateQueueView();
}
unsafeWindow.removeFromQueue = function removeFromQueue(number){
var before = getValue(queuePrefix + getCityName());
if(before !== undefined){
var after = "";
var items = before.split(separator);
for(var i = 0; i < items.length; i++){
if(i != number) after = after + items[i] + separator;
}
after = after.substring(0,after.length-1);
if(after == ""){
deleteValue(queuePrefix + getCityName());
}
else {
setValue(queuePrefix + getCityName(), after);
}
}
updateQueueView();
}
function upgradeBuilding(id, cityCount){
if($("div.accordionContent").length == 0){
setTimeout(upgradeBuilding, 100, id, cityCount);
return;
}
if($("div#buildingUpgrade ul.resources li.red").length == 0){
$("ul.actions li.upgrade a").click();
removeFromQueue(0);
setTimeout(closeWindow, 100, id, cityCount, true);
}
else setTimeout(closeWindow, 100, id, cityCount, false);
}
function closeWindow(id, cityCount, waitUntilUpgradeStarts){
if(waitUntilUpgradeStarts){
if($("div#upgradeProgress").length == 0){
setTimeout(closeWindow,100,id,cityCount, waitUntilUpgradeStarts);
return;
}
else {
}
}
//alert("Upgrade started! Upgrade bars: " + $("div#upgradeProgress").length);
$("div.close").click();
//alert("Closed! Next ID = " + (id+1) + "; cityCount = " + cityCount);
if(id + 1 <= cityCount) {
console.log("Next city ID = " + (id+1) +". Calling processCity()!");
setTimeout(processCity, 1000, id+1, cityCount);
}
else location.reload();
}
function doWorkInCity(id, cityCount){
if($("div#loadingPreview").css("display") != "none") {
setTimeout(doWorkInCity, 100, id, cityCount);
return;
}
var q = getQueue();
if(q.length != 0){
if($("div.timetofinish").length == 0){
openBuilding(q[0]);
setTimeout(upgradeBuilding, 100, id, cityCount);
}
else {
if(id + 1 <= cityCount) setTimeout(processCity, 100, id+1, cityCount);
else location.reload();
}
}
else if(id + 1 <= cityCount) setTimeout(processCity, 100, id+1, cityCount);
else location.reload();
}
unsafeWindow.processCity = function processCity(id, cityCount){
if($("div.accordionContent").length != 0){
setTimeout(processCity, 100, id, cityCount);
return;
}
goToCity(id);
setTimeout(doWorkInCity, 1000, id, cityCount);
}
unsafeWindow.getBuildingTitle = function getBuildingName(id){
return $("a#js_CityPosition" + id + "Link").attr('title');
}
unsafeWindow.updateQueueView = function(){
$("div#IA_queue").text("");
var queue = getQueue();
if(queue.length != 0){
for(var i = 0; i < queue.length; i++){
$("div#IA_queue").append('<p align="center" style="cursor:default;">' + getBuildingTitle(queue[i]) + '<a onclick="removeFromQueue('+i+')" style="cursor:pointer;">✖</a></p>');
}
}
else $("div#IA_queue").append('<p align="center">' + queueEmptyText + '</p>');
//$("div#IA_queue").css("text-align", "center");
//$("div#IA_queue").prepend('<img src="http://simpleicon.com/wp-content/uploads/refresh.png" alt="Refresh queue" style="cursor:pointer; height: 1em; " onclick="updateQueueView()">');
}
unsafeWindow.update = function update(){
setValue("IA_lastUpdate", Date.now());
var cityCount = getCityCount();
processCity(1, cityCount);
}
unsafeWindow.openBuilding = function openBuilding(id){
$("a#js_CityPosition" + id + "Link").click();
}
unsafeWindow.getCityCount = function getCityCount(){
return $("li.ownCity").length;
}
setValue = function setValue(key,value) {
return localStorage[key]=value;
}
getValue = function getValue(key,def) {
return localStorage[key] || def;
}
deleteValue = function deleteValue(key) {
return delete localStorage[key];
}
/*if(buildingUpgradeElem !== undefined) {
if($("div#IAButtonContainer").length == 0) {
buildingUpgradeElement.append('<div style="margin: 20px;" id="IAButtonContainer"><a class="button" id="IAButton" onclick="addToQueue('+ buildingId + ');">' + addToQueueText + '</a></div>');
}
}*/ //Repeat this to restore add to queue button after some actions. NOT recommended because of possibly huge CPU usage. Just re-enter the building except.
start();
function timerUpdateFunc( ){
var time = parseInt(getValue("IA_lastUpdate")) + parseInt(updateInterval) - parseInt(Date.now());
time = Math.floor(time / 1000); //seconds
var minutes = Math.floor(time / 60);
time -= minutes * 60;
if (time < 10) time = "0"+time; //replace 2:9 with 2:09
$("li#IA_timer").text(minutes + ":" + time);
if(minutes < 0){
update();
}
}
function addButton(buildingId){
if($("div.accordionContent").length != 0 && $("div#IAButtonContainer").length == 0) $("div#buildingUpgrade").append('<div style="margin: 20px;" id="IAButtonContainer"><a class="button" id="IAButton" onclick="addToQueue('+ buildingId + ');">' + addToQueueText + '</a></div>');
else setTimeout(addButton, 100, buildingId);
}
function start(){
if(getValue("IA_lastUpdate") === undefined) {
update();
}
$("a[id^='js_CityPosition']").click(function(){
var htmlID = $(this).attr('id');
var id = htmlID.split("Link")[0].substring(15,htmlID.length + 1 - 4);
setTimeout(addButton, 100, id);
});
$("head").append("<style>div.addToQueueCityButton {z-index: 9000; cursor: pointer; position: absolute;right: 0px;bottom: 0px;border-top-left-radius: 3px;border-top-right-radius: 3px;border-bottom-left-radius: 3px;border-bottom-right-radius: 3px; background-color: rgba(200,200,200, 1); -webkit-transition: background-color 300ms linear;-moz-transition: background-color 300ms linear;-o-transition: background-color 300ms linear;-ms-transition: background-color 300ms linear;transition: background-color 300ms linear;} div.addToQueueCityButton:hover { background-color: rgba(200,100,100,1);}</style>");
$("div.city_water_bottom").append('<div id="IA_queue" style="background-color: #DDD; width: 300px; position: absolute; left: 810px;"></div>');
$("DIV#GF_toolbar ul").append('<li id="IA_timer"></li> <img src="http://simpleicon.com/wp-content/uploads/refresh.png" style="height: 1em; cursor:pointer;" onclick="update();" >');
updateQueueView();
setInterval(updateQueueView,1000);
timerUpdateFunc();
setInterval(timerUpdateFunc, timerUpdateInterval);
}