// ==UserScript== // @name Grepolis Village Farmer // @description Farms villages every 5minutes // // @author Jan Bader // @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 // // @match http://*.grepolis.com/game/* // // @version 1.1.51 // @updateURL http://git.javil.eu/jan/userscripts/raw/master/grepolis.user.js // ==/UserScript== (function() { farmDuration = 300; lastAmounts = ""; console.log("Initializing..."); windows = {}; durations = {}; switch(location.host.substring(0,4)) { case "de63": farm_ids = { // Insel 0 83792: [20468, 20470, 20471, 20472], 84064: [20466, 20467, 20469], // Insel 1 85523: [20489, 20490, 20492, 20496, 20491, 20495, 20494], // Insel 2 74298: [19577, 19579, 19583, 19584, 19582, 19581, 19580], } break; case "de67": farm_ids = { // Insel 0 4809: [], // Insel 1 34064: [], } break; } setTimeout(function() { var logGPWindow = new GPWindow(99999, null); logGPWindow.createWindow(); logWindowElement = $(logGPWindow.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" }); logWindowElement.empty(); logWindowElement.append('
'); logWindow = $("#logwindow"); timerWindow = $("#timerwindow"); var s = document.createElement("script"); s.type = "text/javascript"; s.innerHTML = 'function j_countdown(t, id){' +'var h = Math.floor(t/(60*60));' +'var m = Math.floor(t/60) %60;' +'var s = Math.floor(t %60);' +'var strZeit = "";' +'if(h>0) strZeit = strZeit + h + ":";' +'strZeit = strZeit + m + ":" + s;' +'durations[id]=durations[id]-1;' +'window.setTimeout(\'j_countdown(\'+durations[id]+\',\\\'\'+id+\'\\\')\',1000);' +'document.getElementById(id).innerHTML = strZeit;}'; document.getElementsByTagName("head")[0].appendChild(s); var townCount = 0; for(var town_id in farm_ids) { console.log("prepare town " + town_id); townCount++; getFarmsFor(town_id, townCount); } setTimeout(function() { for(var town_id in farm_ids) { var town_countdown = document.createElement("span"); town_countdown.textContent = "" + ITowns.getTown(town_id).name + ":"; timerWindow.append(town_countdown); farm_ids[town_id].forEach(function(xFarmId) { var tmout = 20000 + rand(10); setTimeout(getWaresTick(town_id, xFarmId), tmout); var tmoutId = 'farm-' + xFarmId $(town_countdown).append(', '); }); $(town_countdown).append('
'); } }, townCount * 3000); $("#gpwnd_" + logGPWindow.getID()).parent().parent().find(".ui-dialog-titlebar").empty().append("" + GM_info.script.version); var choose = $("#choosefarmduration")[0]; choose.onchange = function() { farmDuration = this.value; } }, 15000); function getFarmsFor(xTownId, xTownCount) { console.log(xTownCount + ") prepare get farms for town " + xTownId); setTimeout( function() { console.log(xTownCount + ") get farms for town " + xTownId); HelperTown.townSwitch(xTownId); HelperTown.handleInfoWindowJumpToTownClick(); var town = ITowns.getTown(xTownId); WMap.mapJump({id:xTownId, ix:town.getIslandCoordinateX(), iy:town.getIslandCoordinateY()}); setTimeout( function() { console.log("getting farms for town " + xTownId); var farmtowns = $(".farmtown_owned_on_same_island"); $.each(farmtowns, function(f, farmtown) { var farmtownId = farmtown["id"].split("_")[2]; console.log("got farm " + farmtownId + " for town " + xTownId); farm_ids[xTownId].push(+farmtownId); }); }, 1800); }, xTownCount*2200); } function log(xText) { var date = new Date(); // Timestamp to prepend var timestamp = new Date(date.getTime() - (date.getTimezoneOffset() * 60000)).toJSON(); logWindow.append('' + xText + "
"); logWindow.scrollTop(logWindow[0].scrollHeight); } function rand(min, max) { return Math.floor((Math.random() * (max-min) * 1000) + min * 1000); } function rand(max) { return Math.floor((Math.random() * max * 1000)); } function getWaresTick(xTownId, xFarmId) { return function() { var timeout = 60000; try { // var amounts = $.map($(".indicator .amount"),function(v){return $(v).text()}).join(", "); // if(amounts != lastAmounts) { // lastAmounts = amounts; // } var windowId = windows[xFarmId]; if(windowId == undefined){ if(farmDuration < 300) return; 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 = rand(20); return; } var wndElement = wnd.getElement(); if(wndElement == undefined){ windows[xFarmId] = undefined; try { wnd.close(); } catch(e) { } timeout = rand(20); return; } var mood = parseFloat($(wndElement).find('#mood1').siblings().last().text()); var ts = $(wndElement).find(".farm_next_claim_time").text(); if(ts != "bereit") { var hours = ts.substring(0,1); var minutes = ts.substring(2,4); var seconds = hours * 60 * 60 + minutes * 60 + ts.substring(5,7) * 1; wnd.close(); timeout = seconds * 1000 + 1000; return; } var loots = $(wndElement).find("#farmtown_loot").children().last().text().split('/'); var loot_current = parseFloat(loots[0]); var loot_maximum = parseFloat(loots[1]); var count_per_loot = parseFloat($(wndElement).find(".farm_claim_res0").text()); if(loot_current + count_per_loot*3 > loot_maximum) { wnd.close(); timeout = 15 * 60 * 1000; return; } timeout = getWaresFromFarm(wnd, mood, xTownId, xFarmId) * 1000 + rand(5); } finally { durations["farm-" + xFarmId] = timeout / 1000; setTimeout(getWaresTick(xTownId, xFarmId), timeout); } } } function getWaresFromFarm(xWindow, xMood, xTownId, xFarmId) { if(Game.town_id != xTownId) { Game.townId = xTownId; } var town = ITowns.getTown(xTownId); if(town.getCastedPower("forced_loyalty")) { // log("Plündere " + xFarmId + " @ forced_loyalty "); xWindow.call('claimLoad', xFarmId.toString(), 'double', farmDuration); } else if(xMood-6 > 80) { // log("Plündere " + xFarmId + " @ Mood: " + xMood); xWindow.call('claimLoad', xFarmId.toString(), 'double', 300); return 300; } else { // log("Fordere " + xFarmId + " @ Mood: " + xMood); xWindow.call('claimLoad', xFarmId.toString(), 'normal', farmDuration); } return farmDuration; } function buttonIsInitialized() { return typeof(btn) != "undefined" && btn != null && btn[0] != null; } function getOwnedFarms() { var ownedFarmIds = []; var ownedFarms = $(".farmtown_owned "); for(var i = 0; i < ownedFarms.length; i++) { var farmId = ownedFarms[i]['id']; farmId = farmId.split('_')[2]; ownedFarmIds.push(farmId); } return ownedFarmIds; } function getOwnedCities() { $('.js-button-caption').click(); var cities = $('.town_group_town'); } })()