userscripts/grepolis.user.js

147 lines
4.3 KiB
JavaScript

// ==UserScript==
// @name Grepolis Village Farmer
// @description Farms villages every 5minutes
//
// @author Jan Bader <jan@javil.eu>
// @downloadURL http://git.javil.eu/jan/userscripts/raw/master/grepolis.user.js
//
// @license GPLv3 - http://www.gnu.org/licenses/gpl-3.0.txt
// @copyright Copyright (C) 2014, by Jan Bader <jan@javil.eu>
//
// @match http://*.grepolis.com/game/*
//
// @version 1.0.44
// @updateURL http://git.javil.eu/jan/userscripts/raw/master/grepolis.user.js
// ==/UserScript==
(function() {
console.logCopy = console.log.bind(console);
console.log = function() {
var date = new Date(); // Timestamp to prepend
var timestamp = new Date(date.getTime() - (date.getTimezoneOffset() * 60000)).toJSON();
if (arguments.length) {
var args = Array.prototype.slice.call(arguments, 0);
// If there is a format string then... it must be a string
if (typeof arguments[0] === "string") {
args[0] = "%s: " + arguments[0];
args.splice(1, 0, timestamp);
this.logCopy.apply(this, args);
} else {
this.logCopy(timestamp, args);
}
}
};
lastAmounts = "";
console.log("Initializing...");
windows = {};
farm_ids = [1225, 1226, 1229, 1230, 1231];
farm_ids.forEach(function(xFarmId) {
console.log("Setting timer to 5s for Farm " + xFarmId);
setTimeout(getWaresTick(xFarmId), 5000);
});
var logWindow = new GPWindow(-1, null);
logWindow.createWindow();
logWindowElement = $(logWindow.getElement());
var logWindowWrapper = logWindowElement.parent().parent();
logWindowWrapper.css({
"position": "absolute",
"z-index": 999999999,
"right": "16px",
"bottom": 0,
"width": "300px",
"height": "300px",
"align": "left",
"left": "auto",
"top": "auto"
});
function log() {
console.log(arguments);
var date = new Date(); // Timestamp to prepend
var timestamp = new Date(date.getTime() - (date.getTimezoneOffset() * 60000)).toJSON();
logWindowElement.append(timestamp + ": " + logWindowElement + "<br />");
logWindowElement.scrollTop(logWindowElement[0].scrollHeight);
}
setTimeout(getWaresTick, 5000);
function getWaresTick(xFarmId) {
return function() {
var timeout = 60000;
try {
var amounts = $.map($(".indicator .amount"),function(v){return $(v).text()}).join(", ");
if(amounts != lastAmounts) {
log(amounts);
lastAmounts = amounts;
}
var windowId = windows[xFarmId];
if(windowId == undefined){
var wnd = GPWindowMgr.Create(
GPWindowMgr.TYPE_FARM_TOWN, '',
{'action': "claim_info"},
xFarmId);
windows[xFarmId] = wnd.getID();
timeout = 500;
return;
}
var wnd = GPWindowMgr.getWindowById(windowId);
if(wnd == undefined){
windows[xFarmId] = undefined;
timeout = 50;
return;
}
var wndElement = wnd.getElement();
if(wndElement == undefined){
windows[xFarmId] = undefined;
try {
wnd.close();
} catch(e) {
}
timeout = 50;
return;
}
var btn = $(wndElement).find(".farm_claim_box .farm_claim_res0 + div + a");
var mood = parseFloat($(wndElement).find('#mood1').siblings().last().text());
if(btn.hasClass("farm_claim_button_inactive")) {
var ts = $(wndElement).find(".farm_next_claim_time").text();
if(ts != "bereit") {
var minutes = ts.substring(2,4);
var seconds = minutes * 60 + ts.substring(5,7) * 1;
log("Farm " + xFarmId + " not ready, trying again in " + ts);
wnd.close();
timeout = seconds * 1000 + 1000;
return;
}
}
getWaresFromFarm(btn[0], mood, xFarmId);
} finally {
setTimeout(getWaresTick(xFarmId), timeout);
}
}
}
function getWaresFromFarm(xButton, xMood, xFarmId) {
if(xMood - 6 > 80) {
log("Plündere " + xFarmId + " @ Mood: " + xMood);
w(xButton).call('claimLoad', xFarmId.toString(), 'double', 300);
} else {
log("Fordere " + xFarmId + " @ Mood: " + xMood);
w(xButton).call('claimLoad', xFarmId.toString(), 'normal', 300);
}
}
function buttonIsInitialized() {
return typeof(btn) != "undefined" && btn != null && btn[0] != null;
}
})()