Travian: Ally and NAP marker

By Miklos Last update Oct 28, 2007 — Installed 57,619 times.
// ==UserScript==
// @name           Travian: Ally and NAP marker
// @namespace      http://users.hszk.bme.hu/~am703
// @description    Shows your allies and NAPs with different color on the map
// @include        http://*.travian.*/karte.php*
// @include        http://*.travian.*/allianz.php
// @include        http://*.travian.*/allianz.php?aid=*
// ==/UserScript==


//constats for xpath
var Snapshot = XPathResult.ORDERED_NODE_SNAPSHOT_TYPE;
var First = XPathResult.FIRST_ORDERED_NODE_TYPE;

//0: időzítést segítő, nehogy kétszer híodjon cserebere, 
//1: éppen hol tartunk szövi keresésben
//2: server namespace
var konst = [false, 1, ''];
konst[2] = location.host;

//main part
if(location.href.indexOf('karte.php') != -1){
  cserebere();
  document.getElementById('map_content').addEventListener("DOMNodeRemoved", visszahiv, true);
}
else if(location.href.indexOf('allianz.php') != -1 && GM_getValue('auto3704', true)){
  var kekkep = document.evaluate('//img[@title="online"]', document, null, First, null);
  if(kekkep.singleNodeValue){
    klankeres();
  }
}

//klánoldalon ally és nap kereső
function klankeres(){
  var klanleirok = document.evaluate('//td[@class="slr3"]', document, null, Snapshot, null);
  for(var i=0; i < klanleirok.snapshotLength; i++){
    for(var mutato = klanleirok.snapshotItem(i).firstChild; mutato; mutato = mutato.nextSibling){
      if(mutato.nodeName == 'P'){
        switch(konst[1]){
        case 1:
          nevkiszed(mutato, 'ally'+konst[2]);
          konst[1]=2;
          break;
        case 2:
          nevkiszed(mutato, 'nap'+konst[2]);
          konst[1]=3;
          break;
        case 3:
          nevkiszed(mutato, 'war'+konst[2]);
          konst[1]=4;
          break;
        }
      }
    }
  }
}

//A konkrét klánevek kiszedése
function nevkiszed(mutato, hova){
  tp = mutato.nextSibling;
  var nevsor = '|';
  while(tp && tp.nodeName == 'DIV'){
    nevsor += tp.firstChild.textContent+'|';
    tp = tp.nextSibling;
  }
  GM_setValue(hova, nevsor);
}

//visszahívó cucc
function visszahiv(){
  if(konst[0] == false){
    window.setTimeout(cserebere, 10);
    konst[0] = true;
  }
}

//ami a tényleges cserét végzi
function cserebere(){
  var areak = document.evaluate("id('map_content')//area", document, null, Snapshot, null);
  for(var i=0; i < areak.snapshotLength; i++){
    var x = areak.snapshotItem(i);
    if(x.hasAttribute("alt")){
      var szovije = x.getAttribute("onmouseover").split("'")[7];
      var szovi = '|'+szovije+'|';
      if(GM_getValue('ally'+konst[2], ' ').indexOf(szovi)!=-1 && szovije){
        kepcsere(i-7, 1);
      }
      else if(GM_getValue('nap'+konst[2], ' ').indexOf(szovi)!=-1 && szovije){
        kepcsere(i-7, 5);
      }
      else if(GM_getValue('war'+konst[2], ' ').indexOf(szovi)!=-1 && szovije){
        kepcsere(i-7, 2);
      }
    }
  }
  konst[0] = false;
}

//kép lecserélése
function kepcsere(adik, mire){
  var img = document.evaluate('//img[@class="mt'+adik+'"]', document, null, First, null);
  var falukep = img.singleNodeValue.getAttribute("src");
  img.singleNodeValue.setAttribute("src", falukep.replace("4.gif", mire+".gif"));
}

//menu command part
if(GM_getValue('auto'+konst[2], true)){
  GM_registerMenuCommand('Manually set alliance relations', manual);
}
else{
  GM_registerMenuCommand('Automaticly update alliance relations', auto);
  GM_registerMenuCommand('Add Ally', addAlly);
  GM_registerMenuCommand('Add NAP', addNap);
  GM_registerMenuCommand('Add War', addWar);
  GM_registerMenuCommand('Delete all', deleteAll);
}

function manual(){
  GM_setValue('auto'+konst[2], false);
  alert('Now you will be able to manually add alliances you want to mark ally or NAP');
  location.reload();
}
function auto(){
  GM_setValue('auto'+konst[2], true);
  alert('Now the script will try to find the allys and NAPs of your alliance');
  location.pathname = '/allianz.php';
}
function addAlly(){
  var uj = prompt('Type in the name of an ally');
  if(uj){
    GM_setValue('ally'+konst[2], GM_getValue('ally'+konst[2])+uj+'|');
  }
}
function addNap(){
  var uj = prompt('The name of the alliance you have a NAP with');
  if(uj){
    GM_setValue('nap'+konst[2], GM_getValue('nap'+konst[2])+uj+'|');
  }
}
function addWar(){
  var uj = prompt('Give an alliance you are at war with');
  if(uj){
    GM_setValue('war'+konst[2], GM_getValue('war'+konst[2])+uj+'|');
  }
}
function deleteAll(){
  GM_setValue('ally'+konst[2], '|');
  GM_setValue('nap'+konst[2], '|');
  GM_setValue('war'+konst[2], '|');
  alert('All relations deleted');
}

GM_registerMenuCommand('Show relations', ask);
function ask(){
  var txt = "Ally: "+GM_getValue('ally'+konst[2], '');
  txt += "\n NAP: "+GM_getValue('nap'+konst[2], '');
  txt += "\n War: "+GM_getValue('war'+konst[2], '');
  alert(txt);
}