Travian - get resources of other villages

By Waterwolf Last update Feb 9, 2010 — Installed 6,485 times.
// ==UserScript==
// @name           Travian - get resources of other villages
// @namespace      http://userscripts.org/users/72477
// @description    Gets resource amount of other villages
// @include        http://*.travian.*
// @version        0.03
// ==/UserScript==

var updateClicks = GM_getValue("resUpdateDefault");
var firstRun = false;

function firstRunn() {
firstRun = true;
var askValue = window.prompt("Hello! Please give me refresh rate of 'Travian - get resources of other villages'- script. Eg. if you say 10, i'm going to update resources every 10th time you go to new page in travian. Please give an integer", "20");

if (isNaN(askValue)) {
alert("Integer please");
askIt();
return false;
}
else if (askValue == null || askValue == "") {
alert("Next time then :)");
}
else {
GM_setValue("resUpdateDefault", askValue);
GM_setValue("resUpdateCount", askValue);
firstRun = false;
}

}

if (updateClicks == undefined) {
firstRunn();
}

function AddResAmount() {

var villages = document.getElementById("vlist").getElementsByTagName("tbody")[0].getElementsByTagName("tr");

var villagestext = document.getElementById("vlist").getElementsByTagName("thead")[0].getElementsByTagName("tr")[0];

var wholenew = document.createElement("td");
var tillNewRefresh = document.createElement("span");
tillNewRefresh.innerHTML = "Resources in other villages:";

wholenew.appendChild(tillNewRefresh);
villagestext.appendChild(wholenew);

var urlBase = location.href.substring(0, location.href.indexOf('/', 14)) + "/";

var forCache = "";

for (vn in villages)
{ 
  var getTds = villages[vn].getElementsByTagName("td");
  var getIt = getTds[1].getElementsByTagName("a")[0].getAttribute("href");
  getA = getIt;
  
  var test = GET(getA);
  var temp = document.createElement("span");
  temp.innerHTML = test;
  
  var aRes = new Array();
  
  for (var res = 4; res > 0; res--) {
  
  var haha = fastEval('//td[@id="l' + res + '"]', temp).snapshotItem(0);
  
  aRes[res] = haha.innerHTML;
  
  if (res == 1) {
  var cropIncome = haha.getAttribute("title");
  var color = "red";
  if (cropIncome >= 0) {
  color = "green";
  cropIncome = "+" + cropIncome;
  }
  }
  
  }
  
  var newTD = document.createElement("td");
  var allhaha;
  allhaha = "<img class='r1' src='img/x.gif'>" + aRes[4];
  allhaha += "<img class='r2' src='img/x.gif'>" + aRes[3];
  allhaha += "<img class='r3' src='img/x.gif'>" + aRes[2];
  allhaha += "<img class='r4' src='img/x.gif'>" + aRes[1] + " <span style='color: " + color + ";'>" + cropIncome + "</span>";
  forCache += allhaha + "|";
  newTD.innerHTML = allhaha;
  villages[vn].appendChild(newTD);
}

GM_setValue("resUpdateCount", updateClicks);
GM_setValue("resUpdateCache", forCache);

}

function updatee() {
GM_setValue("resUpdateCount", "0");
window.location.reload(true);
}

function cacheResAmount() {
var villages = document.getElementById("vlist").getElementsByTagName("tbody")[0].getElementsByTagName("tr");
var villagestext = document.getElementById("vlist").getElementsByTagName("thead")[0].getElementsByTagName("tr")[0];

var wholenew = document.createElement("td");
var tillNewRefresh = document.createElement("a");
tillNewRefresh.setAttribute("href", "#");
tillNewRefresh.innerHTML = "Refresh now (" + GM_getValue("resUpdateCount") + ")";

var tillNewRefresh2 = document.createElement("a");
tillNewRefresh2.setAttribute("href", "#");
tillNewRefresh2.innerHTML = " Edit rate";

tillNewRefresh.addEventListener("click", updatee, true); 
tillNewRefresh2.addEventListener("click", firstRunn, true); 

wholenew.appendChild(tillNewRefresh);
wholenew.appendChild(tillNewRefresh2);
villagestext.appendChild(wholenew);

var urlBase = location.href.substring(0, location.href.indexOf('/', 14)) + "/";

var forCache = GM_getValue("resUpdateCache").split("|");

for (vn in villages)
{ 
  var newTD = document.createElement("td");
  newTD.innerHTML = forCache[vn];
  villages[vn].appendChild(newTD);
}
}
if (firstRun == false) {

var val = GM_getValue("resUpdateCount");
if (val != undefined) {
if (val == "0") {
AddResAmount();
}
else {
GM_setValue("resUpdateCount", val - 1);
cacheResAmount();
}
}
else {
AddResAmount();
}

}

function GET(url){
  var xhttp = new XMLHttpRequest();
  xhttp.open("GET", url, false);
  xhttp.send("");
  respText=xhttp.responseText;
  return respText;
}

function fastEval(xpath, context){
  return document.evaluate(xpath, context, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
}