Sunday, February 6, 2011

سيكربت حساب السرعة بين القرى [ Just.Smile ]


// ==UserScript==
// @name          سيكربت حساب السرعة بين القرى [ Just.Smile ]
// @namespace      tribalwars
// @description   يقوم السيكربت بتحديد المسافة بين قراك .. رائع
// @autor          Roman S. (Zombie74)
// @include        http://*.die-staemme.de/*
// @include        http://*.staemme.ch/*
// @include        http://*.tribalwars.ae/*
// @exclude        http://forum*
// @exclude        http://*help*
// ==/UserScript==





// Aktuell installierte Version:
var vers_ist = "DS - Entfernungen 1.0.3";


// Aktueller Dateipfad:
var url = document.location.href;


// Welt:
var teil = url.split(".");
var land = url.substr(7, 2);
var welt = teil[0].replace("http://" + land, "");


// Dorf-ID:
var dorf = url.split("village=");
var dorf_id = dorf[0].split("&")[0];
 
 
// Adressen:
var adresse = new Array();
adresse["de"] = ".die-staemme.";
adresse["ch"] = ".staemme.";
adresse["ae"] = ".tribalwars.";
 
 

// Einstellungen:
if(url.match(/screen=settings&mode=settings/)) {
 var vers = vers_ist.split(" ");
 var version = "";
 for(v=0; v<vers.length; v++) {
  if(v < vers.length-1) {
   version += vers[v] + " ";
  }
  else {
   version += "<span class='grey'>" + vers[v] + "</span>";
  }
 }
 
 // Einstellungen (Entfernungen):
 if(url.match(/einstellung=entfernungen/)) {
  
  // Entfernung an/aus als GM-Value speichern:
  if(confirm("المسافات:\n\هل تريد عرض المسافه بينك وبين القريه عدد الحقوـل")) {
   GM_setValue("Entfernung-" + welt, "an");  
  }
  else {
   GM_setValue("Entfernung-" + welt, "aus");  
  }
 }
 
 var tr = new Array();
 tr[0] = document.createElement("tr");
 tr[1] = document.createElement("tr");
 var th = new Array();
 th[0] = document.createElement("th");
 th[1] = document.createElement("th");
 var td = new Array();
 td[0] = document.createElement("td");
 td[1] = document.createElement("td");
 
 th[0].setAttribute("colspan", "2");
 th[0].innerHTML = "<a href='http://plapl.com/forum.php' target='Forum' title='Ins Forum zum Thema \"" + version.split(" <span")[0] + "\" wechseln'>" + version + "</a>";
 td[0].setAttribute("style", "vertical-align:top;");
 
 if((GM_getValue("Moral-" + welt) == undefined) && 
  (GM_getValue("Entfernung-" + welt) == undefined)) {
  td[0].innerHTML = "<a href='http://" + land + welt + adresse[land] + land + "/game.php?village=" + dorf_id + "&screen=settings&mode=settings&einstellung=entfernungen''>Einstellungen speichern</a>";
  td[1].innerHTML = "<span class='grey'>Bisher wurden noch keine Einstellungen gespeichert</span>";
 }
 else {
  td[0].innerHTML = "<a href='http://" + land + welt + adresse[land] + land + "/game.php?village=" + dorf_id + "&screen=settings&mode=settings&einstellung=entfernungen''>Einstellungen ändern</a>";
  var moral = GM_getValue("Moral-" + welt);
  var entfernung = GM_getValue("Entfernung-" + welt);
  
  
  td[1].innerHTML += "<b style='padding-right:10px;'>Entfernungen:</b>" + entfernung.replace("an", "<span style='color:#090'>an</span>").replace("aus", "<span style='color:#C00'>aus</span>") + "<br>";
 }
 
 tr[0].appendChild(th[0]);
 tr[1].appendChild(td[0]);
 tr[1].appendChild(td[1]);
 
 document.getElementsByClassName("main")[0].getElementsByTagName("table")[2].appendChild(tr[0]);
 document.getElementsByClassName("main")[0].getElementsByTagName("table")[2].appendChild(tr[1]);
}
else {
 if((url.match(/screen=/)) && 
  (GM_getValue("Moral-" + welt) == undefined) && 
  (GM_getValue("Entfernung-" + welt) == undefined)) {
  if(confirm( "  إنقر على موافق لتطبيق الإعدادات لحساب المسافات [ Just.Smile ]  ")) {
   document.location.href = "http://" + land + welt + adresse[land] + land + "/game.php?village=" + dorf_id + "&screen=settings&mode=settings&einstellung=entfernungen";
  }
  else {
   // Standardwerte als GM-Value speichern
   GM_setValue("Moral-" + welt, "an");
   GM_setValue("Entfernung-" + welt, "an");
  }
 }
}




// Aktuelle Punkte:
var menu_1 = document.getElementById("menu_row").getElementsByTagName("td").length;
for(i=0; i<menu_1; i++){
 var inhalt_1 = document.getElementById("menu_row").getElementsByTagName("td")[i].innerHTML;
 if(inhalt_1.indexOf("Rangliste") > 0) {
  var akt_pkte = (inhalt_1.split("(")[1].split("|")[1].replace("<span class=\"grey\">.</span>", "").replace(" P)", ""))*1;
 }
}


// Aktuelle Dorfkoordinaten:
var akt_koord = document.getElementById("menu_row2").getElementsByClassName("nowrap")[0].innerHTML.split(" K")[0].split("|");
var akt_pos_X = akt_koord[0].replace("(", "");
var akt_pos_Y = akt_koord[1].replace(")", "");


// Array für Koordrinaten:
var koord = new Array();
var extra = new Array();
var pos_X = new Array();
var pos_Y = new Array();
var dista = new Array();
var deff_pkte = 0;


// 
var einheit = new Array("market", "knight", "axe", "sword", "spy", "light", "heavy", "ram", "snob");
var titel = new Array("السوق", "قائد الفرسان", "مقاتل الفاس", "مقاتل السيف", "الكشافة", "فارس خفيف+ ", "فارس ثقيل", "المحطمات و المقلايع", "النبيل");
var speed = new Array("6", "10", "18", "22", "9", "10", "11", "30", "35");





// Spielerprofil:
if(url.match(/screen=info_player/)) {
 // Tabelle mit Dörfern:
 var main = document.getElementsByClassName("main")[0]; 
 var vis = main.getElementsByClassName("vis")[1];

 // Anzahl der Dörfer:
 var zeilen = vis.getElementsByTagName("tr").length;
 
 // Koordinaten der einzelnen Dörfer ermitteln:
 for(i=1; i<zeilen; i++) {
  var link_string = vis.getElementsByTagName("tr")[i].getElementsByTagName("td")[0].getElementsByTagName("a")[0].innerHTML;
  for(x=1; x<=5; x++) {
   link_string = link_string.replace(" ", "&nbsp;");
  }
  link_string = link_string.replace(" ", "&nbsp;");
  link_string = link_string.replace(" ", "&nbsp;");
  vis.getElementsByTagName("tr")[i].getElementsByTagName("td")[0].getElementsByTagName("a")[0].innerHTML = link_string;
  
  var links = vis.getElementsByTagName("tr")[i].getElementsByTagName("td")[1].getElementsByTagName("a").length;
  if(links > 0) {
   koord[i] = vis.getElementsByTagName("tr")[i].getElementsByTagName("td")[1].innerHTML.split("<a")[0].split("|");
   extra[i] = "<a" + vis.getElementsByTagName("tr")[i].getElementsByTagName("td")[1].innerHTML.split("<a")[1];
  }
  else {
   koord[i] = vis.getElementsByTagName("tr")[i].getElementsByTagName("td")[1].innerHTML.split("|");
   extra[i] = "";
  }
  deff_pkte += vis.getElementsByTagName("tr")[i].getElementsByTagName("td")[2].innerHTML.replace("<span class=\"grey\">.</span>", "");
  pos_X[i] = koord[i][0];
  pos_Y[i] = koord[i][1];
  dista[i] = Math.sqrt(Math.pow(akt_pos_X - pos_X[i], 2) + Math.pow(akt_pos_Y - pos_Y[i], 2));
 }

 // Neuen Inhalt erstellen:
 // Kopfzeile:
 kopfzeile = ""; 
 kopfzeile += "<th style='text-align:center; -moz-border-radius-topleft:10px;' title='قرى'>قرى (" + (zeilen-1) + ")</th>";
 kopfzeile += "<th style='text-align:center;' title='Koordinaten'>X | Y</th>";
 if(GM_getValue("Moral-" + welt) == "an") {
  kopfzeile += "<th style='text-align:center;' title='نقاط القريه'>نقاط.</th>";
  kopfzeile += "<th style='text-align:center; padding-left:6px; padding-right:6px; -moz-border-radius-topright:10px;' title='Moral'>Moral</th>";
 }
 else {
  kopfzeile += "<th style='text-align:center; -moz-border-radius-topright:10px;' title='نقاط القريه'>نقاط.</th>";
 }
 kopfzeile += "<td rowspan='" + zeilen + "' style='width:5px; background-image:url(http://" + land + welt + adresse[land] + land + "/graphic/background/content.jpg);'></td>";
 if(GM_getValue("Entfernung-" + welt) == "an") {
  kopfzeile += "<th style='text-align:center; -moz-border-radius-topleft:10px;' title='Entfernung'>";
  kopfzeile += "<img src='http://" + land + welt + adresse[land] + land + "/graphic/unit/speed.png'>";
  kopfzeile += "</th>";
 }
 
 // Einheiten:
 if(GM_getValue("Entfernung-" + welt) == "an") {
  for(e=0; e<einheit.length; e++) {
   if((e == 0) || (e == 3) || (e == 6) || (e == einheit.length-1)) {
    kopfzeile += "<th style='text-align:center; -moz-border-radius-topright:10px;' title='" + titel[e] + "'>";
   }
   else if((e == 1) || (e == 4) || (e == 7)) {
    kopfzeile += "<th style='text-align:center; -moz-border-radius-topleft:10px;' title='" + titel[e] + "'>";
   }
   else {
    kopfzeile += "<th style='text-align:center;' title='" + titel[e] + "'>";
   }
   
   if(e == 0) {
    kopfzeile += "<img src='http://" + land + welt + adresse[land] + land + "/graphic/buildings/" + einheit[e] + ".png'>";
   }
   else {
    kopfzeile += "<img src='http://" + land + welt + adresse[land] + land + "/graphic/unit/unit_" + einheit[e] + ".png'>";
   }
  }
    
  kopfzeile += "</th>";
 }
 else {
  for(e=0; e<einheit.length; e++) {
   if(e == 0) {
    kopfzeile += "<th style='text-align:center; -moz-border-radius-topleft:10px; -moz-border-radius-topright:10px;' title='" + titel[e] + "'>";
   }
   else if((e == 3) || (e == 6) || (e == einheit.length-1)) {
    kopfzeile += "<th style='text-align:center; -moz-border-radius-topright:10px;' title='" + titel[e] + "'>";
   }
   else if((e == 1) || (e == 4) || (e == 7)) {
    kopfzeile += "<th style='text-align:center; -moz-border-radius-topleft:10px;' title='" + titel[e] + "'>";
   }
   else {
    kopfzeile += "<th style='text-align:center;' title='" + titel[e] + "'>";
   }
   
   if(e == 0) {
    kopfzeile += "<img src='http://" + land + welt + adresse[land] + land + "/graphic/buildings/" + einheit[e] + ".png'>";
   }
   else {
    kopfzeile += "<img src='http://" + land + welt + adresse[land] + land + "/graphic/unit/unit_" + einheit[e] + ".png'>";
   }
  }
    
  kopfzeile += "</th>";
 }
 
 // Neue Kopfzeile einfügen:
 vis.getElementsByTagName("tr")[0].innerHTML = kopfzeile;
 
 
 // Punkte des Verteidigers:
 var ges_punkte = 0;
 for(i=1; i<zeilen; i++) {
  ges_punkte += Math.round(vis.getElementsByTagName("tr")[i].getElementsByTagName("td")[2].innerHTML.replace("<span class=\"grey\">.</span>", ""));
 }
 // Dörfer:
 for(i=1; i<zeilen; i++) {
  // Punkte des Verteidigers
  var deff_punkte = vis.getElementsByTagName("tr")[i].getElementsByTagName("td")[2].innerHTML.replace("<span class=\"grey\">.</span>", "");
  
  // Moral berechnen:
  var moral = Math.round(((3*ges_punkte/akt_pkte) + 0.3)*100);
  if(moral > 100) {
   moral = 100;
  }

  var zeile = "";
  zeile += "<td>" + vis.getElementsByTagName("tr")[i].getElementsByTagName("td")[0].innerHTML + "</td>"
  zeile += "<td style='text-align:center;'><a href='http://" + land + welt + adresse[land] + land + "/game.php?village=" + dorf_id + "&screen=map&x=" + pos_X[i] + "&y=" + pos_Y[i] + "'>" + pos_X[i] + "|" + pos_Y[i] + "</a>" + extra[i] + "</td>"
  zeile += "<td style='text-align:right;'>" + (deff_punkte/1000).toFixed(3) + "</td>"
  if(GM_getValue("Moral-" + welt) == "an") {
   zeile += "<td style='text-align:right;'><small>" + moral + "<span class='grey'>%</small></span></td>"
  }
  if(GM_getValue("Entfernung-" + welt) == "an") {
   zeile += "<td style='text-align:right;'><small>" + dista[i].toFixed(1) + "</small></td>";
  }
  
  // Alle Einheiten durchlaufen:
  for(x=0; x<einheit.length; x++) {
   // Dauer ermitteln:
   var zeit = dista[i]*speed[x];
   var zeit_sek = zeit*60;
   var weg_std = Math.floor(zeit_sek/3600);
   var weg_min = Math.floor((zeit_sek/60) - (weg_std*60));
   var weg_sek = zeit_sek%60;
   
   // Bei Sekunden < 10 eine 0 voranstellen:
   if(weg_min < 10) {
    weg_min = "0" + weg_min;
   }
   
   // Einheit ist AG:
   if(x == einheit.length-1) {
    // Ermitteln ob AG die Entfernung schafft:
    // Über 40 Std.:
    if(weg_std > 40) {
     var dauer = "<span style='color:#C00;'>" + weg_std + "<span class='grey'>:</span>" + weg_min + "</span>";
    }
    // Über 40:50 Std.:
    else if((weg_std == 40) && (weg_min > 50)) {
     var dauer = "<span style='color:#C00;'>" + weg_std + "<span class='grey'>:</span>" + weg_min + "</span>";
    }
    // Dauer OK:
    else {
     var dauer = weg_std + "<span class='grey'>:</span>" + weg_min;
    }
   }
   // Übrige Einheiten:
   else {
    var dauer = weg_std + "<span class='grey'>:</span>" + weg_min;
   }
   
   // Dauer einfügen:
   zeile += "<td style='text-align:right; padding-left:5px; cursor:default;' title='" + titel[x] + "'><small>" + dauer + "</small></td>";
  }
  
  // Aktuellen Zeile aktualisieren:
  vis.getElementsByTagName("tr")[i].innerHTML = zeile;
 }
}







// Dorf:
if(url.match(/screen=info_village/)) {
 // Tabelle mit Dörfern:
 var main = document.getElementsByClassName("main")[0];
 var ziel = main.getElementsByClassName("vis")[0];
 var ziel_koord = ziel.getElementsByTagName("tr")[1].getElementsByTagName("td")[1].innerHTML.split("|");
 var ziel_pos_X = ziel_koord[0];
 var ziel_pos_Y = ziel_koord[1];
 
 var tabelle = "";
 tabelle += "<table class='vis'>";
  tabelle += "<tr>";
   tabelle += "<th style='text-align:center; -moz-border-radius-topleft:10px;' title='قريتك'>قريه</th>";
   tabelle += "<th style='text-align:center; -moz-border-radius-topright:10px;' title='احدثيات'>X | Y</th>";
   tabelle += "<td rowspan='" + zeilen + "' style='width:5px; background-image:url(http://" + land + welt + adresse[land] + land + "/graphic/background/content.jpg);'></td>";
   if(GM_getValue("Entfernung-" + welt) == "an") {
    tabelle += "<th style='text-align:center; -moz-border-radius-topleft:10px;' title='السرعه'>";
    tabelle += "<img src='http://" + land + welt + adresse[land] + land + "/graphic/unit/speed.png'>";
    tabelle += "</th>";
   }
   // Einheiten:
   if(GM_getValue("Entfernung-" + welt) == "an") {
    for(e=0; e<einheit.length; e++) {
     if((e == 0) || (e == 3) || (e == 6) || (e == einheit.length-1)) {
      tabelle += "<th style='text-align:center; -moz-border-radius-topright:10px;' title='" + titel[e] + "'>";
     }
     else if((e == 1) || (e == 4) || (e == 7)) {
      tabelle += "<th style='text-align:center; -moz-border-radius-topleft:10px;' title='" + titel[e] + "'>";
     }
     else {
      tabelle += "<th style='text-align:center;' title='" + titel[e] + "'>";
     }
     
     if(e == 0) {
      tabelle += "<img src='http://" + land + welt + adresse[land] + land + "/graphic/buildings/" + einheit[e] + ".png'>";
     }
     else {
      tabelle += "<img src='http://" + land + welt + adresse[land] + land + "/graphic/unit/unit_" + einheit[e] + ".png'>";
     }
    }
      
    tabelle += "</th>";
   }
   else {
    for(e=0; e<einheit.length; e++) {
     if(e == 0) {
      tabelle += "<th style='text-align:center; -moz-border-radius-topleft:10px; -moz-border-radius-topright:10px;' title='" + titel[e] + "'>";
     }
     else if((e == 3) || (e == 6) || (e == einheit.length-1)) {
      tabelle += "<th style='text-align:center; -moz-border-radius-topright:10px;' title='" + titel[e] + "'>";
     }
     else if((e == 1) || (e == 4) || (e == 7)) {
      tabelle += "<th style='text-align:center; -moz-border-radius-topleft:10px;' title='" + titel[e] + "'>";
     }
     else {
      tabelle += "<th style='text-align:center;' title='" + titel[e] + "'>";
     }
     
     if(e == 0) {
      tabelle += "<img src='http://" + land + welt + adresse[land] + land + "/graphic/buildings/" + einheit[e] + ".png'>";
     }
     else {
      tabelle += "<img src='http://" + land + welt + adresse[land] + land + "/graphic/unit/unit_" + einheit[e] + ".png'>";
     }
    }
      
    tabelle += "</th>";
   }
  tabelle += "</tr>";
  
  dista[0] = Math.sqrt(Math.pow(akt_pos_X - ziel_pos_X, 2) + Math.pow(akt_pos_Y - ziel_pos_Y, 2));
 
 
  tabelle += "<tr>";
  if(document.getElementById("menu_row2").getElementsByTagName("td").length < 12) {
   var cell = 3;
  }
  else {
   var cell = 12;
  }
  var dorflink = document.getElementById("menu_row2").getElementsByTagName("td")[cell].getElementsByTagName("a")[0];
  tabelle += "<td><a href='" + dorflink + "'>" + dorflink.innerHTML + "</a></td>";
  tabelle += "<td style='text-align:center;'><a href='http://" + land + welt + adresse[land] + land + "/game.php?village=" + dorf_id + "&screen=map&x=" + akt_pos_X + "&y=" + akt_pos_Y + "' title='Auf Karte zentrieren'>" + akt_pos_X + "|" + akt_pos_Y + "</a></td>";
  tabelle += "<td style='background:none;'></td>";
  if(GM_getValue("Entfernung-" + welt) == "an") {
   tabelle += "<td style='text-align:right;'><small>" + dista[0].toFixed(1) + "</small></td>";
  }
  
  // Alle Einheiten durchlaufen:
  for(x=0; x<einheit.length; x++) {
   // Dauer ermitteln:
   var zeit = dista[0]*speed[x];
   var zeit_sek = zeit*60;
   var weg_std = Math.floor(zeit_sek/3600);
   var weg_min = Math.floor((zeit_sek/60) - (weg_std*60));
   var weg_sek = zeit_sek%60;
   
   // Bei Sekunden < 10 eine 0 voranstellen:
   if(weg_min < 10) {
    weg_min = "0" + weg_min;
   }
   
   // Einheit ist AG:
   if(x == einheit.length-1) {
    // Ermitteln ob AG die Entfernung schafft:
    // Über 40 Std.:
    if(weg_std > 40) {
     var dauer = "<span style='color:#C00;'>" + weg_std + "<span class='grey'>:</span>" + weg_min + "</span>";
     titel[x] = "Der weg ist zu weit für das " + titel[x];
    }
    // Über 40:50 Std.:
    else if((weg_std == 40) && (weg_min > 50)) {
     var dauer = "<span style='color:#C00;'>" + weg_std + "<span class='grey'>:</span>" + weg_min + "</span>";
     titel[x] = "Der weg ist zu weit für das " + titel[x];
    }
    // Dauer OK:
    else {
     var dauer = weg_std + "<span class='grey'>:</span>" + weg_min;
    }
   }
   // Übrige Einheiten:
   else {
    var dauer = weg_std + "<span class='grey'>:</span>" + weg_min;
   }
   
   // Dauer einfügen:
   tabelle += "<td style='text-align:right; padding-left:5px; cursor:default;' title='" + titel[x] + "'><small>" + dauer + "</small></td>";
  }
  tabelle += "</tr>";
  
 tabelle += "</table>";
 
 // Seite aktualisieren:
 document.getElementsByClassName("main")[0].innerHTML = main.innerHTML + tabelle;
}

0 comments:

Post a Comment