NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name otomatik yagma // @author sarayköylü ( cüneyt) // @namespace FM // @description sadece chrome icin // @include http://*.travian.*/build.php?*gid=16* // @include http://*.travian.*/build.php?*id=39* // @include http://*.travian.*/a2b.php* // @include http://*.travian.*/karte.php* // @include http://*.travian.*/berichte.php* // @include http://*.travian.*/login.php // @include http://*.travian.*/ // @include http://*.travian.*/dorf1.php // @exclude http://forum.travian.* // @version 1.0.0 // ==/UserScript== var SCRIPT = { url : 'http://userscripts.org/scripts/source/.user.js', version : '1.0.0' //same value as @version }; //Adapt these variables to your personal need: //Message Window config var messageWindowTop = 450; //0 means top of the browser window var messageWindowLeft = 700; //0 means left most point of the browser window var zIndex = 100; //Make it as big as you want to put the message window over top of anything //Waiting times var minWait = 5000; //Don't make it smaller then 5000ms! var maxWait = 1 * minWait; //Skipping villages var maxSkipCount = -1; //Max. Number for skipped farms before changing villages, make it -1 to try the whole list //Map //FarmImage by Black_Blood var farmImage = "http://img706.imageshack.us/img706/5794/d22.gif"; //Default troops var defTroops = "0,0,0,0,0,0,0,0,0,0,0"; //DynamicTroopCount variables var minimumTroopCount = 2; var minimumEfficiency = 50; //Logging var logLevel = 0; //You probably don't need to change this /* Log Levels: * 0: no special logging (logs general stuff) * 1: log for testing level1 * 2: log for testing level2 * 3: logs calls of all functions * 4: logs steps inside of functions * 5: logs values inside of functions */ //Global variables (Don't changes these) var dom = new DOMUtils(); var server = location.hostname; var rootPath = "http://" + server + "/"; var suffixLocal, suffixGlobal; var lang = new Array(); //Language definitions var image = new Array(); //All images used var farmList = new Array(); //Complete farm List var fque = new Array(); //Farm queue var prioque = new Array(); //Priority queue var user_race = 1; //Default Romans var globalInt = -1; var totalTroops = new Array(); //For temporary value passing between functions var runningDiv; var random; //Random farming var priorityAttack = false; var vT35; var XPFirst = XPathResult.FIRST_ORDERED_NODE_TYPE; var XPList = XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE; var XPListO = XPathResult.ORDERED_NODE_SNAPSHOT_TYPE; var XPIter = XPathResult.UNORDERED_NODE_ITERATOR_TYPE; //FM main functions function main() { FM_log(3,"main() called"); suffixGlobal = server + '_' + getPlayerId(); suffixLocal = suffixGlobal + '_' + getActiveVillageId(); FM_log(3,"suffixGlobal is: "+suffixGlobal); FM_log(3,"suffixLocal is: "+suffixLocal); //Define Travian 3.6 Version getT35version(); FM_log(5,document.URL); var html = document.body.innerHTML; // In case 'Unable to load site' is showed, try to Refresh the page. if (html.indexOf(" <!-- ERROR ITEM CONTAINER") != -1) { window.location.replace(rootPath + "a2b.php"); } if (GM_getValue("Active_" + suffixGlobal, -1) > -1 && GM_getValue("ReadRep_" + suffixGlobal, -1)==1 ) { newreport = document.getElementsByTagName('html')[0].innerHTML.indexOf('id=\"n5\" class=\"i1\"')+document.getElementsByTagName('html')[0]. innerHTML.indexOf('id=\"n5\" class=\"i3\"'); if ( newreport != -2) { if(document.URL.indexOf("berichte.php") == -1) { window.open("/berichte.php", "_self"); } checkreports(); return; } } // Start countdown and forward to rallypoint if FM is active // This is not working because FM script not runs on all the Travian pages // Could be working if @includes get changed, but this probably leads to a slow browser /* if (GM_getValue("Active_" + suffixGlobal, -1) > -1) { //alert("waiting"); setTimeout(function(){window.open("/a2b.php","_self");}, 60000); //wait 1 minute then go back to rally point } */ // Get variable for random farming random = GM_getValue("RandomFarming_" + suffixGlobal, 0); FM_log(3,"Setting language, images & style"); setLanguage(); loadImage(); loadStyle(); var url = document.URL; url = url.substring(url.lastIndexOf("/") + 1); user_race = GM_getValue('Tribe_' + suffixGlobal, -1); if (user_race != -1) { user_race = GM_getValue('Tribe_' + suffixGlobal, 0); user_race = parseInt(user_race); } else { if (url.indexOf("a2b.php") != -1) { user_race = 1 + 10 * getPlayerTribe(); GM_setValue('Tribe_' + suffixGlobal, user_race); alert(T('SCRIPT_NAME') + " KURULDU" + T('INSTALL_M1') + "\n" + T('INSTALL_M2') + " \nBlack_Blood"); window.location.replace(rootPath + "build.php?id=39"); //ToDo: Reload } else { window.location.replace(rootPath + "a2b.php"); //ToDo: Reload } } // Set default values if not defined yet if (GM_getValue("Maximize_" + suffixGlobal, false) === false) { GM_setValue("Maximize_" + suffixGlobal, 1); } if (GM_getValue("MaximizeSettings_" + suffixGlobal, false) === false) { GM_setValue("MaximizeSettings_" + suffixGlobal, 0); } if (GM_getValue("StartIndex_" + suffixLocal, false) === false) { GM_setValue("StartIndex_" + suffixLocal, 0); } if (GM_getValue("EndIndex_" + suffixLocal, false) === false) { GM_setValue("EndIndex_" + suffixLocal, -1); } if (GM_getValue("Skipcounter_" + suffixGlobal, false) === false) { GM_setValue("Skipcounter_" + suffixGlobal, 0); } //Settings if (GM_getValue("RandomFarming_" + suffixGlobal, false) == false) { GM_setValue("RandomFarming_" + suffixGlobal, 0); } if (GM_getValue("farmMarking_" + suffixGlobal, false) === false) { GM_setValue("farmMarking_" + suffixGlobal, 0); } if (GM_getValue("VillageSkipping_" + suffixGlobal, false) === false) { GM_setValue("VillageSkipping_" + suffixGlobal, 0); } if (GM_getValue("DelTList_" + suffixLocal, false) === false) { GM_setValue("DelTList_" + suffixLocal, 1); } if (GM_getValue("ReadRep_" + suffixLocal, false) === false) { GM_setValue("ReadRep_" + suffixLocal, 0); } if (GM_getValue("DynamicTroopCount__" + suffixLocal, false) === false) { GM_setValue("DynamicTroopCount__" + suffixLocal, 1); } // Setting Travian Version if (GM_getValue("TravianVersion_" + suffixGlobal, false) === false) { GM_setValue("TravianVersion_" + suffixGlobal, 0); } //Insert village selector rp_villageSelector(); //Alert (url); if (url.indexOf("build.php?") > -1 && (url.indexOf("gid=16") > -1 || url.indexOf("id=39") > -1)) { if (isReallyRallyPoint()) { rp_mainPage(); } activeMain(); } else if (url.indexOf("a2b.php") > -1) { activeMain(); } else if (url.indexOf("karte.php?") > -1 && url.indexOf("d=") > -1 && url.indexOf("c=") > -1) { //If user profile page foundNewFarm(); } else if (url.indexOf("berichte.php") > -1) { // If no messages there, return to rally point newreport = document.getElementsByTagName('html')[0].innerHTML.indexOf('id=\"n5\" class=\"i1\"')+document.getElementsByTagName('html')[0]. innerHTML.indexOf('id=\"n5\" class=\"i3\"'); if ( newreport == -2 && GM_getValue("Active_" + suffixGlobal, -1) > -1) { window.open("/build.php?id=39", "_self"); return; } } // Farm marking in the map if (url.indexOf('karte.php')>-1 && url.indexOf('karte.php?d=')==-1 && GM_getValue("farmMarking_" + suffixGlobal, 0)==1) { // Get center village var mapX = dom.get('x').textContent; var mapY = dom.get('y').textContent; FM_log(4,"CenterCoords="+mapX+","+mapY); GM_setValue("MapCenter_"+suffixGlobal,mapX+","+mapY); // Look for arrow buttons var ex = "//area[contains(@id,'ma_n')]"; tag = document.evaluate(ex,document,null,XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,null); FM_log(4,"adding eventListener"); for(var i=1; i<=tag.snapshotLength;i++) { var arrowButton = tag.snapshotItem(i-1); // Call function to check again after listener was activated FM_log(4,"arrowId="+arrowButton.id); arrowButton.addEventListener("click", function (e){ var evt = e || event; var ele = evt.target || evt.srcElement; setTimeout(function(){getXYtoFarms(ele.id);},500); }, true); // So that it will check again when scrolling. } getXYtoFarms("") } } function activeMain() { FM_log(3,"activeMain() called"); if (GM_getValue("Active_" + suffixGlobal, -1) > -1) { FM_log(4,"FM is active"); GM_addStyle("body { color:black; }"); drawMessageBox(); var messageStr = "", acVillageFlag = true, titleStr = ""; var currentVillageId = getActiveVillageId(); if (isFarmerVillage(currentVillageId)) { if (farmList == null || farmList.length == 0) { farmList = GM_getValue("FarmList_" + suffixLocal, "").split(">:)"); } var sIndex = getStartIndex(); FM_log(4,"activeMain sIndex="+sIndex); var eIndex = getEndIndex(); //Teuton Mod Code (M4rtini) fque = GM_getValue('farmqueue'+ suffixLocal, ''); if (fque == null || fque.length == 0 || fque.indexOf('>:)') == -1) { //Alert("neue liste"); fque = new Array(); x = 0; if(eIndex == -1) //No eIndex set { // First fill from sIndex to end, then add from beginning to sIndex for (var i = sIndex; i < farmList.length; i++) { fque[x] = farmList[i]; x++; } for (var i = 0; i < sIndex; i++) { fque[x] = farmList[i]; x++; } }else if(eIndex <= farmList.length){ //Fill in between sIndex and eIndex for (var i = sIndex; i <= eIndex; i++) { fque[x] = farmList[i]; x++; } }else if(eIndex <= sIndex){ //Fill to the End and then from the beginning to eIndex for (var i = sIndex; i < farmList.length; i++) { fque[x] = farmList[i]; x++; } for (var i = 0; i < eIndex; i++) { fque[x] = farmList[i]; x++; } } //Removing all inactives. for (var i=0; i < fque.length;i++) { temp = fque[i].split('|'); if(temp[7] != 'true') { fque.splice(i,1); //Removes from array } } if(random==1) { fque.sort(randOrd); fque.sort(randOrd); fque.sort(randOrd); fque.sort(randOrd); } //Alert(fque.join('>:)')); GM_setValue('farmqueue'+ suffixLocal, fque.join('>:)')); }else{ //Fque already existing fque = fque.split('>:)'); } // End Teuton Mod if (eIndex >= farmList.length) { GM_setValue("EndIndex_" + suffixLocal, -1); } var doneHere = GM_getValue("DoneHere_" + suffixLocal, 0); if (fque == "" || fque.length == 0 || doneHere == 1) { titleStr = T("NO_FARM"); messageStr = T('CHANGE_VILLAGE'); setTextMessage(titleStr, messageStr); acVillageFlag = false; } else { if (sIndex < farmList.length) { setAttackMessage(); } else { titleStr = T("Error"); messageStr = T('CHANGE_VILLAGE'); setTextMessage(titleStr, messageStr); changeVillage(); return; } } } else { titleStr = T('NOT_FARMER'); messageStr = T('CHANGE_VILLAGE'); acVillageFlag = false; setTextMessage(titleStr, messageStr); } if (acVillageFlag) { var url = document.URL; url = url.substring(url.lastIndexOf("/") + 1); if (url == "a2b.php") { //Ready to fill out form setTimeout(function(){sendtroops();},Random()/2); } else { //Changing to the send troops form setTimeout("window.location.replace('" + rootPath + "a2b.php')",Random() / 2); } } else { changeVillage(); } } } function rp_mainPage() { FM_log(3,"rp_mainPage() called"); if (GM_getValue("Active_" + suffixGlobal, -1) > -1) { setTimeout("window.location.replace('" + rootPath + "a2b.php')", Random()); } else { insertEditFarmBox(); //Now Add eventlistener for the save button dom.get("FMsaveButton") .addEventListener('click', saveEditedFarm, false); //Add eventlistener var container = dom.get("content"); var newP = dom.cn("p"); newP.id = "FMtitle"; newP.innerHTML += '<b>Farming Machine</b>'; container.appendChild(newP); //Insert a new table rp_insertTable(); } } function rp_villageSelector() { //Adds Village checkboxes FM_log(3,"rp_villageSelector() called"); //Get Travian Version vT35 = GM_getValue("TravianVersion_" + suffixGlobal, false); var vTableExp = "//a[contains(@href,'newdid')]/ancestor::td/ancestor::tr/ancestor::tbody"; var vTable = dom.find(vTableExp, XPFirst); if (vTable != null && vTable.firstChild != null) { for (var i = 1; i < vTable.childNodes.length; i++) { var search = /\n?\((.*)\n?\s*\|\s*\n?(.*)\)\n?/; var resultxy = search.exec(vTable.childNodes[i].textContent); var X = resultxy[1]; var Y = resultxy[2]; var vid = xy2id(X, Y); var newdid = getParamFromUrl(vTable.childNodes[i].getElementsByTagName("a")[0].getAttribute("href"),"newdid"); var checkButton = createInputButton("checkbox", i); checkButton.id = "vcb_" + vid + "~" + newdid; if (isFarmerVillage(vid)) { checkButton.checked = true; } if (GM_getValue("Active_" + suffixGlobal, -1) > -1) { checkButton.disabled = true; } else { checkButton.addEventListener("click", function(event) { villageCheckBox(event) }, false); } if(vT35==1) { FM_log(4,"old code version"); var newCol = dom.cn("td"); newCol.appendChild(checkButton); vTable.childNodes[i].appendChild(newCol); } else if (vT35==2) { FM_log(4,"new code version"); var vilExp = vTableExp+"/tr["+(i)+"]/td[contains(@class,'dot')]"; dom.xs(vilExp).textContent = ""; dom.xs(vilExp).appendChild(checkButton); } else { FM_log(0,"could not attach villagecheckbox - unknown Travian Version"); } } } } function sendtroops() { FM_log(3,"sendtroops() called"); prioque = GM_getValue('priorityqueue'+ suffixLocal, '').split('>:)'); fque = GM_getValue('farmqueue'+ suffixLocal, '').split('>:)'); //Get Travian Version vT35 = GM_getValue("TravianVersion_" + suffixGlobal, false); if (prioque.length >= 1 && prioque[0].length > 2) { FM_log(4,"priority attack"); var arr = prioque[0].toString().split("|"); attackList = prioque; priorityAttack = true; }else{ var arr = fque[0].toString().split("|"); attackList = fque; priorityAttack = false; } xy = arr[0].split(","); var sIndex = getSindexFromXY(xy[0],xy[1], suffixLocal); var eIndex = getEndIndex(); var notFoundHtml = (dom.get("content")).innerHTML; var formNode = dom.get("content").innerHTML, titleStr = "", messageStr = ""; var attackCount = GM_getValue("Active_" + suffixGlobal, 0); if(vT35==1) { var searchStr = "<div class=\"f10 e b\">"; var searchExp = "//div[@class='f10 e b']"; } else if (vT35==2) { var searchStr = "<p class=\"error\">"; var searchExp = "//p[@class='error']"; } if (notFoundHtml.indexOf(searchStr) > -1) { //Village not found or player bannded farmSetInactive(sIndex, suffixLocal); // Got error on this farm so set it inactive if (sIndex == eIndex) { GM_setValue("DoneHere_" + suffixLocal, 1); } errText = dom.xs(searchExp).textContent; FM_log(4,"errText="+errText); titleStr = T("Error") + " :"; messageStr = errText + "<br>" + T('NEXT_FARM'); setTextMessage(titleStr, messageStr); removefromque(priorityAttack); //Remove the farm from the attack queue. setTimeout("window.location.replace('" + rootPath + "a2b.php')",Random()); } else if (sIndex < farmList.length) { // No error message from travian and inside farmList if(arr[3]=="pixelgeek") { farmSetInactive(sIndex, suffixLocal); // Got error on this farm so set it inactive if (sIndex == eIndex) { GM_setValue("DoneHere_" + suffixLocal, 1); } titleStr = T("Error") + " :"; messageStr = "...<br>" + T('NEXT_FARM'); setTextMessage(titleStr, messageStr); removefromque(priorityAttack); //Remove the farm from the attack queue. setTimeout("window.location.replace('" + rootPath + "a2b.php')",Random()); } else { if (formNode.indexOf("kid") > -1) { //Confimation page var e = document.getElementsByTagName('form'); e[0].submit(); //Submit done GM_setValue("Active_" + suffixGlobal, attackCount + 1); if(GM_getValue("RandomFarming_" + suffixGlobal, 1)==0 && priorityAttack==false) { //Keep all villages in the list for making it the same as the inital version of FM makelastinque(priorityAttack); } else { //If prioattack or random farming, this farm needs to be removed from the list removefromque(priorityAttack); } titleStr = T('TROOPS_GONE') + ":"; messageStr = "[" + sIndex + "] " + E2C(arr[3]) + " : " + E2C(arr[5]) + "<b>(" + arr[0] + ")</b>"; setTextMessage(titleStr, messageStr); if (sIndex == eIndex) { GM_setValue("DoneHere_" + suffixLocal, 1); } } else { //Filling out the form & sending troops setAttackMessage(); var i; if (arr[7] == "true") { FM_log(4,"checking if there are enough troops"); var xy = arr[0].split(","); var troopsCount = arr[1].split(","); var random = GM_getValue("RandomFarming_" + suffixGlobal, 0); var skipcounter = GM_getValue("Skipcounter_" + suffixGlobal, 0); var availableTroops = new Array(); //Find all the available troops //Alert(getNumber(formNode.substr(formNode.lastIndexOf("t1.value")))); for (i = 1; i < 11; i++) { var tt = "t" + i + ".value"; availableTroops.push(getNumber(formNode.substr(formNode .lastIndexOf(tt)))); } for (i = 0; i < troopsCount.length; i++) { if (parseInt(availableTroops[i]) < parseInt(troopsCount[i])) { FM_log(4,"not enough troops"); titleStr = T("Error") + " :"; tIndex = getSindexFromXY(arr[0].split(",")[0],arr[0].split(",")[1], suffixLocal) messageStr = T('NOT_ENOUGH') + ":<br>["+tIndex+"] " + E2C(arr[3]) + " : " + E2C(arr[5]) + "<b>(" + arr[0] + ")</b><br>" + T("Available") + ": <b>" + availableTroops[i] + "</b> " + T("Needed") + ": <b>" + troopsCount[i] + "</b>"; setTextMessage(titleStr, messageStr); //Move village to the latest position and continue with next village //Only if skipvillage is activated if(GM_getValue("VillageSkipping_" + suffixGlobal, 0)==1) { FM_log(4,"moving village to the end of list"); makelastinque(priorityAttack); } //Add one unsuccessfull count to the skipcounter skipcounter++; GM_setValue("Skipcounter_" + suffixGlobal, skipcounter); FM_log(5,"Skipcounter="+skipcounter); FM_log(5,"attackList Length="+attackList.length); //If all farms were unsuccessfully, change village otherwise continue trying if(maxSkipCount < 1) { maxSkipCount = attackList.length; } if(maxSkipCount > attackList.length) { maxSkipCount = attackList.length; } FM_log(5,"maxSkipcount="+maxSkipCount); if (skipcounter >= maxSkipCount ) { changeVillage(); }else{ setTimeout("window.location.replace('" + rootPath + "a2b.php')",Random()); if(GM_getValue("VillageSkipping_" + suffixGlobal, 0)==1) { //Only display message, when it's really skipping to next farm messageStr = T('NEXT_FARM'); setTextMessage("", messageStr); } setTimeout(function(){sendtroops}, 2000); } return; } } var theForm = document.forms.namedItem("snd"); for (i = 1; i < 12; i++) { theForm.elements.namedItem("t" + i).value = troopsCount[i-1]; } dom.find("//input[@name='c' and @value='" + arr[8] + "']", XPFirst, theForm).checked = true; //theForm.elements.namedItem('c').value = 3; theForm.elements.namedItem('x').value = xy[0]; theForm.elements.namedItem('y').value = xy[1]; //All set.. submit //Reset skipcounter, because a village was successfully attacked FM_log(3,"Successfully send troops > skipcounter = 0"); GM_setValue("Skipcounter_" + suffixGlobal, 0); setTimeout(function(){theForm.submit()}, Random()); } else { //Farm not active titleStr = T('FARM_INACTIVE') + ":"; messageStr = E2C(arr[3]) + " : " + E2C(arr[5]) + "<b>(" + arr[0] + ")</b>"; setTextMessage(titleStr, messageStr); //alert("Farm inactiv: removing it"); removefromque(priorityAttack); setTimeout("window.location.replace('" + rootPath + "a2b.php')",Random()); setTimeout(function(){sendtroops}, 2000); return; } } } } else { messageStr = T('CHANGE_VILLAGE'); setTextMessage(titleStr, messageStr); changeVillage(); } } function markFarm(x, y) { FM_log(1,"markFarm("+x+","+y+") called"); //farm coords var x = parseInt(x); var y = parseInt(y); var id = (x + 401) + ((400 - y) * 801); //Get map center var centerCoords = GM_getValue("MapCenter_"+suffixGlobal,""); if(centerCoords!="") { centerCoords = centerCoords.split(','); FM_log(4,"stored coords:"+centerCoords[0]+","+centerCoords[1]); } else { FM_log(4,"no center coords stored"); return; } var centerX = parseInt(centerCoords[0]); var centerY = parseInt(centerCoords[1]); //Get map size //var ex = "//area[contains(@href,'d=')][contains(@id,'a_')]"; var ex = "//div[contains(@id,'i_')]"; var tag = dom.xo(ex); mapSize = Math.floor(Math.sqrt(tag.snapshotLength)); FM_log(2,"mapSize="+mapSize); mapCenterX = (mapSize-1)/2; mapCenterY = (mapSize-1)/2; FM_log(4,"mapCenterXY="+mapCenterX+","+mapCenterY); mapOffsetX = mapCenterX - 3; mapOffsetY = mapCenterY - 3; mapOffsetX = 0; mapOffsetY = 0; //Create coordinates for each cell and compare for(var i=0; i<mapSize; i++) { //calculate X-Offset to Center offX = i - mapCenterX; FM_log(4,"offX="+offX); //Calculate tCoorX tCoorX = centerX + offX + mapOffsetX; for(var j=0; j<mapSize; j++) { //calculate Y-Offset offY = j - mapCenterY; FM_log(4,"offY="+offY); //calculate tCoorY tCoorY = centerY + offY + mapOffsetY; FM_log(4,"tCoords="+tCoorX+"/"+tCoorY); //compare to farm coords //FM_log(2,"compare X="+tCoorX+"/"+x); //FM_log(2,"compare Y="+tCoorY+"/"+y); if(tCoorX==x && tCoorY==y) { var exArea = "//div[@id='i_"+i+"_"+j+"']"; FM_log(2,"exArea="+exArea); tag2 = dom.xs(exArea); //tag2.innerHTML = "<div class=\"isfarm\"> </div>"; tag2.setAttribute("class","isfarm"); //return; } } } } function farmSetInactive(index, suffix) { FM_log(3,"farmSetInactive("+index+","+suffix+") called"); var fList = GM_getValue("FarmList_" + suffix, "").split(">:)"); var newfList = ""; var i, j; if (index < fList.length) { for (i = 0; i < fList.length; i++) { if (i) newfList += ">:)"; if (i == index) { var arr = fList[i].split("|"); arr[7] = "false"; for (j = 0; j < arr.length; j++) { if (j) newfList += "|"; newfList += arr[j]; } } else { newfList += fList[i]; } } GM_setValue("FarmList_" + suffixLocal, newfList); } } function farmAddRemoveOne(index, suffix,add) { FM_log(2,"farmAddOne("+index+","+suffix+") called"); FM_log(2, "suffix:"+ suffix +" SuffixLocal:"+ suffixLocal); var fList = GM_getValue("FarmList_" + suffix, "").split(">:)"); var newfList = ""; var i, j; if (index < fList.length) { for (i = 0; i < fList.length; i++) { if (i) newfList += ">:)"; if (i == index) { var arr = fList[i].split("|"); //FM_log(2, arr[1]); troops = arr[1].split(',') //FM_log(2,troops); for (var x in troops) { if(add && parseInt(troops[x]) != 0){ troops[x]++; break; }else if( parseInt(troops[x]) != 0 && parseInt(troops[x]) > minimumTroopCount){ troops[x]--; break; } } arr[1] = troops.join(','); //FM_log(2,arr[1]); for (j = 0; j < arr.length; j++) { if (j) newfList += "|"; newfList += arr[j]; } } else { newfList += fList[i]; } } GM_setValue("FarmList_" + suffix, newfList); } } function changeVillage() { try{ FM_log(3,"changeVillage() called"); GM_setValue("Skipcounter_" + suffixGlobal, 0); //clear farmque, because all the other farms are already tried... if(maxSkipCount==-1 && GM_getValue("RandomFarming_" + suffixGlobal, -1)==1) { clearque(); } var vList = GM_getValue("FarmerVillages_" + suffixGlobal); var newList = new Array(); var i, pause, messageStr = ""; if (vList != null && vList != "") { vList = vList.toString().split(","); if (vList.length > 0) { var activeVId = getActiveVillageId(); for (i = 0; i < vList.length; i++) { var ids = vList[i].split('~')[0]; if (GM_getValue("DoneHere_" + suffixGlobal + "_" + ids, 0) == 0 && ids != activeVId) { newList.push(vList[i]); //only taking villages which is not current village and also not done } } } } random = GM_getValue("RandomFarming_" + suffixGlobal, 0); if (newList.length == 0) { //Village Change is not possible, Engine is pause for X sec //if there are other villages, reactivate these, otherwise stay in this village if (vList == "" || vList == null) { //no farmer village! so set the current village a farmer, important for single village account GM_setValue("FarmerVillages_" + suffixGlobal, getActiveVillageId() + "~-1"); //no newdid vList = GM_getValue("FarmerVillages_" + suffixGlobal, ""); } FM_log(4,"Reseting all doneHeres"); //reset DoneHere for all selected village var arr = vList.toString().split(","); FM_log(4,"number of villages="+arr.length); for (var i = 0; i < arr.length; i++) { arr[i] = arr[i].split("~"); FM_log(4,"villageId="+arr[i][0]); GM_setValue("DoneHere_" + suffixGlobal + "_" + arr[i][0], 0); } pause = Random(); messageStr = T('NO_VILLAGE') + " " + T('WAITING') + " <b> " + Math.floor(pause / 1000) + "</b> " + T('SEC') + " " setTextMessage("", messageStr); setTimeout("window.location.replace('" + rootPath + "a2b.php')", pause); } else { //In case of random iteration we come up to this point because sIndex was bigger then farmList length //before we leave this village we have to ensure that when we came back to this village we got the sIndex is in between farmlist length var sIndex = 0; if (random == 1 && farmList != null && farmList.length > 0) { sIndex = Random(0, farmList.length - 1); GM_setValue("StartIndex_" + suffixLocal, sIndex); //by force set it inside } //select a village randomly from the active villages i = Random(0, newList.length - 1); newList[i] = newList[i].split('~'); var coord = id2xy(newList[i][0]); pause = Random(); messageStr = T('SWITCH_V') + ": (" + coord.x + "|" + coord.y + "), " + T("after") + " " + Math.floor(pause / 1000) + " " + T("sec"); setTextMessage("", messageStr); setTimeout("window.location.replace('" + rootPath + "a2b.php?newdid="+ newList[i][1] + "')", pause); } } catch(error) { FM_log(0,"changeVillage(): change not successfull"); } } function foundNewFarm() { FM_log(3,"foundNewFarm() called"); insertEditFarmBox(); var tribe = getFPlayerTribe().toUpperCase(); var tribeG=T('GAUL').toUpperCase(); if (tribe ==tribeG) { dom.get("radio3").checked = true; //default attack for gauls } else { dom.get("radio4").checked = true; //default raid for other } dom.get('FMsaveButton').addEventListener('click', addNewFarm, true); var tbody = dom.xs("//a[contains(@href,'karte.php')]/parent::td/parent::tr/parent::tbody"); if (tbody == null || tbody == "") return; /* Trying to mark already added villages */ // getting coordinates testCoord = getFVillageCoords(); // checking if already existing if(isFarm(testCoord.split(',')[0],testCoord.split(',')[1])) { var addOption = createLinkButton('<font style="color: #cd0000;">'+'\u00BB' + " " + T("Add_To") + " " + T('SCRIPT_NAME') + "<\/font>", T("Add_As"), showPopupFarmEditBox); } else { var addOption = createLinkButton('\u00BB' + " " + T("Add_To") + " " + T('SCRIPT_NAME'), T("Add_As"), showPopupFarmEditBox); } /* original Code var addOption = createLinkButton('\u00BB' + " " + T("Add_To") + " " + T('SCRIPT_NAME'), T("Add_As"), showPopupFarmEditBox); */ var row = dom.cn('tr'); var cell = dom.cn('td'); cell.appendChild(addOption); row.appendChild(cell); tbody.appendChild(row); } function addNewFarm() { FM_log(3,"addNewFarm() called"); var formDiv = dom.get("popupFarmEditBox"); var inputTag = formDiv.getElementsByTagName("input"); var troopConfig = "", attackType, activeBool, i; for (i = 0; i < inputTag.length; i++) { if (i < 11) { if (i) troopConfig += ","; if (inputTag[i].value == "" || inputTag[i].value == null) inputTag[i].value = 0; troopConfig += parseInt(inputTag[i].value); } else { if (inputTag[i].getAttribute("type") == "radio" && inputTag[i].checked) { attackType = inputTag[i].value; } else if (inputTag[i].getAttribute("type") == "checkbox") { activeBool = inputTag[i].checked; } } } //alert(troopConfig+"|"+attackType+"|"+activeBool); var coords = getFVillageCoords(); var tribe = getFPlayerTribe(); var fPlayerName = getFPlayerName(); var fPlayerId = getFPlayerId(); FM_log(3,"getFVillageName"); var fVillageName = getFVillageName(); //alert(fVillageName); FM_log(3,"getCvalue"); var cValue = getCvalue(); FM_log(3,"window confirm"); if (window.confirm(T('ADD_FARM') + ": " + fVillageName + " (" + coords + ")" + "\n" + T('TROOP_CONFIG') + ": \"" + troopConfig + "\"\n" + T('CONFIRM') + "?")) { addList(coords + "|" + troopConfig + "|" + C2E(tribe) + "|" + C2E(fPlayerName) + "|" + C2E(fPlayerId) + "|" + C2E(fVillageName) + "|" + cValue + "|" + activeBool + "|" + attackType); //alert("New Farm Added: "+fVillageName+"("+coords+") :)"); hidePopupFarmEditBox(); } FM_log(3,"New Farm Add done"); } function addList(dataStr) { FM_log(3,"addList() called"); var oldList = GM_getValue("FarmList_" + suffixLocal, "") + " "; oldList = trim(oldList); if (oldList != "") { oldList += ">:)";//evil face } oldList += dataStr; //now it is actually new list ;) GM_setValue("FarmList_" + suffixLocal, oldList); } function randOrd(){ //randomize for farmque return (Math.round(Math.random())-0.5); } function removefromque(prioattack) { //remove farm from farmque or prioque FM_log(3,"removefromque() called"); if(prioattack) { prioque.shift(); GM_setValue('priorityqueue'+ suffixLocal, prioque.join('>:)')); }else{ fque.shift(); GM_setValue('farmqueue'+ suffixLocal, fque.join('>:)')); } } function makelastinque(prioattack) { FM_log(3,"makelastinque() called"); if(prioattack) { if (prioque.length > 1) { info = prioque.shift(); prioque.push(info); //alert("make last: " + prioque.join('>:)')); GM_setValue('priorityqueue'+ suffixLocal, prioque.join('>:)')); }else{ //only one in the list so there is no need to change position } }else{ if (fque.length > 1) { info = fque.shift(); fque.push(info); //alert(fque.join('>:)')); GM_setValue('farmqueue'+ suffixLocal, fque.join('>:)')); }else{ //only one in the list so there is no need to change position } } } function addtoprio(info, vilId) { //add farm to prioque FM_log(0,"addtoprio("+info+","+vilId+" called"); suffixGlobal = server + '_' + getPlayerId(); suffixLocal = suffixGlobal + '_' + vilId; prioque = GM_getValue('priorityqueue'+ suffixLocal, '') + " "; prioque = trim(prioque); if (prioque != "") { prioque += ">:)"; } prioque += info; //alert(prioque); GM_setValue('priorityqueue'+ suffixLocal, prioque); } function clearque() { //delete farmque / prioque FM_log(3,"clearque() called"); var vListID = getAllVillageId().toString(); FM_log(4,"vListID="+vListID); var temptemp = vListID.split(","); //alert(temptemp.length); for(var i=0; i<temptemp.length;i++) { //alert(temptemp[i]); GM_setValue('farmqueue'+ suffixGlobal + '_' + temptemp[i], ''); GM_setValue('priorityqueue'+ suffixGlobal + '_' + temptemp[i], ''); } FM_log(4,"Farmqueue cleared"); } function checkreports() { //Analyze new reports FM_log(3,"checkreports() called"); FM_log(3,"Setting language, images & style"); setLanguage(); loadImage(); loadStyle(); drawMessageBox(); setTextMessage("Checking reports", "Opening report"); url = document.URL; pulled = document.createElement('div'); if ( (url.indexOf("berichte.php") != -1 && url.indexOf("berichte.php?") == -1) || url.indexOf("berichte.php?s=") != -1) { ex = "//td/div/a[contains(@href,'berichte.php?')]/parent::*"; ex2 = "//td/div/a[contains(@href,'berichte.php?id=')]"; tag = document.evaluate(ex,document,null,XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,null); //alert(tag); totReports = find(ex2,XPList); for(i=totReports.snapshotLength-1;i>=0;i--){ pulled.innerHTML = tag.snapshotItem(i).innerHTML; attackreporturl = pulled.getElementsByTagName('a')[0].href; endofA = tag.snapshotItem(i).innerHTML.indexOf("</a>"); testIndex = tag.snapshotItem(i).innerHTML.indexOf("(",endofA); // check if line is a new report if (testIndex != -1 && endofA < testIndex) { //save url GM_setValue("lastreportpage_"+suffixGlobal, url); FM_log(4,"attrepurl="+attackreporturl); //window.open(attackreporturl, "_self"); setTimeout("window.location.replace('" + attackreporturl + "')", 500); break; } } if (i==-1){ // all reports from this page done, switching to next page newreport = document.getElementsByTagName('html')[0].innerHTML.indexOf('id=\"n5\" class=\"i1\"') + document.getElementsByTagName('html')[ 0].innerHTML.indexOf('id=\"n5\" class=\"i3\"'); if ( newreport == -2 || url.indexOf("berichte.php?s=1000") != -1) { //no more reports to read, going back to attacks setTextMessage("Checking reports", "No more reports to read<br/>Going back to rally point") //resetting lastreportpage GM_setValue("lastreportpage_"+suffixGlobal, "berichte.php"); setTimeout("window.location.replace('" + rootPath + "a2b.php')",500); } else { //going to next page next = find("//a[contains(@href,'berichte.php?s=')]",XPList); if (next.snapshotLength > 0) { nextRep = next.snapshotItem(next.snapshotLength-1).href.split("/"); nextRepLink = nextRep[nextRep.length-1]; FM_log(4,"nextRepLink="+nextRepLink); GM_setValue("lastreportpage_"+suffixGlobal,nextRepLink); //window.open(next.snapshotItem(next.snapshotLength-1).href, "_self"); setTimeout("window.location.replace('" + next.snapshotItem(next.snapshotLength-1).href + "')",500); } } } } //Is this any report page? if ((url.indexOf("berichte.php?id=") != -1 || url.indexOf("berichte.php?newdid=") != -1) ) { FM_log(4,"inside report page"); //alert("analysing report"); test = find("//a[contains(@href,'uid=')]",XPList); var uids = find("//div[@id='content']//a[contains(@href,'karte.php?d=')]",XPList); if(test.snapshotLength == 3 && uids.snapshotLength == 2 ){ setTextMessage("Checking reports", "Attack report"); FM_log(4,"report is attack report"); troopsinattack = document.getElementsByTagName('tr')[6].innerHTML.match(/\d+/g).join(); casualties = document.getElementsByTagName('tr')[7].innerHTML.match(/\d+/g).join(); attackedId = uids.snapshotItem(1).href.split('d=')[1].split('&c')[0]; attackerVillageId = uids.snapshotItem(0).href.split('d=')[1].split('&c')[0]; attackerPlayerId = test.snapshotItem(1).href.split('uid=')[1]; playerId = getPlayerId(); thisCValue = uids.snapshotItem(1).href.split('d=')[1].split('&c=')[1]; defenderPlayerId = test.snapshotItem(2).href.split('uid=')[1]; //alert(defenderPlayerId); //alert(thisCValue); coords = id2xy(attackedId); FM_log(4,"coords="+coords.x+"/"+coords.y); FM_log(2,"going to check attacktable"); temp = attacktable(); lostResources = temp[1]; var gain; var carryCapacity; var carryCell=dom.find("//img[@class='car']/parent::div",XPFirst); if (carryCell != null) { gain = carryCell.textContent.split('/')[0] - lostResources; carryCapacity = carryCell.textContent.split('/')[1]; efficiency = gain/carryCapacity * 100; }else{ efficiency = -1; } FM_log(2, "Gain "+gain+"Carry: "+ carryCapacity + "Efficiency: "+ efficiency); //adding up casualties var casTemp = casualties.split(','); var casNr=0; for(i=0;i<casTemp.length;i++) { casNr+casTemp[i]; } setTextMessage("Checking reports", "Attack report<br/><br/>Efficiency: "+efficiency+"%<br/>Gain: "+gain+"<br/>Casualties: "+casNr); FM_log(0,"efficiency="+efficiency); switch (temp[2]){ case 1:tribe=T('ROMAN');break; case 2:tribe=T('TEUTON');break; case 3:tribe=T('GAUL');break; default:tribe=T('ROMAN');break; } if (temp[2]==3) { attType = 3; } else { attType = 4; } //alert("troopsinattack:"+troopsinattack); //alert("casualties:"+casualties); //alert("gain:"+gain); //alert("efficiency:"+efficiency); if (troopsinattack.split(',').join() == casualties || gain < 0) { //alert("all units lost - deactivating village"); suffix = suffixGlobal + '_' + attackerVillageId; suffixLocal = suffixGlobal + '_' + getActiveVillageId(); index = getSindexFromXY(coords.x,coords.y, suffix); if (index != -2) { farmSetInactive(index, suffix); //alert("farm set inactive"); } } FM_log(2,"c="+casualties+"/eff="+efficiency+"/playerId="+playerId+"/attPId="+attackerPlayerId); var DynamicTroopCount = GM_getValue("DynamicTroopCount_" + suffixGlobal, 0); if(casualties == "0,0,0,0,0,0,0,0,0,0" && efficiency == 100 && playerId == attackerPlayerId ) { suffixGlobal = server + '_' + getPlayerId(); suffix = suffixGlobal + '_' + attackerVillageId; index = getSindexFromXY(coords.x,coords.y, suffix); FM_log(1,"Calling: farmAddRemoveOne("+ index + ","+ suffix +",true)"); if(DynamicTroopCount){ farmAddRemoveOne(index, suffix,true); } FM_log(2,"adding this farm to prioque"); villageName = uids.snapshotItem(1).textContent; FM_log(4,"villageName="+villageName); playerName = test.snapshotItem(2).textContent + '(Priority)'; FM_log(4,"playerName="+playerName); attackInfo = coords.x +','+ coords.y +'|'+ troopsinattack +'|'+tribe+'|'+playerName+'|'+defenderPlayerId+'|'+villageName+'|'+ thisCValue +'|true|'+attType; FM_log(2,"attackInfo="+attackInfo); addtoprio(attackInfo, attackerVillageId); } if(casualties == "0,0,0,0,0,0,0,0,0,0" && efficiency < minimumEfficiency && efficiency != -1 && playerId == attackerPlayerId ){ suffixGlobal = server + '_' + getPlayerId(); suffix = suffixGlobal + '_' + attackerVillageId; index = getSindexFromXY(coords.x,coords.y, suffix); FM_log(1,"Calling: farmAddRemoveOne("+ index + ","+ suffix +",false)"); if(DynamicTroopCount){ farmAddRemoveOne(index, suffix,false); } } } else { setTextMessage("Checking reports", "No Attack report"); } //going back to last report page lastRepPage = GM_getValue("lastreportpage_" + suffixGlobal, "berichte.php"); FM_log(4,"RepPage="+lastRepPage); //window.location.replace(lastRepPage); setTimeout("window.location.replace('" + lastRepPage + "')",500); } } function attacktable(){ //analyse report table try { FM_log(1,"attacktable() called"); var ats=new Array(0,0,0,0,0,0,0,0,0,0,0); var XPFirst=XPathResult.FIRST_ORDERED_NODE_TYPE; var XPList=XPathResult.ORDERED_NODE_SNAPSHOT_TYPE; exTab = "//div[@id='content']//a[contains(@href,'spieler.php?')]/parent::*/parent::tr/parent::thead/parent::table/tbody"; tab=find(exTab,XPList); //alert(tab.snapshotLength); table=tab.snapshotItem(0).getElementsByTagName("td"); //Item(0)=attacker, Item(1)=bounty, Item(2,3,4)=defender if(tab.snapshotLength>1) { //alert("check details"); //real defender is always the last table tabledefender=tab.snapshotItem(tab.snapshotLength-1).getElementsByTagName("td"); //alert(tabledefender); if(tabledefender[1].innerHTML.indexOf("unit u1")>0) tribedefender=1; if(tabledefender[1].innerHTML.indexOf("unit u11")>0) tribedefender=2; if(tabledefender[1].innerHTML.indexOf("unit u21")>0) tribedefender=3; } else { //define tribe for defender tribedefender = 0; } var statushero=0; var statustrap=0; var troops=0; //1-romans 2-teutons 3-gauls var lostres=new Array(0,0,0,0); var atstemp=new Array(0,0,0,0,0,0,0,0,0,0,0); tableattacker=tab.snapshotItem(0).getElementsByTagName("td"); if(tableattacker[1].innerHTML.indexOf("unit u1")>0) troops=1; if(tableattacker[1].innerHTML.indexOf("unit u11")>0) troops=2; if(tableattacker[1].innerHTML.indexOf("unit u21")>0) troops=3; //alert(troops); switch (troops){ //define need resources for troops case 1:tm=romans;break; case 2:tm=teutons;break; case 3:tm=gauls;break; default:tm=null;break; } var rescell=dom.find("//img[@class='r1']/parent::div",XPFirst); if (rescell != null){ if(tm!=null){ if(tab.snapshotItem(0).getElementsByTagName("tr")[0].innerHTML.indexOf("unit uhero")>0) {statushero=1;ats[5]=1;} //alert(statushero); var tda=11+statushero; //start for sent units var tdl=20+statushero*2; //start for casualities var tdt=0; for(var i=0;i<=(9+statushero);i++){ atstemp[0]=atstemp[0]+table[tda+i].textContent*tm[i][0]; lostres[0]=lostres[0]+table[tdl+i].textContent*tm[i][3]; lostres[1]=lostres[1]+table[tdl+i].textContent*tm[i][4]; lostres[2]=lostres[2]+table[tdl+i].textContent*tm[i][5]; lostres[3]=lostres[3]+table[tdl+i].textContent*tm[i][6]; atstemp[4]=atstemp[4]+table[tda+i].textContent*tm[i][7]; atstemp[6]=atstemp[6]+table[tdl+i].textContent*tm[i][7]; atstemp[8]=atstemp[8]+table[tda+i].textContent*tm[11][i]*tm[i][0]; atstemp[9]=atstemp[9]+table[tda+i].textContent*tm[12][i]*tm[i][0]; if(tdt!=0){ atstemp[7]=atstemp[7]+table[tdt+i].textContent*tm[i][7]; atstemp[3]=atstemp[3]+(table[tda+i].textContent-table[tdl+i].textContent-table[tdt+i].textContent)*tm[i][9]; }else{ atstemp[3]=atstemp[3]+(table[tda+i].textContent-table[tdl+i].textContent)*tm[i][9]; } } atstemp[1]=lostres[0]+lostres[1]+lostres[2]+lostres[3]; FM_log(2,"resText="+rescell.textContent); res=rescell.textContent.split(" | "); atstemp[2]=parseInt(res[0])+parseInt(res[1])+parseInt(res[2])+parseInt(res[3]); var efficiency = Math.round(atstemp[2] / atstemp[3] * 100); gain = atstemp[2] - atstemp[1]; //alert(atstemp[1]); FM_log(2,"Loot: "+atstemp[2]+" Carry capacity: "+atstemp[3]); FM_log(2,efficiency+"/"+gain+"/"+tribedefender); returnstring = new Array(); returnstring[0] = efficiency; returnstring[1] = atstemp[1]; returnstring[2] = tribedefender; return (returnstring); }; } return 0; } catch(error) { FM_log(0,"attacktable(): Error in reading the attack-table"); } } function getSindexFromXY(x,y, suffix) { FM_log(3,"getSindexFromXY() called"); farmList = GM_getValue("FarmList_" + suffix, ""); if (farmList != "" && farmList != null) { farmList = farmList.split(">:)"); //alert(farmList.length); for (i=0; i<farmList.length;i++) { xy = farmList[i].split("|")[0].split(','); //alert(xy); if (x == xy[0] && y == xy[1]) { return i; } } } return -2; } //FM list functions function farmRemove(itemToRemove) { //Remove a farm from the list FM_log(3,"farmRemove("+itemToRemove+") called"); var sIndex = getStartIndex(); var eIndex = getEndIndex(); FM_log(4,"sufLoc:"+suffixLocal); var fullList = GM_getValue("FarmList_" + suffixLocal); var farms = new Array; farms = fullList.split(">:)"); var newFarmList = '', flag = false, i; if (itemToRemove < farms.length) { var arr = farms[itemToRemove].split("|"); if (confirm(T('REMOVING') + ": " + E2C(arr[5]) + "(" + arr[0] + ")")) { for (i = 0; i < farms.length; i++) { if (i != itemToRemove) { if (flag) { newFarmList += ">:)"; } newFarmList += farms[i]; flag = true; } } //alert(newFarmList); if (itemToRemove <= sIndex) { GM_setValue("StartIndex_" + suffixLocal, (sIndex - 1) >= 0 ? (sIndex - 1) : 0); } if (itemToRemove <= eIndex) { GM_setValue("EndIndex_" + suffixLocal, (eIndex - 1) >= 0 ? (eIndex - 1) : 0); } GM_setValue("FarmList_" + suffixLocal, newFarmList); //reload the farm table clearque(); reloadFarmTable(); } } else { alert('???Not a farm for remove'); } } function startEngine() { farmList = new Array(); var vList = GM_getValue("FarmerVillages_" + suffixGlobal, ""); if (vList == "" || vList == null) { //no farmer village! so set the current village a farmer, important for single village account GM_setValue("FarmerVillages_" + suffixGlobal, getActiveVillageId() + "~-1"); //no newdid vList = GM_getValue("FarmerVillages_" + suffixGlobal, ""); } //reset DoneHere for all selected village var arr = vList.toString().split(","), i; for (i = 0; i < arr.length; i++) { arr[i] = arr[i].split("~"); GM_setValue("DoneHere_" + suffixGlobal + "_" + arr[i][0], 0); } GM_setValue("Active_" + suffixGlobal, 0); GM_addStyle("body { color:black; }"); window.location.replace(rootPath + "a2b.php"); } function stopEngine() { // set active variable to -1 GM_setValue("Active_" + suffixGlobal, -1); // reset skipcounter GM_setValue("Skipcounter_" + suffixGlobal, 0); // reset all active farming villages var vList = GM_getValue("FarmerVillages_" + suffixGlobal, "").split(","); if (vList.length == 1 && vList[0].split("~")[1] == -1) { //for single village account GM_setValue("FarmerVillages_" + suffixGlobal, ""); } // Reset farmques if random is deactivated so it will start where it should start if(GM_getValue("DelTList_" + suffixGlobal, 0)==1) { //alert("clearing que"); clearque(); } GM_addStyle("body { color:black; }"); FM_log(3,"Engine stopped, setting skipcounter=0"); // going back to rallypoint setTimeout("window.location.replace('build.php?id=39')",500); //window.location.replace("build.php?id=39"); } function reloadFarmTable() { FM_log(3,"reloadFarmTable() called"); var oldTable; if ((oldTable = dom.get("farmMachineTable")) != null || oldTable != "undefined") { //then remove it dom.get("content").removeChild(dom.get("farmMachineTable")); } rp_insertTable(); FM_log(4,"Farm Table Reload Complete"); } function distanceSort(a, b) { var d1 = a.distance; var d2 = b.distance; return (d1 < d2) ? -1 : ((d1 > d2) ? 1 : 0); // -1 a,b | 1 b,a | 0 nothing } function sortFarms() { FM_log(1,"sortFarms() called"); farmList = GM_getValue("FarmList_" + suffixLocal, ""); if (farmList == "" || farmList == null) return; farmList = farmList.split(">:)"); if (farmList.length == 1) //just one farm return; var arr = new Array(), i; var xy = getActiveVillageXY(), xyt; for (i = 0; i < farmList.length; i++) { xyt = farmList[i].split("|")[0].split(","); arr[i] = { FarmInfo : farmList[i], distance : coordDistXYtoXY(xy[0], xy[1], xyt[0], xyt[1]) }; //alert(xy[0]+" "+xy[1]+" "+xyt[0]+" "+xyt[1]); } arr.sort(distanceSort); //sorting var newList = ""; for (i = 0; i < arr.length; i++) { if (i) newList += ">:)"; newList += arr[i].FarmInfo; } GM_setValue("FarmList_" + suffixLocal, newList); reloadFarmTable(); } function optimizeFarmsByDistance() { FM_log(3,"optimizeFarmsByDistance() called"); if (confirm(T('OPTIMIZE_SM') + "\n" + T('CONFIRM') + "?")) { var selectedvList = GM_getValue("FarmerVillages_" + suffixGlobal, ""); //if empty, just one village var i, j, minDis, k; if (selectedvList != "" && selectedvList != null) { var vList = selectedvList.split(","); if (vList.length < 2) return; for (i = 0; i < vList.length; i++) { vList[i] = vList[i].split('~')[0]; } var allFarms = "", vCoords = new Array(), newFarmList = new Array(); for (i = 0; i < vList.length; i++) { var fList = GM_getValue("FarmList_" + suffixGlobal + "_" + vList[i], ""); if (fList != "" && fList != null) { if (allFarms != "") allFarms += ">:)"; allFarms += fList; } newFarmList[i] = ""; vCoords[i] = id2xy(vList[i]); } if (allFarms != "") { allFarms = allFarms.split(">:)"); for (i = 0; i < allFarms.length; i++) { minDis = 5000000.0; k = -1; var xy = allFarms[i].split("|")[0].split(","); for (j = 0; j < vList.length; j++) { var dis = coordDistXYtoXY(vCoords[j].x, vCoords[j].y, xy[0], xy[1]); if (dis < minDis) { minDis = dis; k = j; } } if (k != -1) { if (newFarmList[k] != "") { newFarmList[k] += ">:)"; } newFarmList[k] += allFarms[i]; } } for (i = 0; i < vList.length; i++) { GM_setValue("FarmList_" + suffixGlobal + "_" + vList[i], newFarmList[i]); } } } reloadFarmTable(); alert(T('OPTIMIZE_DONE')); } } function importExport() { FM_log(3,"importExport() called"); var farmData = GM_getValue("FarmList_" + suffixLocal, ""), val; FM_log(4,"suffixLocal="+suffixLocal); val = prompt(T('LOCAL_IM_EX_PROMPT'), farmData); if (val != null) { val = trim(val); GM_setValue("FarmList_" + suffixLocal, val); reloadFarmTable(); } } function globalImportExport() { var allVillageId = getAllVillageId(); allVillageId = allVillageId.split(","); var allData = "", i, j, farmData; for (i = 0; i < allVillageId.length; i++) { farmData = GM_getValue("FarmList_" + suffixGlobal + "_" + allVillageId[i], ""); farmData = trim(farmData); if (allData != "") allData += "//"; allData += allVillageId[i] + ":>" + farmData; } var val = prompt(T('GLOBAL_IM_EX_PROMPT'), allData); if (val != null) { val = trim(val).split("//"); for (i = 0; i < val.length; i++) { farmData = val[i].split(":>"); farmData[0] = trim(farmData[0]); if (farmData.length == 1) farmData.push(""); for (j = 0; j < allVillageId.length; j++) { if (farmData[0] == allVillageId[j]) { break; } } if (j < allVillageId.length) { //alert(allVillageId[j]+" Data:"+farmData[1]); GM_setValue("FarmList_" + suffixGlobal + "_" + allVillageId[j], farmData[1]); } } reloadFarmTable(); } } function editFarm(itemToEdit, event) { FM_log(3,"editFarm("+itemToEdit+",event) called"); farmList = GM_getValue("FarmList_" + suffixLocal, ""); var i; hidePopupFarmEditBox(); if (farmList != "" && farmList != null) { farmList = farmList.split(">:)"); if (itemToEdit < farmList.length) { //initialize the form with old values; var farmEditBox = dom.get("popupFarmEditBox"); var arr = farmList[itemToEdit].split("|"); var troopsConfig = arr[1].split(","); var inputTag = farmEditBox.getElementsByTagName("input"); for (i = 0; i < inputTag.length; i++) { if (i < 11) { inputTag[i].value = troopsConfig[i]; } else { if (inputTag[i].getAttribute("type") == "radio") { if (parseInt(inputTag[i].value) == parseInt(arr[8])) { inputTag[i].checked = true; } else { inputTag[i].checked = false; } } if (inputTag[i].getAttribute("type") == "checkbox") { if (arr[7] == "true") { inputTag[i].checked = true; } else { inputTag[i].checked = false; } } } } FM_log(3,"editFarm: Form Initialization complete " + farmList.length); //get the globalInt so if the save button get clicked saveEditedFarm function will use it globalInt = itemToEdit; //changing position farmEditBox.style.top = event.pageY + "px"; farmEditBox.style.left = (event.pageX + 20) + "px"; showPopupFarmEditBox(); //Now show the box } } } function saveEditedFarm() { FM_log(3,"saveEditedFarm() called"); var itemToEdit = globalInt; FM_log(4,"itemToEdit="+itemToEdit); var newList = "", i, j; hidePopupFarmEditBox(); if (farmList.length == 0 || farmList == null || itemToEdit < 0 || itemToEdit >= farmList.length) { FM_log(3,"saveEditedFarm: illegal call of this function"); return; } FM_log(4,"SaveEditedFarm: Going to save the edited farm " + farmList.length); for (i = 0; i < farmList.length; i++) { if (newList != "") { newList += ">:)"; } if (i == itemToEdit) { var formDiv = dom.get("popupFarmEditBox"); var inputTag = formDiv.getElementsByTagName("input"); var troopConfig = "", attackType, activeBool; for (j = 0; j < inputTag.length; j++) { if (j < 11) { if (j) troopConfig += ","; if (inputTag[j].value == "" || inputTag[j].value == "NaN" || inputTag[j].value == null) inputTag[j].value = 0; troopConfig += parseInt(inputTag[j].value); } else { if (inputTag[j].getAttribute("type") == "radio" && inputTag[j].checked) { attackType = inputTag[j].value; } else if (inputTag[j].getAttribute("type") == "checkbox") { activeBool = inputTag[j].checked; } } } var arr = farmList[i].split("|"); newList += arr[0] + "|" + troopConfig + "|" + C2E(arr[2]) + "|" + C2E(arr[3]) + "|" + C2E(arr[4]) + "|" + C2E(arr[5]) + "|" + arr[6] + "|" + activeBool + "|" + attackType; } else { newList += farmList[i]; } } GM_setValue("FarmList_" + suffixLocal, newList); FM_log(4,"SaveEditedFarm: Edit Farm Save Complete"); clearque(); reloadFarmTable(); } //get informations function getT35version() { try{ plusLogo = dom.get("logo"); if(plusLogo != null) { if(plusLogo.nodeName == "IMG") { //de2 GM_setValue("TravianVersion_"+suffixGlobal,1); vT35=1; } else if (plusLogo.nodeName == "A") { //com7, com9, it9, comx GM_setValue("TravianVersion_"+suffixGlobal,2); vT35=2; } else { GM_setValue("TravianVersion_"+suffixGlobal,0); vT35=0; FM_log(0,"unknown Travian Version"); } } FM_log(2,"Travian Version is: "+vT35); return; } catch (error) { FM_log(0,"getT35version(): error retrieving Travian35-Version"); } } function getStartIndex() { FM_log(3,"getStartIndex() called"); FM_log(4,"getSIndex suffixLocal="+suffixLocal); var sIndex = GM_getValue("StartIndex_" + suffixLocal, 0); FM_log(4,"retrieved sIndex="+sIndex); return sIndex; } function getEndIndex() { var eIndex = GM_getValue("EndIndex_" + suffixLocal, 0); return eIndex; } function getXYtoFarms(buttonId) { FM_log(1,"getXYtoFarms("+buttonId+") called"); var xOff = 0, yOff = 0; if(buttonId!="") { if (buttonId=="ma_n1") { xOff = 0; yOff = 1; } else if (buttonId=="ma_n2") { xOff = 1; yOff = 0; } else if (buttonId=="ma_n3") { xOff = 0; yOff = -1; } else if (buttonId=="ma_n4") { xOff = -1; yOff = 0; } else if (buttonId=="ma_n1p7") { xOff = 0; yOff = 7; } else if (buttonId=="ma_n2p7") { xOff = 7; yOff = 0; } else if (buttonId=="ma_n3p7") { xOff = 0; yOff = -7; } else if (buttonId=="ma_n4p7") { xOff = -7; yOff = 0; } } FM_log(4,"offsets="+xOff+"/"+yOff); //get new map center and store it centerCoords = GM_getValue("MapCenter_"+suffixGlobal,""); if(centerCoords!="") { centerCoords = centerCoords.split(','); FM_log(4,"stored coords:"+centerCoords[0]+","+centerCoords[1]); } else { FM_log(4,"no center coords stored"); return; } centerX = parseInt(centerCoords[0])+xOff; centerY = parseInt(centerCoords[1])+yOff; //store new map Center FM_log(4,"new mapCenter="+centerX+"/"+centerY); GM_setValue("MapCenter_"+suffixGlobal,centerX+","+centerY); var allVillageId = new Array(); var allVillageIdStr = getAllVillageId().toString(); FM_log(4,"allVillageStr="+allVillageIdStr); if(allVillageIdStr.indexOf(",")<0) { allVillageId.push(allVillageIdStr); } else { allVillageId = allVillageIdStr.split(","); } var allData = "", i, farmData; for (i = 0; i < allVillageId.length; i++) { farmData = GM_getValue("FarmList_" + suffixGlobal + "_" + allVillageId[i], ""); farmData = trim(farmData); if(allData !="") allData +=">:)"; allData += farmData; } FM_log(4,"allDataString="+allData); allData = allData.split(">:)"); FM_log(4,"allDatalength="+allData.length); for (var i = 0; i < allData.length; i++) { if(allData[i].length>3) { xyt = allData[i].split("|")[0].split(","); markFarm(xyt[0], xyt[1]); } } } function isFarmerVillage(currentVillageId) { var vList = GM_getValue("FarmerVillages_" + suffixGlobal, "").split(","); if (vList == "" || vList.length == 0) { return false; } var i; for (i = 0; i < vList.length; i++) { if (vList[i].split('~')[0] == currentVillageId) { return true; } } return false; } function isFarm(x,y) { FM_log(3,"isFarm("+x+","+y+") called"); var allvList = getAllVillageId().toString(); FM_log(4,"allvList="+allvList); if(allvList != "" && allvList != null) { var vList = allvList.split(','); for(i=0; i<vList.length; i++) { var vId = vList[i]; //Get Farmlist for this village tList = GM_getValue("FarmList_"+suffixGlobal+"_"+vId, ""); fVillages = tList.split(">:)"); for(j=0; j<fVillages.length; j++) { vCoords = fVillages[j].split("|")[0]; cooX = vCoords.split(",")[0]; cooY = vCoords.split(",")[1]; if(x==cooX && y== cooY) { FM_log(4,"it is a farm"); return true; } } } FM_log(4,"it is not a farm"); return false; } else { FM_log(4,"error fetching allvList"); return false; } } function isReallyRallyPoint() { FM_log(3,"isReallyRallyPoint() called"); // suche muss umgestaltet werden > direkt nach links suchen var rp_link_overview = dom.xo('//a[contains(@href,"build.php?id=39")]'); var rp_link_sendtroops = dom.xo('//a[contains(@href,"a2b.php")]'); var rp_link_warsim = dom.xo('//a[contains(@href,"warsim.php")]'); FM_log(5,"LinkOverview:"+rp_link_overview.snapshotLength+"/LinkSendtroops:"+rp_link_sendtroops.snapshotLength+"/LinkWarsim:"+rp_link_warsim. snapshotLength); if (rp_link_overview.snapshotLength < 1 || rp_link_sendtroops.snapshotLength < 1 || rp_link_warsim.snapshotLength < 1) { //one of the link was not found FM_log(4,"isReallyRallyPoint() = false"); return false; } FM_log(4,"isReallyRallyPoint() = true"); return true; } function getPlayerTribe() { //retrieve Player's tribe FM_log(3,"getPlayerTribe() called"); var tribe = 0; //roman if (dom.xs("//img[contains(@src,'x.gif')][@class='unit u1']")) { tribe = 0; } else if (dom.xs("//img[contains(@src,'x.gif')][@class='unit u11']")) { tribe = 1; } else if (dom.xs("//img[contains(@src,'x.gif')][@class='unit u21']")) { tribe = 2; } return tribe; } function getFPlayerName() { //retrieve Farm player's name FM_log(3,"getFPlayerName() called"); var user = dom.xs("//a[contains(@href,'spieler.php')]/parent::td"); //alert(user); var playerName = (user) ? user.textContent : ''; playerName = trim(playerName); //alert(playerName); return playerName; } function getFPlayerId() { //retrieve Farm player's ID FM_log(3,"getFPlayerId() called"); var user = dom.xs("//a[contains(@href,'spieler.php')][1]"); //alert(user); var playerId = (user) ? getParamFromUrl(user.href, 'uid') : ''; //alert(playerId); return playerId; } function getFPlayerTribe() { //retrieve Farm player's tribe FM_log(3,"getFPlayerTribe() called"); var playerLink = dom.xs("//a[contains(@href,'spieler.php')]"); var playerTribe = ""; if (playerLink.snapshotLength<2) { //abandoned area/empty oasis playerTribe = ''; } else { playerTribe = dom.xs("//a[contains(@href,'spieler.php?')]/parent::td/parent::tr/parent::tbody/tr[1]/td[last()]").textContent; } playerTribe = trim(playerTribe.toLowerCase()); //alert(playerTribe); FM_log(4,"PlayerTribe="+playerTribe); return playerTribe; } function getCvalue() { //retrieve village c value var url = document.location.href; var cValue = getParamFromUrl(url, 'c'); return cValue; } function getFVillageCoords() { //retrieve coordinates FM_log(3,"getFVillageCoords() called"); var playerLink = dom.xs("//a[contains(@href,'spieler.php')]"); var title, coordsObject; if (playerLink.snapshotLength<2) { //abandoned area/empty oasis title = ""; coordsObject = dom.xo('//h1').textContent; } else { //normal village or occupied oasis title = dom.xs('//h1').textContent; coordsObject = dom.xo('//h1').textContent; } title = title.replace(/^[\s( )]+/g, '').replace(/[\s( )]+$/g, ''); var coords = title.substring(title.lastIndexOf('(')); coords = coords.replace(/[\(\)]/g, '').split('|').join(',') FM_log(4,"retrieved coords:"+coords); return coords; //comma sperated } function getFVillageName() { //retrieve Farm Village name FM_log(3,"getFVillageName() called"); var playerLink = dom.xo("//a[contains(@href,'spieler.php')]"); //alert(divcontent); var title, villageName; FM_log(2,"playerLink.snapshotLength="+playerLink.snapshotLength); if (playerLink.snapshotLength<2) { //abandoned area/empty oasis var villageNameObject = dom.xs('//h1'); title = villageNameObject.textContent; villageName = title.substring(0, title.lastIndexOf('(')).replace( /^\s+|\s+$/g, ''); //alert(villageName); } else { //normal village or occupied oasis var villageNameObject = dom.xo("//h1/div"); FM_log(2,"villageNameObject.snapshotLength="+villageNameObject.snapshotLength); villageName = villageNameObject.snapshotItem(villageNameObject.snapshotLength-1).innerHTML; } FM_log(3,"Final villageName="+villageName); villageName = trim(villageName); //alert(villageName); return villageName; } function getPlayerId() { //retrieve Player's ID try { var user = dom.xs('//*[@id="side_navi"]/p/a[starts-with(@href, "spieler.php?uid=")]'); if(user==null) { //old id-tag user = dom.xs('//*[@id="sleft"]/p/a[starts-with(@href, "spieler.php?uid=")]'); } var playerID = (user) ? getParamFromUrl(user.href, 'uid') : ''; FM_log(3,"Fetched userid"); return playerID; } catch(error) { FM_log(0,"getPlayerId(): error retrieving ID"); } } function getActiveVillageId() { //retrieve ID of active Village from Villagelist try { FM_log(3,"getActiveVillageId() called"); var xy = getActiveVillageXY(); return xy2id(xy[0], xy[1]); } catch(error) { FM_log(0,"getActiveVillageId(): error retrieving ID"); } } function getAllVillageId() { //retrieve IDs of all Villages try { FM_log(1,"getAllVillageId() called"); //get Travian Version vT35 = GM_getValue("TravianVersion_" + suffixGlobal, 0); //Look for villageTable citiesExp = "//a[contains(@href,'newdid')]/parent::td/parent::tr/parent::tbody"; var cities = dom.find(citiesExp,XPFirst); if (!cities) { FM_log(4,"no villageTable"); //no villageTable return getActiveVillageId(); } else { FM_log(4,"villageTable existing"); var idList = "", i; //check number of villages var nVillages = cities.childNodes.length -1; FM_log(4,nVillages+" villages"); if(nVillages>1) { FM_log(4,"more than 1 village"); for (var i = 1; i <= nVillages; i++) { if(vT35==1) { cityExp1 = citiesExp + "/tr["+i+"]/td[@class='x']"; cityExp2 = citiesExp + "/tr["+i+"]/td[@class='y']"; } else if (vT35==2) { cityExp1 = citiesExp + "/tr["+i+"]/td/div[@class='cox']"; cityExp2 = citiesExp + "/tr["+i+"]/td/div[@class='coy']"; } FM_log(4,"cityExp1:"+cityExp1); FM_log(4,"cityExp2:"+cityExp2); if(dom.xs(cityExp1)!=null) { X = dom.xs(cityExp1).textContent.match(/[-\d]+/); Y = dom.xs(cityExp2).textContent.match(/[-\d]+/); } else { FM_log(2,"Travian Beyond table conflicting"); if(vT35==1) { TBExp1 = citiesExp + "/tr["+i+"]/td[@class='x']"; TBExp2 = citiesExp + "/tr["+i+"]/td[@class='y']"; } else { TBExp1 = citiesExp + "/tr["+i+"]//td[@class='cox']"; TBExp2 = citiesExp + "/tr["+i+"]//td[@class='coy']"; } FM_log(4,"TBExp1="+TBExp1); FM_log(4,"TBExp2="+TBExp2); X = dom.xs(TBExp1).textContent.match(/[-\d]+/); Y = dom.xs(TBExp2).textContent.match(/[-\d]+/); } if (i > 1) idList += ","; idList += xy2id(X, Y); } } else { //TBeyond table FM_log(4,"only 1 village - TBeyond table"); cityExp1 = citiesExp + "/tr[1]/td[@class='x']"; cityExp2 = citiesExp + "/tr[1]/td[@class='y']"; if(dom.xs(cityExp1)==null) { cityExp1 = citiesExp + "/tr[1]//td[@class='cox']"; cityExp2 = citiesExp + "/tr[1]//td[@class='coy']"; } X = dom.xs(cityExp1).textContent.match(/[-\d]+/); Y = dom.xs(cityExp2).textContent.match(/[-\d]+/); idList += xy2id(X, Y); } FM_log(4,"idList="+idList); return idList; } } catch(error) { FM_log(0,"getAllVillageId(): Error retrieving all village IDs"); } } function getActiveVillageXY() { //retrieve coordinates of active Village from Villagelist try { FM_log(3,"getActiveVillageXY() called"); //get Travian Version vT35 = GM_getValue("TravianVersion_" + suffixGlobal, 0); var xy = new Array(); if(vT35 == 1) { // old search strings for de-servers FM_log(4,"old T35 version"); var ex1 = "//tr[@class='sel']"; var ex1_1 = "//tr[@class='sel']/td[@class='x']"; var ex1_2 = "//tr[@class='sel']/td[@class='y']"; } else if (vT35 == 2) { //new T35-Version FM_log(4,"new T35 version"); var ex1 = "//td[@class='dot hl']/parent::tr"; var ex1_1 = "//td[@class='dot hl']/parent::tr/td/div[@class='cox']"; var ex1_2 = "//td[@class='dot hl']/parent::tr/td/div[@class='coy']"; if(dom.xs(ex1_1)==null) { //different Version: it9 ex1_1 = "//td[@class='dot hl']/parent::tr//td[@class='cox']"; ex1_2 = "//td[@class='dot hl']/parent::tr//td[@class='coy']"; } FM_log(4,"ex1: "+ex1); } else { FM_log(0,"unknown Travian Version"); } var villageNode = dom.xo(ex1); FM_log(5,"villageNode.snapshotLength="+villageNode.snapshotLength); if (villageNode.snapshotLength > 0) { FM_log(3,"villageTable existing"); xy.push(dom.xs(ex1_1).textContent.match(/[-\d]+/)); xy.push(dom.xs(ex1_2).textContent.match(/[-\d]+/)); } else { FM_log(3,"villageTable not existing - Single Village Account"); xy.push(""); xy.push(""); } //alert(xy); if (xy[0] == "" || xy[1] == "") { //single Village var singleVillageXY = GM_getValue('SingleVillageXY_' + suffixGlobal, ''); if (!singleVillageXY || singleVillageXY == '') { //grab coordinates for the first time xy = getSingleVillageXY(); } else { xy = singleVillageXY.split(","); } } FM_log(4,"retrieved coords: X="+xy[0]+"/Y="+xy[1]); return xy; } catch(error) { FM_log(0,"getActiveVillageXY(): error retrieving coordinates"); } } function getSingleVillageXY() { //retrieve coordinates for single village account try { var url = document.URL; url = url.substring(0, url.lastIndexOf('/') + 1); url = url + 'karte.php'; GM_xmlhttpRequest({ method : 'GET', url : url, onload : function(responseDetails) { if (responseDetails.status != 200) return new Array(0, 0); var div = dom.cn('div', responseDetails.responseText); var ansDoc = document.implementation.createDocument('', '', null); ansDoc.appendChild(div); var x = ansDoc.getElementById('x').firstChild.nodeValue; var y = ansDoc.getElementById('y').firstChild.nodeValue; var singleVillageCoords = x + ',' + y; GM_setValue('SingleVillageXY_' + suffixGlobal, singleVillageCoords); return new Array(x, y); } }); } catch(error) { FM_log(0,"getSingleVillageXY(): error retrieving coordinates"); } } function xy2id(x, y) { //calculate village ID from coordinates return (1 + (parseInt(x) + 400) + (801 * Math.abs(parseInt(y) - 400))); } function id2xy(id) { //calculate village coordinates from ID var x = (id % 801) - 401; var y = 400 - (id - 401 - x) / 801; return { x : x, y : y }; } /** * getParamFromUrl * @param {String} url The string of the URL * @param {String} urlParam The param being searched in the URL */ function getParamFromUrl(url, urlParam) { var res = "&" + url.substring(url.indexOf("?") + 1); //exclude "?" and before that var searchStr = "&" + urlParam + "="; var pos = res.indexOf(searchStr); if (pos != -1) { res = res.substring(res.indexOf(searchStr) + searchStr.length); var endPos = (res.indexOf("&") > res.indexOf("#")) ? res.indexOf("&") : res.indexOf("#"); if (endPos != -1) { res = res.substring(0, endPos); } return res; } else { return null; } } //message window functions /** * set text message to the runningDiv. If title is blank then it append the message with the previous message * @param {} titleStr * @param {} messageStr */ function drawMessageBox() { FM_log(3,"drawMessageBox() called"); runningDiv = dom.cn("div"); //global runningDiv .setAttribute( "style", "text-align:center; margin:auto; position:absolute; top:"+400+"px; left:"+700+"px; width:320px; height:180px; background-color: #F8F8FF; border: 2px solid #c0c0c0; -moz-border-radius: 5px; z-index:"+zIndex); var tempDiv = dom.cn("div"); tempDiv .setAttribute( "style", "font-size:12px; margin-bottom:6px; font-weight:bold; color:red; border-bottom: 1px solid #c0c0c0; padding: 3px 0 3px 0;"); tempDiv.innerHTML = T('MACHINE_RUNNING') + "..."; runningDiv.appendChild(tempDiv); var textDiv = dom.cn("div"); textDiv .setAttribute( "style", "text-align:center; font-size:10px; margin:auto; overflow: auto; height:90px; border-bottom: 1px solid #c0c0c0;"); runningDiv.appendChild(textDiv); tempDiv = dom.cn("div"); tempDiv.setAttribute("style", "font-size: 10px; border-bottom: 1px solid #c0c0c0; margin:4px 0 4px 0; height: 16px;"); tempDiv.innerHTML = " "; runningDiv.appendChild(tempDiv); var pushButton = createInputButton("button", T("Halt_Farming"), function() { stopEngine(); }); runningDiv.appendChild(pushButton); document.body.appendChild(runningDiv); } function setAttackMessage() { FM_log(3,"setAttackMessage() called"); prioque = GM_getValue('priorityqueue'+ suffixLocal, '').split('>:)'); fque = GM_getValue('farmqueue'+ suffixLocal, '').split('>:)'); if (prioque.length >= 1 && prioque[0].length > 2) { FM_log(3,"priority attack"); var arr = prioque[0].split("|"); priorityAttack = true; attackList = prioque }else{ var arr = fque[0].split("|"); attackList = fque; priorityAttack = false; } tX = arr[0].split(",")[0]; tY = arr[0].split(",")[1]; sIndex = getSindexFromXY(tX,tY, suffixLocal); var titleStr = T("Going_to") + " " + (arr[8] == 2 ? T("Reinforce") : (arr[8] == 3 ? T("Attack") : T("Raid"))); var messageStr = "["+sIndex+"] "+E2C(arr[3]) + " - "; // FPlayerName messageStr += E2C(arr[5]); messageStr += "<b>(" + arr[0] + ")</b><br>"; // X,Y messageStr += T("Used_Troops") + ": "; arr[1] = arr[1].split(","); if (parseInt(arr[1][0])) { messageStr += " : " + arr[1][0] + " "; } for (var i = 1; i < 10; i++) { if (parseInt(arr[1][i]) > 0) { messageStr += " " + arr[1][i] + " "; } } setTextMessage(titleStr, messageStr); } function setTextMessage(titleStr, messageStr) { if (titleStr != "") { runningDiv.childNodes[1].innerHTML = "<div style='font-size:14px; font-weight:bold; color:black'>" + titleStr + "</div>"; } runningDiv.childNodes[1].innerHTML += messageStr + "<br>"; var attackCount = GM_getValue("Active_" + suffixGlobal, 0); runningDiv.childNodes[2].innerHTML = T('SUCCESS_COUNT') + ": " + attackCount; } //add farm pop up function insertEditFarmBox() { FM_log(3,"insertEditFarmBox() called"); var i; div = document.createElement('div'); div.id = "popupFarmEditBox"; div.style.visibility = 'hidden'; div.style.zIndex = 100; div.style.position = 'absolute'; div.style.borderWidth = '1px'; div.style.top = '600px'; div.style.left = '150px'; //getting default troops tempTroops = defTroops.split(','); FM_log(4,"tempTroops arraysize="+tempTroops.length); if(tempTroops.length!=11) { defTroops = "0,0,0,0,0,0,0,0,0,0,0"; tempTroops = defTroops.split(','); } var text = "<fieldset style='background-color: #F8F8FF; border: 1px solid #C0C0C0; -moz-border-radius: 10px;'>" + "<legend style='background-color: #F4F7EC; border-top: 1px solid #C0C0C0; -moz-border-radius: 2px;'>Add/Edit Farm</legend>" + "<img src='img/x.gif' class='unit u" + (user_race) + "'>:<input type='text' size='1' value='" + tempTroops[0] + "' id='t1'>"; for (i = 1; i < 10; i++) { text += "<img src='/img/x.gif' class='unit u" + (user_race + i) + "'>:<input type='text' size='1' value='" + tempTroops[i] + "' id='t" + (i + 1) + "'>"; } text += "<img src='/img/x.gif' class='unit uhero'>:<input type='text' size='1' value='" + tempTroops[10] + "' id='t" + (10 + 1) + "'>"; text += "<br/>" + "<input type='radio' id='radio2' name='AttackType' value='2' />" + T("Reinforce") + "<input type='radio' id='radio3' name='AttackType' value='3' />" + T("Attack") + "<input type='radio' id='radio4' name='AttackType' checked='true' value='4' />" + T("Raid") + "<br />" + "<input type='checkbox' checked='true' id='activeCheck' />" + T("Active_Farm") + "<br />" + "<input style='float: right;' id='FMcancelButton' type='submit' value=" + T('Cancel') + " />" + "<input style='float: right;' id='FMsaveButton' type='submit' value=" + T('Save') + " /></fieldset>"; div.innerHTML = text; document.body.appendChild(div); dom.get('FMcancelButton').addEventListener('click', hidePopupFarmEditBox, true); FM_log(3,"FarmEditBox Insert done"); //Add the event listener for Save button in appropiate place :) } function showPopupFarmEditBox() { var farmEditBox = null; if ((farmEditBox = document.getElementById('popupFarmEditBox')) == null || farmEditBox == "undefined") { return; } farmEditBox.style.visibility = "visible"; } function hidePopupFarmEditBox() { var farmEditBox = null; if ((farmEditBox = document.getElementById('popupFarmEditBox')) == null || farmEditBox == "undefined") { return; } farmEditBox.style.visibility = "hidden"; } //set up options function rp_setStartIndex(index) { GM_setValue("StartIndex_" + suffixLocal, index); } function rp_setEndIndex(index) { GM_setValue("EndIndex_" + suffixLocal, index); } function rp_removeEndIndex() { GM_setValue("EndIndex_" + suffixLocal, -1); reloadFarmTable(); } function setVillageSkipping() { //Option VillageSkipping var vilSkip = GM_getValue("VillageSkipping_" + suffixGlobal, -1); if (vilSkip == 1) { GM_setValue("VillageSkipping_" + suffixGlobal, 0); } else { GM_setValue("VillageSkipping_" + suffixGlobal, 1); } } function setFarmMarking() { //Option Farm marking var farmMark = GM_getValue("farmMarking_" + suffixGlobal, -1); if (farmMark == 1) { GM_setValue("farmMarking_" + suffixGlobal, 0); } else { GM_setValue("farmMarking_" + suffixGlobal, 1); } } function setRandomFarming() { //Option Randomize var random = GM_getValue("RandomFarming_" + suffixGlobal, -1); if (random == 1) { GM_setValue("RandomFarming_" + suffixGlobal, 0); } else { GM_setValue("RandomFarming_" + suffixGlobal, 1); } } function setDelTList() { //Option Delete Temporary List var DelTList = GM_getValue("DelTList_" + suffixGlobal, -1); if (DelTList == 1) { GM_setValue("DelTList_" + suffixGlobal, 0); } else { GM_setValue("DelTList_" + suffixGlobal, 1); } } function setDynamicTroopCount() { //Option Dynamic Troop Count var DelTList = GM_getValue("DynamicTroopCount_" + suffixGlobal, -1); if (DelTList == 1) { GM_setValue("DynamicTroopCount_" + suffixGlobal, 0); } else { GM_setValue("DynamicTroopCount_" + suffixGlobal, 1); } } function setReadRep() { //Option Read Reports var ReadRep = GM_getValue("ReadRep_" + suffixGlobal, -1); if (ReadRep == 1) { GM_setValue("ReadRep_" + suffixGlobal, 0); } else { GM_setValue("ReadRep_" + suffixGlobal, 1); } } function min_max_settings() { //shows / hides the settings part if (GM_getValue("MaximizeSettings_" + suffixGlobal, 0) == 0) { GM_setValue("MaximizeSettings_" + suffixGlobal, 1); } else { GM_setValue("MaximizeSettings_" + suffixGlobal, 0); } reloadFarmTable(); } function rp_min_max() { //minimizes / maximizes the farming list if (GM_getValue("Maximize_" + suffixGlobal, 0) == 0) { GM_setValue("Maximize_" + suffixGlobal, 1); } else { GM_setValue("Maximize_" + suffixGlobal, 0); } reloadFarmTable(); } // Auto Login function loginCheck() { if (GM_getValue('wearein') == 1) { location.href = rootPath+"build.php?id=39"; GM_setValue('wearein', 0); } if (document.getElementsByName('login')) { var ex = ".//input[@value='login']"; tag = document.evaluate( ex, document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); var ex = ".//input[@type='password' and contains(@value, '*')]"; tag2 = document.evaluate( ex, document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); if(tag.snapshotLength && tag2.snapshotLength) { loginButton = tag.snapshotItem(0); loginButton.click(); GM_setValue('wearein', 1); } } } var ex = "id('errorTitleText')"; tag = document.evaluate( ex, document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); var ex2 = "id('content')/p[2]/a[contains(@href, 'del_cookie')]"; tag2 = document.evaluate( ex2, document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); if (tag.snapshotLength > 0) { setTimeout("window.location.replace('" + rootPath + "build.php?id=39')", 3000); } else if (tag2.snapshotLength > 0) { setTimeout("window.location.replace('" + rootPath + "login.php')", 3000); } else { loginCheck(); } //Update function updateFM(SCRIPT) { var loadImg = dom.cn("img"); loadImg.src = image['LOADING']; var updater = dom.get("updater"); updater.appendChild(loadImg); try { /*if (!GM_getValue) return;*/ GM_xmlhttpRequest({ method : 'GET', url : SCRIPT.url + '?source', onload : function(result) { updater.removeChild(loadImg); if (result.status != 200) { alert(T("UPDATE_M1")); return; } if (!result.responseText.match(/@version\s+([\d.]+)/)) { alert(T('UPDATE_UNKNOWN') + " v" + RegExp.$1); return; } var onlineVersion = RegExp.$1; var currentVersion = SCRIPT.version; if (onlineVersion == SCRIPT.version) { alert(T('UPDATE_LAST') + " " + T("Script_name") + ' (v' + onlineVersion + ')'); return; } else { currentVersion = currentVersion.split("."); var onlineArray = onlineVersion.split("."); if (currentVersion[0] <= onlineArray[0] || currentVersion[1] <= onlineArray[1] || currentVersion[2] <= onlineArray[2]) { var messageStr = ""; if (onlineArray[2] != 0) { messageStr = T('UPDATE_BETA'); } else { messageStr = T('UPDATE_NEW') + " v" + onlineVersion; } if (confirm(messageStr + "\n\n" + T('CONFIRM') + ":" + T('UPDATE_NOW') + "?")) { window.location.href = SCRIPT.url; GM_setValue("Tribe_" + suffixGlobal, -1); } } } } }); } catch (ex) { alert("AJAX request Exception! Try later."); } } //insert elements function rp_insertTable() { FM_log(3,"rp_insertTable() called"); var farmTable = dom.cn("table"); var ftableBody = dom.cn("tbody"); var i; var maximize = GM_getValue("Maximize_" + suffixGlobal, 0); farmTable.className = "FMtbg"; farmTable.id = "farmMachineTable"; farmTable.setAttribute('cellpadding', 0); farmTable.setAttribute('cellspacing', 0); farmTable.style.marginBotton = "12px"; //top row var tableRow = dom.cn("tr"); tableRow.className = "cbg1"; var tableCol = dom.cn("td"); tableCol.setAttribute("colspan", 15); var Button = dom.cn("div"); Button.id = "updater"; Button.setAttribute("style", "margin:auto; width: 477px;"); Button.appendChild(createLinkButton(T('UPDATE_M') + " " + T('SCRIPT_NAME'), T('UPDATE_M') + " " + T('SCRIPT_NAME'), function() { updateFM(SCRIPT); })); tableCol.appendChild(Button); tableRow.appendChild(tableCol); //Add Minimize||Maximize button tableCol = dom.cn("td"); var img = dom.cn("img"); if (maximize) { img.src = image['MINIMIZE']; //add minimize image img.title = T("Minimize"); } else { img.src = image['MAXIMIZE']; //add minimize image img.title = T("Maximize"); } img.style.height = '16px'; img.style.width = '30px'; img.style.cursor = "pointer"; Button = dom.cn("div"); Button.setAttribute("style", "width:30px;float:right;"); Button.appendChild(img); Button.addEventListener('click', function() { rp_min_max(); }, 0); tableCol.appendChild(Button); tableRow.appendChild(tableCol); ftableBody.appendChild(tableRow); //adding the top row //******************************** // option row tableRow = dom.cn("tr"); tableRow.className = "cbg1"; tableCol = dom.cn("td"); tableCol.setAttribute("colspan", 15); if(GM_getValue("MaximizeSettings_" + suffixGlobal, 0)==1) { tableRow = dom.cn("tr"); tableRow.className = "cbg1"; tableCol = dom.cn("td"); tableCol.setAttribute("colspan", 16); var settingsTable = dom.cn('table'); settingsTable.width = "100%"; settingsTable.setAttribute("margin-bottom",10); //1st option: randomiz farming var setRowRandomize = dom.cn('tr'); var setRandomizeC1 = dom.cn('td'); setRandomizeC1.width = 20; RandomButton = createInputButton("checkbox", 0, setRandomFarming); var random = GM_getValue("RandomFarming_" + suffixGlobal, 0); if (random == 1) { RandomButton.checked = true; } setRandomizeC1.appendChild(RandomButton); var setRandomizeC2 = dom.cn('td'); setRandomizeC2.innerHTML = T('SETRANDOMIZE'); setRowRandomize.appendChild(setRandomizeC1); setRowRandomize.appendChild(setRandomizeC2); //2nd option: delete temporary list var setRowDelTList = dom.cn('tr'); var setTListC1 = dom.cn('td'); setTListC1.width = 20; TListButton = createInputButton("checkbox", 0, setDelTList); var TList = GM_getValue("DelTList_" + suffixGlobal, 0); if (TList == 1) { TListButton.checked = true; } setTListC1.appendChild(TListButton); var setTListC2 = dom.cn('td'); setTListC2.innerHTML = T('SETDELTLIST'); setRowDelTList.appendChild(setTListC1); setRowDelTList.appendChild(setTListC2); //3rd option: read reports to make a priority queue var setRowReadRep = dom.cn('tr'); var setReadRepC1 = dom.cn('td'); setReadRepC1.width = 20; ReadRepButton = createInputButton("checkbox", 0, setReadRep); var ReadRep = GM_getValue("ReadRep_" + suffixGlobal, 0); if (ReadRep == 1) { ReadRepButton.checked = true; } setReadRepC1.appendChild(ReadRepButton); var setReadRepC2 = dom.cn('td'); setReadRepC2.innerHTML = T('SETREADREP'); setRowReadRep.appendChild(setReadRepC1); setRowReadRep.appendChild(setReadRepC2); //4th option: skipping of Villages var setRowVilSkip = dom.cn('tr'); var setVilSkipC1 = dom.cn('td'); setVilSkipC1.width = 20; SkipButton = createInputButton("checkbox", 0, setVillageSkipping); var vilSkip = GM_getValue("VillageSkipping_" + suffixGlobal, 0); if (vilSkip == 1) { SkipButton.checked = true; } setVilSkipC1.appendChild(SkipButton); var setVilSkipC2 = dom.cn('td'); setVilSkipC2.innerHTML = T('SETVILSKIP'); setRowVilSkip.appendChild(setVilSkipC1); setRowVilSkip.appendChild(setVilSkipC2); //5th option: marking of Farms var setRowFarmMark = dom.cn('tr'); var setFarmMarkC1 = dom.cn('td'); setFarmMarkC1.width = 20; farmMarkButton = createInputButton("checkbox", 0, setFarmMarking); var farmMark = GM_getValue("farmMarking_" + suffixGlobal, 0); if (farmMark == 1) { farmMarkButton.checked = true; } setFarmMarkC1.appendChild(farmMarkButton); var setFarmMarkC2 = dom.cn('td'); setFarmMarkC2.innerHTML = T('FARMMARKING'); setRowFarmMark.appendChild(setFarmMarkC1); setRowFarmMark.appendChild(setFarmMarkC2); //6th option: Adjust Troop Count var setRowDynamicTroopCount = dom.cn('tr'); var setDynamicTroopCountC1 = dom.cn('td'); setDynamicTroopCountC1.width = 20; DynamicTroopCountButton = createInputButton("checkbox", 0, setDynamicTroopCount); var DynamicTroopCount = GM_getValue("DynamicTroopCount_" + suffixGlobal, 0); if (DynamicTroopCount == 1) { DynamicTroopCountButton.checked = true; } setDynamicTroopCountC1.appendChild(DynamicTroopCountButton); var setDynamicTroopCountC2 = dom.cn('td'); setDynamicTroopCountC2.innerHTML = T('DYNAMICTROOPCOUNT'); setRowDynamicTroopCount.appendChild(setDynamicTroopCountC1); setRowDynamicTroopCount.appendChild(setDynamicTroopCountC2); // adding settingRows to the table settingsTable.appendChild(setRowRandomize); settingsTable.appendChild(setRowDelTList); settingsTable.appendChild(setRowReadRep); settingsTable.appendChild(setRowVilSkip); settingsTable.appendChild(setRowFarmMark); settingsTable.appendChild(setRowDynamicTroopCount); // add table tableCol.appendChild(settingsTable); tableRow.appendChild(tableCol); ftableBody.appendChild(tableRow); //add to table } // end option row //second row tableRow = dom.cn("tr"); tableRow.className = "cbg1"; tableCol = dom.cn("td"); tableCol.setAttribute("colspan", 16); tableCol.appendChild(createInputButton("submit", T('START_FARMING'), startEngine)); tableRow.appendChild(tableCol); ftableBody.appendChild(tableRow); //adding the second row //third row tableRow = dom.cn("tr"); tableRow.className = "cbg1"; //start tableCol = dom.cn("td"); tableCol.innerHTML = "<div style='cursor:help;' class='b' title='" + T('START_M') + "'>S</div>"; tableRow.appendChild(tableCol); tableCol = dom.cn("td"); //tableCol.innerHTML = "<div style='cursor:pointer;' class='b' title='Select End Position'>E</div>"; //tableCol.addEventListener("click",rp_removeEndIndex,false); tableCol.appendChild(createLinkButton("E", T('END_M'), rp_removeEndIndex)); tableRow.appendChild(tableCol); tableCol = dom.cn("td"); tableCol.innerHTML = "<div style='cursor:help;' class='b' title='" + T('EDIT_M') + "'>E</div>"; tableRow.appendChild(tableCol); tableCol = dom.cn("td"); tableCol.innerHTML = "<div style='cursor:help;' class='b' title='" + T('DELETE_M') + "'>D</div>"; tableRow.appendChild(tableCol); tableCol = dom.cn("td"); tableCol.width = "35%"; tableCol.appendChild(createLinkButton(T('FARM') + " ↓", T('SORT_FARM'), sortFarms)); tableRow.appendChild(tableCol); tableCol = dom.cn("td"); tableCol.innerHTML = '<td><img src="img/x.gif" class="unit u' + user_race + '"></td>'; tableRow.appendChild(tableCol); for (i = 1; i < 10; i++) { tableCol = dom.cn("td"); tableCol.innerHTML = '<td><img src="img/x.gif" class="unit u' + (user_race + i) + '"></td>'; tableRow.appendChild(tableCol); } tableCol = dom.cn("td"); tableCol.innerHTML = '<td><img src="img/x.gif" class="unit uhero"></td>'; tableRow.appendChild(tableCol); ftableBody.appendChild(tableRow); //adding the 3rd row //add List //getting first farm in list for sIndex prioque = GM_getValue('priorityqueue'+ suffixLocal, '').split('>:)'); fque = GM_getValue('farmqueue'+ suffixLocal, '').split('>:)'); if (prioque.length >= 1 && prioque[0].length > 2) { var arr = prioque[0].split("|"); var tX = arr[0].split(",")[0]; var tY = arr[0].split(",")[1]; var sIndex = getSindexFromXY(tX,tY, suffixLocal); } else if (fque.length >= 1 && fque[0].length > 2){ var arr = fque[0].split("|"); var tX = arr[0].split(",")[0]; var tY = arr[0].split(",")[1]; var sIndex = getSindexFromXY(tX,tY, suffixLocal); } else { sIndex = getStartIndex(); } FM_log(4,"starting farmrows for: "+suffixLocal); farmList = GM_getValue("FarmList_" + suffixLocal, ""); totalTroops = new Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); if (farmList != "" && farmList != null) { farmList = farmList.split(">:)"); var eIndex = getEndIndex(); FM_log(3,"sIndex="+sIndex+"/eIndex="+eIndex); if (farmList.length > 0) { for (i = 0; i < farmList.length; i++) { if (maximize == 1) { tableRow = rp_createFarmRow(i, sIndex, eIndex); if (tableRow != null) { ftableBody.appendChild(tableRow); } } else { //the i have to count totalTroops here var arr = farmList[i].split("|"); if (arr[7] == 'true') { arr[1] = arr[1].split(","); for (var j = 0; j < arr[1].length; j++) { totalTroops[j] += parseInt(arr[1][j]); } } } } } } else { tableCol = dom.cn("td"); tableCol.setAttribute("colspan", 16); tableCol.innerHTML = "<div style='margin: auto;'>" + T('NO_FARM_YET') + "</div>"; ftableBody.appendChild(tableCol); } //bottom row tableRow = dom.cn("tr"); tableRow.className = "cbg1"; tableCol = dom.cn("td"); tableCol.setAttribute("colspan", 5); //Optimize button img = dom.cn("img"); img.src = image['OPTIMIZE']; img.title = T('OPTIMIZE_M'); img.style.height = '16px'; img.style.width = '16px'; img.style.cursor = "pointer"; Button = dom.cn("div"); Button.setAttribute("style", "width:16px;float:left;"); Button.appendChild(img); Button.addEventListener('click', function() { optimizeFarmsByDistance(); }, 0); tableCol.appendChild(Button); //add space Button = dom.cn("div"); Button.innerHTML = " "; Button.setAttribute("style", "width:5px;float:left;"); tableCol.appendChild(Button); //Import/Export Button img = dom.cn("img"); img.src = image['IM_EXPORT']; img.title = T('LOCAL_IM_EX_M'); img.style.height = '16px'; img.style.width = '16px'; img.style.cursor = "pointer"; Button = dom.cn("div"); Button.setAttribute("style", "width:16px;float:left;"); Button.appendChild(img); Button.addEventListener('click', function() { importExport(); }, 0); tableCol.appendChild(Button); //add space Button = dom.cn("div"); Button.innerHTML = " "; Button.setAttribute("style", "width:5px;float:left;"); tableCol.appendChild(Button); //globalImportExport img = dom.cn("img"); img.src = image['GIM_EXPORT']; img.title = T('GLOBAL_IM_EX_M'); img.style.height = '16px'; img.style.width = '16px'; img.style.cursor = "pointer"; Button = dom.cn("div"); Button.setAttribute("style", "width:16px;float:left;"); Button.appendChild(img); Button.addEventListener('click', function() { globalImportExport(); }, 0); tableCol.appendChild(Button); //add space Button = dom.cn("div"); Button.innerHTML = " "; Button.setAttribute("style", "width:5px;float:left;"); tableCol.appendChild(Button); //Delete Farm list Button img = dom.cn("img"); img.src = image['DELTEMPLIST']; img.title = T('DELTEMPLIST'); img.style.height = '16px'; img.style.width = '16px'; img.style.cursor = "pointer"; Button = dom.cn("div"); Button.setAttribute("style", "width:16px;float:left;"); Button.appendChild(img); Button.addEventListener('click', function() { clearque(); alert("Farmlist and Prioritylist deleted"); }, 0); tableCol.appendChild(Button); //add space Button = dom.cn("div"); Button.innerHTML = " "; Button.setAttribute("style", "width:5px;float:left;"); tableCol.appendChild(Button); //Settings Button img = dom.cn("img"); img.src = image['SETTINGS']; img.title = T('UPDATE_SETTINGS'); img.style.height = '16px'; img.style.width = '16px'; img.style.cursor = "pointer"; Button = dom.cn("div"); Button.setAttribute("style", "width:16px;float:left;"); Button.appendChild(img); Button.addEventListener('click', function() { min_max_settings(); }, 0); tableCol.appendChild(Button); //append the row in the table tableRow.appendChild(tableCol); for (i = 0; i < 11; i++) { tableCol = dom.cn("td"); tableCol.innerHTML = totalTroops[i]; tableRow.appendChild(tableCol); } ftableBody.appendChild(tableRow); farmTable.appendChild(ftableBody); var container = dom.get("content"); container.appendChild(farmTable); } function rp_createFarmRow(index, sIndex, eIndex) { FM_log(3,"rp_createFarmRow() called"); var arr = farmList[index].split("|"); var troops = arr[1], i; //alert(troops); if (!(troops == null || troops == "")) { var tableRow = dom.cn("tr"); //the row FM_log(3,"rp_createFarmRow: Row Create Start"); if (index % 2 == 1) { tableRow.style.backgroundColor = "#F8F8F0"; } if (arr[7] == "false") { tableRow.className = "inactive"; } var tableCol = dom.cn("td"); //cell 1 //create start radio button var Button = createInputButton("radio", index); Button.name = "StartIndex"; Button.addEventListener("click", function() { rp_setStartIndex(index); }, false); if (sIndex == index) Button.checked = true; tableCol.appendChild(Button); tableRow.appendChild(tableCol); // add the cell tableCol = dom.cn("td"); //cell 2 //create End radio button Button = createInputButton("radio", index); Button.name = "EndIndex"; Button.addEventListener("click", function() { rp_setEndIndex(index); }, false); if (eIndex == index) Button.checked = true; tableCol.appendChild(Button); tableRow.appendChild(tableCol); // add the cell var img; //create Edit button img = dom.cn("img"); img.src = image['EDIT']; img.title = T('EDIT_FARM'); img.setAttribute("style", "height: 14px; width:14px; cursor: 'pointer';"); Button = dom.cn("div"); Button.appendChild(img); Button.addEventListener('click', createEditFarmCallback(index), 0); //adding clicking event tableCol = dom.cn("td"); tableCol.appendChild(Button); tableRow.appendChild(tableCol); //create Delete button img = dom.cn("img"); img.src = image['DELETE']; img.title = T('DELETE_FARM'); img.setAttribute("style", "height: 14px; width:14px; cursor: 'pointer';"); Button = dom.cn("div"); Button.appendChild(img); //Button.addEventListener("mouseup", function(this){moveEditFarmBox(this)},0); Button.addEventListener('click', createRemoveFarmCallback(index), 0); //adding clicking event tableCol = dom.cn("td"); tableCol.appendChild(Button); tableRow.appendChild(tableCol); //Farm tableCol = dom.cn("td"); var xy = arr[0].split(","); var fvillageId = xy2id(parseInt(xy[0]), parseInt(xy[1])); //alert(fvillageId); //alert(arr[3]); if(arr[6]!="$") { tableCol.innerHTML = "<div style='text-align:left;'>[" + index + "] " /*+"<a href='spieler.php?uid="+arr[4]+"'>"+E2C(arr[3])+"</a> "*/ + "<a href='/karte.php?d=" + fvillageId + "&c=" + arr[6] + "' title='" + E2C(arr[3]) + " : " + E2C(arr[5]) + "'>(" + xy[0] + "|" + xy[1] + ")</a>" + "</div>"; } else {tableCol.innerHTML = "<div style='text-align:left;'>[" + index + "] " + "<a href='/karte.php?z=" + fvillageId + "' title='" + E2C(arr[3]) + " : " + E2C(arr[5]) + "'>(" + xy[0] + "|" + xy[1] + ")</a>" + "</div>"; } tableRow.appendChild(tableCol); troops += " "; troops = troops.split(','); FM_log(3,"rp_createFarmRow: troops Get splited by comma"); for (i = 0; i <= 10; i++) { tableCol = dom.cn("td"); tableCol.innerHTML = troops[i]; if (arr[7] == 'true') { //only count active troops totalTroops[i] += parseInt(troops[i]); } tableRow.appendChild(tableCol); } FM_log(3,"rp_createFarmRow: Returing the row"); return tableRow; } else { if (confirm(index + " " + T('INVALID_FARM'))) { farmRemove(index); } return null; } } function createLinkButton(text, title, jsFunction) { var button = dom.cn("a"); button.href = "javascript:void(0)"; button.innerHTML = text; button.title = title; if (jsFunction != null) { button.addEventListener('click', jsFunction, false); } return button; } function createInputButton(type, value, jsFunction) { var inputButton = dom.cn("input"); inputButton.type = type; // type bepalen inputButton.value = value; if (jsFunction != null) { inputButton.addEventListener('click', jsFunction, false); } return inputButton; } function villageCheckBox(event) { FM_log(3,"villageCheckBox() called"); //alert(event.currentTarget.id); var cb = event.currentTarget; var vList = GM_getValue("FarmerVillages_" + suffixGlobal, ""); var i; var vid = cb.id.split("_")[1]; var newList = ""; if (cb.checked) { //selected if (vList != "" && vList != null) { vList = vList.split(","); for (i = 0; i < vList.length; i++) { if (vList[i] == vid) return; newList += vList[i] + ","; } } newList += vid; } else {//deselect if (vList == "" || vList == null) return; vList = vList.split(","); for (i = 0; i < vList.length; i++) { if (vList[i] != vid) { if (newList != "") newList += ","; newList += vList[i]; } } } GM_setValue("FarmerVillages_" + suffixGlobal, newList); } //utility functions /* function FM_log(level, text) { if(false) { alert(text); } } */ function FM_log(level, msg){ if (level <= logLevel) { var ld = new Date(); GM_log(msg); } }; function getNumber(tekst) { //alert(tekst.indexOf("'")+1+" "+tekst.lastIndexOf("'")); if ((tekst.indexOf("=") + 1) == 0 && tekst.lastIndexOf(";") == -1) { return 0; } else { return tekst.substring(tekst.indexOf("=") + 1, tekst.indexOf(";")); } } function Random(minimum, maximum) { if (minimum == null || maximum == null) { minimum = minWait; maximum = maxWait; } /*var rand=Math.round(Math.random()*maximum); rand = rand<minimum ? minimum : rand; rand = rand>maximum ? maximum : rand; return rand;*/ var range = maximum - minimum + 1; return (Math.floor(Math.random() * Math.pow(10, ("" + range).length)) % range) + parseInt(minimum); } function createEditFarmCallback(itemToEdit) { FM_log(3,"createEditFarmCallback("+itemToEdit+") called"); return function(event) { editFarm(itemToEdit, event); } } function createRemoveFarmCallback(sequence) { return function() { farmRemove(sequence); } } function regxRemoveAll(str, regx, newVal) { if (newVal == null) newVal = ""; while (regx.test(str)) { str = str.replace(regx, newVal); } return str; } function globeDistance(a, b) { //calculate globe distance var dist1 = (a > b) ? Math.abs(a - b) : Math.abs(b - a); var dist2 = (a > b) ? (Math.abs(400 - a) + Math.abs(-400 - b)) : (Math .abs(400 - b) + Math.abs(-400 - a)); var distFinal = (dist1 < dist2) ? dist1 : dist2; return distFinal; } function coordDistXYtoXY(x1, y1, x2, y2) { //calculate distance between two villages var distX = globeDistance(x1, x2); var distY = globeDistance(y1, y2); var dist = Math.sqrt((distX * distX) + (distY * distY)); return dist; } function trim(str, chars) { return trimL(trimR(str, chars), chars); } function trimL(str, chars) { chars = chars || "\\s"; return str.replace(new RegExp("^[" + chars + "]+", "g"), ""); } function trimR(str, chars) { chars = chars || "\\s"; return str.replace(new RegExp("[" + chars + "]+$", "g"), ""); } function C2E(str) { //encode characters to HTML safe code (by Alberto Biamino) str = str.replace(/&/g, '&'); str = str.replace(/'/g, '''); str = str.replace(/"/g, '"'); str = str.replace(/\\/g, '\'); var acc = ''; for (var i = 0; i < str.length; i++) { if ((str.charCodeAt(i) > 31 && str.charCodeAt(i) < 127) && str.charAt(i) != '|') acc += str.charAt(i) else acc += '&#' + str.charCodeAt(i) + ';'; } return acc; } function E2C(str) { //decode HTML safe code to characters (by Alberto Biamino) /*str = str.split(";"); for(var i=0; i<str.length; i++){ if(str[i].charAt(0)=='&' && str[i].charAt[1]=='#'){ str[i] = str[i].replace(/&#([0-9]+);/g, '$1'); str[i] = String.fromCharCode(str[i]); } } return str.join('');*/ str = str.replace(/(&#[0-9]+;)/g, '\n$1\n'); str = str.replace(/\n\n/g, '\n'); spl = str.split('\n'); for (var i = 0; i < spl.length; i++) { if (spl[i].charAt(0) == '&') { spl[i] = spl[i].replace(/&#([0-9]+);/g, '$1'); spl[i] = String.fromCharCode(spl[i]); } } str = spl.join(''); return str; } //DOM functions function DOMUtils(doc, ctxt, html) { // from FranMod this.cn = function(tag, html) { var elem = this.document.createElement(tag); if (html) elem.innerHTML = html; return elem; } this.ct = function(text) { return this.document.createTextNode(text); } this.id = function(id) { return this.document.getElementById(id); } this.tag = function(tag) { return this.document.getElementsByTagName(tag); } this.xs = function(xpath) { var res = this.document.evaluate(xpath, this.context, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null); return res.singleNodeValue; } this.xa = function(xpath) { var arr = []; var xpr = this.document.evaluate(xpath, this.context, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); for (var i = 0; item = xpr.snapshotItem(i); i++) arr.push(item); return arr.length == 0 ? null : arr; } this.xo = function(xpath) { var ret = this.document.evaluate(xpath, this.context, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); return ret; //no snapshot } this.find = function(xpath, xpres, doc) { if (!doc) doc = document; else if (typeof doc == 'string') doc = cn('div', doc); var ret = document.evaluate(xpath, doc, null, xpres, null); return xpres == XPFirst ? ret.singleNodeValue : ret; } this.get = function(id, doc) { if (!doc) doc = document; return doc.getElementById(id); } if (!doc) doc = document; if (!ctxt) ctxt = doc; if (html) { this.document = doc.implementation.createDocument('', '', null); this.context = doc.createElement('div'); this.context.innerHTML = html; ansDoc.appendChild(this.context); } else { this.document = doc; this.context = ctxt; } } function find(xpath,xpres){ var ret=document.evaluate(xpath,document,null,xpres,null); return xpres==XPFirst ? ret.singleNodeValue : ret; } //language functions function T(str) { //String Translation var name = str.toUpperCase(); if (lang[name] != undefined) { return lang[name]; } else { str = str.toLowerCase(); return "^" + str.substr(0, 1).toUpperCase() + str.substr(1); } } function setLanguage() { //define language elements FM_log(3,"setLanguage() called"); var ext = server.substring(server.lastIndexOf('.') + 1); //default English lang = { 'UPDATE_M' : "Güncelle", 'UPDATE_M1' : "UserScripts.org adresi bulunamadi.", 'UPDATE_UNKNOWN' : "Versiyon numarasi görüntelenemiyor :", 'UPDATE_LAST' : "en ynei versiyon sahibisinizt", 'UPDATE_BETA' : "yeni bir beta sürüm var", 'UPDATE_NEW' : "yeni güncelleme mevcut", 'UPDATE_NOW' : "simdi güncellemek istermisini?", 'CONFIRM' : "eminmisiniz", 'REMOVING' : "iptal", 'SWITCH_V' : "diger köye gec", 'AFTER' : "sonraki", 'SEC' : "ikinci", 'NO_VILLAGE' : "köye gönderilemiyor!", 'WAITING' : "bekleniyor", 'BEFORE_RE' : "önce kontrol.", 'ADD_FARM' : "hedef köye git", 'TROOP_CONFIG' : "asker ayarlari", 'ATTACK' : "saldiri", 'REINFORCE' : "destek", 'RAID' : "yagma", 'ACTIVE_FARM' : "eklenmis yagma köyü", 'CANCEL' : "vazgec", 'SAVE' : "kaydet", 'ADD_TO' : "eklenen :", 'ADD_AS' : "yagmaya eklenen", 'GLOBAL_IM_EX_PROMPT' : "tüm bilgileri yedekle / yükle", 'GLOBAL_IM_EX_M' : "tüm bilgileri raw olarak yedekle / yükle", 'LOCAL_IM_EX_PROMPT' : "kopyala / yapistir", 'LOCAL_IM_EX_M' : "genel köylerin bilgileriniy edekle / yapistir", 'OPTIMIZE_DONE' : "Mesafeye göre siralandi", 'OPTIMIZE_M' : "secilen köyden itibaren mesafe sirlandirilsin.", 'OPTIMIZE_SM' : "mesafe siralamasi icin git", 'INVALID_FARM' : "yagma gönderiemiyor. silinmis olabilir?", 'DELETE_FARM' : "listeden sil.", 'EDIT_FARM' : "yeniden düzenle", 'NO_FARM_YET' : "yagma gönderilecek köyleri sec", 'FARM' : "yagma", 'SORT_FARM' : "mesafeye göre sirala", 'DELETE_M' : " X isareti ile silebilirsin", 'EDIT_M' : "edit sembolu ile düzenleme", 'END_M' : "noktayi tasidiginiz yerden asagisi listeden silinsin", 'START_M' : "yagmayi baslatacagin baslangic noktasi", 'START_FARMING' : "BASLAT", 'MINIMIZE' : "Köy listesini kapa", 'MAXIMIZE' : "Köy listesini ac", 'FARM_INACTIVE' : "gönderilmeyecek sekidle kaydet", 'ERROR' : "HATA", 'NOT_ENOUGH' : "Yetersiz asker", 'AVAILABLE' : "mevcut", 'NEEDED' : "gereken", 'TROOPS_GONE' : "Gönderildi", 'NEXT_FARM' : "Siradaki köy", 'SUCCESS_COUNT' : "TOPLAM GÖNDERILEN YAGMA SAYISI", 'HALT_FARMING' : "DURDUR", 'MACHINE_RUNNING' : "Ben yagma atiyom sen git TV izle ..:)", 'CHANGE_VILLAGE' : "Tekrar deneniyor", 'NO_FARM' : "yetersiz asker...bekleniyor", 'NOT_FARMER' : "bu köy artik yok", 'USED_TROOPS' : "Giden asker miktari:", 'GOING_TO' : "gönderi sekli..", 'INSTALL_M1' : "Köy üzerinden yagma listesine ekle", 'INSTALL_M2' : "Bol Yagmalar", 'TRIBE_SELECT1' : "IRK", 'TRIBE_SELECT2' : "Irkinizi secin.", 'TRIBE_SELECT3' : "hatali sectiniz standart olarak biz ayarladik.", 'ROMAN' : "ROMALI", 'TEUTON' : "CERMEN", 'GAUL' : "Galya", //Settings 'SETRANDOMIZE' : "Rastgele sirali yolla", 'SETREADREP' : "Raporlari incele , öncelikli yolla", 'SETDELTLIST' : "otomatik hafiza silimi", 'DELTEMPLIST' : "elle sil", 'UPDATE_SETTINGS' : "Güncelleme ayarlari", 'SETVILSKIP' : "Köy atlama etkinleştirin", 'FARMMARKING' : "Eklenen köyleri haritada renklendir", 'DYNAMICTROOPCOUNT' : "bos dönen köylerden asker azalt" } //for other language if (ext == "cz") { //Language:Czech, Translator : Rypi lang = { 'UPDATE_M' : "Aktualizovat", 'UPDATE_M1' : "UserScripts.org nenalezeno.", 'UPDATE_UNKNOWN' : "Verze se neshodují :", 'UPDATE_LAST' : "Používáš poslední verzi", 'UPDATE_BETA' : "Je dostupná nová BETA verze", 'UPDATE_NEW' : "Je dostupná nová verze", 'UPDATE_NOW' : "Chceš aktualizovat teď", 'CONFIRM' : "Jsi si jistý", 'REMOVING' : "Odebírání", 'SWITCH_V' : "Prepínám vesnici na", 'AFTER' : "za", 'SEC' : "sekund", 'NO_VILLAGE' : "Žádná další vesnice!", 'WAITING' : "Cekám", 'BEFORE_RE' : "pred kontrolou.", 'ADD_FARM' : "Pridávám farmu", 'TROOP_CONFIG' : "Konfigurace jednotek je", 'ATTACK' : "Útok", 'REINFORCE' : "Podpora", 'RAID' : "Loupež", 'ACTIVE_FARM' : "Aktivní farma", 'CANCEL' : "Storno", 'SAVE' : "Uložit", 'ADD_TO' : "Pridat do", 'ADD_AS' : "Pridat jako farmu", 'GLOBAL_IM_EX_PROMPT' : "Kopírovat / Vložit data všech vesnic", 'GLOBAL_IM_EX_M' : "Importovat, Exportovat data všech vesnic", 'LOCAL_IM_EX_PROMPT' : "Kopírovat / Vložit data", 'LOCAL_IM_EX_M' : "Importovat, Exportovat data této vesnice", 'OPTIMIZE_DONE' : "Úspešne provedena optimalizace vzdálenosti", 'OPTIMIZE_M' : "Optimalizuj farmy ve vybraných vesnicích podle vzdálenosti.", 'OPTIMIZE_SM' : "Budu optimalizovat všechny farmy ve vybraných vesnicích podle vzdálenosti", 'INVALID_FARM' : "Nastavení farmy je neplatné! Odebrat?", 'DELETE_FARM' : "Smazat farmu", 'EDIT_FARM' : "Upravit farmu", 'NO_FARM_YET' : "Nastav si nejakou farmu (prehled cizý vesnice po kliknutí na mapu)", 'FARM' : "Farma", 'SORT_FARM' : "Seradit farmy podle vzdálenosti od soucasné vesnice", 'DELETE_M' : "Klikni na X pro smazání farmy", 'EDIT_M' : "Klikni na EDIT pro úpravu farmy", 'END_M' : "Vyber koncovou pozici, klikne zde pro odebrání konce", 'START_M' : "Vyber zacátecní pozici z tohoto sloupce", 'START_FARMING' : "Zacít farmit od zvolené vesnice", 'MINIMIZE' : "Minimalizovat", 'MAXIMIZE' : "Maximalizovat", 'FARM_INACTIVE' : "Farma nastavena jako neaktivní", 'ERROR' : "Chyba", 'NOT_ENOUGH' : "Málo jednotek pro vyloupení", 'AVAILABLE' : "Dostupné", 'NEEDED' : "Potreba", 'TROOPS_GONE' : "Jednotky na ceste do", 'NEXT_FARM' : "Vyber další farmu", 'SUCCESS_COUNT' : "Celkem úspešne poslaných loupeží", 'HALT_FARMING' : "Zastavit farmení", 'MACHINE_RUNNING' : "Farming Machine je spuštená", 'CHANGE_VILLAGE' : "Zkouším zmenit vesnici", 'NO_FARM' : "Žádná farma není dostupná.", 'NOT_FARMER' : "Tohle není Farmárská vesnice", 'USED_TROOPS' : "Použité jednotky", 'GOING_TO' : "Jdeš do", 'INSTALL_M1' : "Pro pridání farmy ji najdi na mape a klikni na ni", 'INSTALL_M2' : "Veselé farmení", 'TRIBE_SELECT1' : "Jaké jsi národnosti", 'TRIBE_SELECT2' : "Prosím zvol správné císlo.", 'TRIBE_SELECT3' : "Nenastavil jsi správné císlo, Nastavuji si te jako Rímana.", 'ROMAN' : "Roman", 'TEUTON' : "Teuton", 'GAUL' : "Gaul", //Settings 'SETRANDOMIZE' : "Náhodné farmení", 'SETREADREP' : "Analizovat reporty a udelat prioritní seznam", 'SETDELTLIST' : "Smazat docasný seznam pri vypnutí", 'DELTEMPLIST' : "Smazání docasného seznamu rucne", 'UPDATE_SETTINGS' : "Nastavení", 'SETVILSKIP' : "Preskakovat aktivní vesnici", 'FARMMARKING' : "Ukazovat farmy na mape", 'DYNAMICTROOPCOUNT' : "Vojska Dynamics" } } else if (ext == "pt") { //Language:Portuguese, Translator : Fujis & MyDooMJr & Black_Blood lang = { 'UPDATE_M' : "Actualizar", 'UPDATE_M1' : "UserScripts.org não encontrado.", 'UPDATE_UNKNOWN' : "A versão não coincide :", 'UPDATE_LAST' : "última versão disponível", 'UPDATE_BETA' : "Nova versão BETA disponível", 'UPDATE_NEW' : "Nova versão disponível", 'UPDATE_NOW' : "Actualizar já", 'UPDATE_NOW' : "Actualizar ", 'CONFIRM' : "Tem a certeza", 'REMOVING' : "A Remover", 'SWITCH_V' : "Substituir para a aldeia", 'AFTER' : "Depois de", 'SEC' : "Segundos", 'NO_VILLAGE' : "Nã há aldeias disponiveis!", 'WAITING' : "Em espera", 'BEFORE_RE' : "Antes verificar novamente.", 'ADD_FARM' : "Adicionar Farm", 'TROOP_CONFIG' : "Configuração de tropas", 'ATTACK' : "Ataque", 'REINFORCE' : "Reforço", 'RAID' : "Assalto", 'ACTIVE_FARM' : "Farm activo", 'CANCEL' : "Cancelar", 'SAVE' : "Guardar", 'ADD_TO' : "Adicionar", 'ADD_AS' : "Adicionar como Farm", 'GLOBAL_IM_EX_PROMPT' : "Copiar todos os dados da aldeia ou copiar de copia de segurança", 'GLOBAL_IM_EX_M' : "Importar ou Exportar lista de Farms de todas as aldeias", 'LOCAL_IM_EX_PROMPT' : "Copiar dados / Colar novos dados", 'LOCAL_IM_EX_M' : "Importar ou Exportar lista de Farms desta aldeia", 'OPTIMIZE_DONE' : "Melhoramento de distancias feito com sucesso", 'OPTIMIZE_M' : "Melhorar Farms nas aldeias tendo em conta a distancia.", 'OPTIMIZE_SM' : "Melhorar todos os Farms da aldeia seleccionada por distancias", 'INVALID_FARM' : "Tropas invalidas! Deseja Remover?", 'DELETE_FARM' : "Apagar Farm.", 'EDIT_FARM' : "Editar farm", 'NO_FARM_YET' : "Activar qualquer aldeia da página do perfil da aldeia", 'FARM' : "Farm", 'SORT_FARM' : "Dispor Farms pela distancia a aldeia actual", 'DELETE_M' : "Clicar no icon X para apagar o Farm", 'EDIT_M' : "Clicar no icon Editar para editar o Farm", 'END_M' : "Seleccionar fim do Farming a partir desta coluna, clicar para remover fim", 'START_M' : "Seleccionar inicio do Farming a partir desta coluna", 'START_FARMING' : "Iniciar Farming das aldeias seleccionadas", 'MINIMIZE' : "Minimizar", 'MAXIMIZE' : "Maximizar", 'FARM_INACTIVE' : "Farm Inactivo", 'ERROR' : "Erro Detectado", 'NOT_ENOUGH' : "Tropas insuficientes para efectuar assalto a", 'AVAILABLE' : "Disponivel", 'NEEDED' : "Necessário", 'TROOPS_GONE' : "Tropas a caminho de", 'NEXT_FARM' : "Seleccionar proximo Farm", 'SUCCESS_COUNT' : "Número total de envios com sucesso", 'HALT_FARMING' : "Parar Farming", 'MACHINE_RUNNING' : "Programa de Farms activo", 'CHANGE_VILLAGE' : "A tentar substituir a aldeia", 'NO_FARM' : "Farm não disponivel", 'NOT_FARMER' : "Esta não é a aldeia de um Farm", 'USED_TROOPS' : "Tropas utilizadas", 'GOING_TO' : "Enviadas para", 'INSTALL_M1' : "Adicionar novo Farm 1- Mapa 2- Aldeia do Farm 3- Adicionar", 'INSTALL_M2' : "Happy Farming : Have FUN :D!", 'TRIBE_SELECT1' : "A tua tribo", 'TRIBE_SELECT2' : "Por favor preenche o teu tipo de tribo.", 'TRIBE_SELECT3' : "A Tribo seleccionada é incorrecta, activou Romanos como predefinição.", 'ROMAN' : "Romanos", 'TEUTON' : "Teutões", 'GAUL' : "Gauleses", //Settings 'SETRANDOMIZE' : "Farming aleatorio ", 'SETREADREP' : "Analisar os relatórios para definir uma lista de prioridades", 'SETDELTLIST' : "Apaga a lista quando parar", 'UPDATE_SETTINGS' : "Actualizar defenições", 'SETVILSKIP' : "Activar passagem à proxima aldeia", 'FARMMARKING' : "Marcar farms no mapa", 'DYNAMICTROOPCOUNT' : "Tropas Dinamicas" } } else if (ext == "pl") { //Language:Polish, Translator : Dungaar lang = { 'UPDATE_M' : "Aktualizuje", 'UPDATE_M1' : "Nie znaleziono UserScripts.org", 'UPDATE_UNKNOWN' : "Niewlasciwa wersja :", 'UPDATE_LAST' : "Uzywasz najnowszej wersji", 'UPDATE_BETA' : "Nowa wersja BETA jest dostepna", 'UPDATE_NEW' : "Jest dostepna NOWA wersja", 'UPDATE_NOW' : "Chcesz zaktualizowac teraz", 'CONFIRM' : "Jestes pewien", 'REMOVING' : "Usuwanie", 'SWITCH_V' : "Zmiana wioski na", 'AFTER' : "za", 'SEC' : "sekund", 'NO_VILLAGE' : "Nie ma zadnej wolnej wioski!", 'WAITING' : "Czekam", 'BEFORE_RE' : "przed ponownym sprawdzeniem.", 'ADD_FARM' : "Zamierzasz dodac farme", 'TROOP_CONFIG' : "Konfiguracja jednostek to", 'ATTACK' : "Atak", 'REINFORCE' : "Posilki", 'RAID' : "Grabiez", 'ACTIVE_FARM' : "Aktywna farma", 'CANCEL' : "Anuluj", 'SAVE' : "Zapisz", 'ADD_TO' : "Dodaj do", 'ADD_AS' : "Dodaj jako farme", 'GLOBAL_IM_EX_PROMPT' : "Skopiuj dane ze wszystkich wiosek lub wklej kopie zapasowa", 'GLOBAL_IM_EX_M' : "Import lub Eksport danych dla wszystkich wiosek", 'LOCAL_IM_EX_PROMPT' : "Skopiuj dane / Wklej nowe dane", 'LOCAL_IM_EX_M' : "Import lub Eksport danych dla tej wioski", 'OPTIMIZE_DONE' : "Zoptymalizowano wedlug odleglosci", 'OPTIMIZE_M' : "Zoptymalizuj farmy wedlug odleglosci.", 'OPTIMIZE_SM' : "Optymalizacja farm wedlug odleglosci", 'INVALID_FARM' : "Nieprawidlowe jednostki w osadzie! Usunac?", 'DELETE_FARM' : "Usun farme", 'EDIT_FARM' : "Edytuj farme", 'NO_FARM_YET' : "Ustaw farmy w profilach wiosek", 'FARM' : "Farma", 'SORT_FARM' : "Sortuj farmy wedlug odleglosci od tej wioski", 'DELETE_M' : "Kliknij X aby usunac farme", 'EDIT_M' : "Kliknij na ikonie edycji aby edytowac farme", 'END_M' : "Wybierz ostatnia atakowana wioske lub kliknij tutaj aby skrypt dzialal bez przerwy", 'START_M' : "Wybierz pierwsza atakowana wioske", 'START_FARMING' : "Rozpocznij farmienie od zaznaczonej wioski", 'MINIMIZE' : "Minimalizuj", 'MAXIMIZE' : "Maksymalizuj", 'FARM_INACTIVE' : "Farma ustawiona jako nieaktywna", 'ERROR' : "Blad", 'NOT_ENOUGH' : "Brakuje jednostek do grabiezy", 'AVAILABLE' : "Dostepne", 'NEEDED' : "Potrzebne", 'TROOPS_GONE' : "Jednostki w drodze do", 'NEXT_FARM' : "Wybieranie kolejnej farmy", 'SUCCESS_COUNT' : "W sumie wyslano", 'HALT_FARMING' : "Zatrzymaj", 'MACHINE_RUNNING' : "Skrypt uruchomiony", 'CHANGE_VILLAGE' : "Pr?buje zmienic na inna wioske", 'NO_FARM' : "Nie ma dostepnych zadnych farm", 'NOT_FARMER' : "To nie jest wioska do atak?w", 'USED_TROOPS' : "Uzyte jednostki", 'GOING_TO' : "Wykonuje", 'INSTALL_M1' : "Dodaj nowe farmy w profilach wiosek", 'INSTALL_M2' : "Milego farmienia :)", 'TRIBE_SELECT1' : "Wybierz nacje", 'TRIBE_SELECT2' : "Prosze wpisac poprawny numer nacji.", 'TRIBE_SELECT3' : "Nie bylo mozliwe wybranie poprawnej nacji, ustawiam domyslnie rzymian.", 'ROMAN' : "Rzymianie", 'TEUTON' : "Germanie", 'GAUL' : "Galowie", //Settings 'SETRANDOMIZE' : "Randomize Rolnictwa", 'SETREADREP' : "Analizujemy raporty do kolejki priorytetowe", 'SETDELTLIST' : "Usun tymczasowe zatrzymanie, kiedy lista", 'UPDATE_SETTINGS' : "Update Settings", 'SETVILSKIP' : "Wlacz omijajac wies", 'FARMMARKING' : "Mark gospodarstw w map", 'DYNAMICTROOPCOUNT' : "Dynamiczny Troops" } } else if (ext == "hr" || ext == "rs" || ext == "ba") { //Language:Hrvatski, Srpski and Bosanski, Translator : Coly lang = { 'UPDATE_M' : "Ukljuciti", 'UPDATE_M1' : "UserScripts.org nije pronađen.", 'UPDATE_UNKNOWN' : "Broj verzije nije važeći:", 'UPDATE_LAST' : "Vi koristite zadnju verziju", 'UPDATE_BETA' : "Nova beta verzija je dostupna", 'UPDATE_NEW' : "NOVA verzija je dostupna", 'UPDATE_NOW' : "Dali želita instalirati sad", 'CONFIRM' : "Dali ste sigurni", 'REMOVING' : "Uklanjanje", 'SWITCH_V' : "Prebacivanje na slijedece selo", 'AFTER' : "Poslije", 'SEC' : "Sekunde", 'NO_VILLAGE' : "Slijedece selo nije prondeno", 'WAITING' : "Cekanje", 'BEFORE_RE' : "Ponovna provijera prije nego.", 'ADD_FARM' : "Idite dodat farme", 'TROOP_CONFIG' : "Vojska Konfiguracija je ", 'ATTACK' : "Napad", 'REINFORCE' : "Pojacanje", 'RAID' : "Pljacka", 'ACTIVE_FARM' : "Aktivna farma", 'CANCEL' : "Odustani", 'SAVE' : "sacuvaj farmu ", 'ADD_TO' : "Dodaj u ", 'ADD_AS' : "Dodaj kao farmu", 'GLOBAL_IM_EX_PROMPT' : "Kopiraj sve podatke sela ili Zaljepi podatke iz sigurnosne kopije", 'GLOBAL_IM_EX_M' : "ubaci ili izbaci podatke farma za sva sela", 'LOCAL_IM_EX_PROMPT' : "Kopiraj podatke / Zaljepi nove podatke", 'LOCAL_IM_EX_M' : "ubaci ili izbaci podatke farma za ovo selo", 'OPTIMIZE_DONE' : "Uspje?no obaviti udaljenost optimizacija", 'OPTIMIZE_M' : "Poredaj farme iz izabranog sela po udaljenosti", 'OPTIMIZE_SM' : "Odlazak na Optimiziranej Svih farmi u Odabrane Naselja, Svojim Udaljenosti", 'INVALID_FARM' : "Postavljena vojska za farmu nije ispravna! Ukloniti je?", 'DELETE_FARM' : "Ukloni ovu farmu.", 'EDIT_FARM' : "Uredi ovu farmu", 'NO_FARM_YET' : "Postavite bilo koje selo kao svoju farmu iz svog odredenog sela", 'FARM' : "Farma", 'SORT_FARM' : "Sortiraj farme po daljini iz ovog sela", 'DELETE_M' : "Kliknite na (x) da bi uklonili odredenu farmu", 'EDIT_M' : "Kliknite na (Edit) ikonu da bi Uredili farme", 'END_M' : "Izaberite poziciju u ovom stubcu, kliknite ovdje da uklonite (EndIndex)", 'START_M' : "Izaberite pocetnu poziviju u ovom stubcu", 'START_FARMING' : "Pocetak farmanja iz izabranog sela", 'MINIMIZE' : "Minimiziraj", 'MAXIMIZE' : "Maksimiziraj", 'FARM_INACTIVE' : "Postavi farmu kao neaktivnu", 'ERROR' : "Pogre?ka", 'NOT_ENOUGH' : "Nemate dovoljno vojnika za napad na", 'AVAILABLE' : "Dostupno", 'NEEDED' : "Potrebno", 'TROOPS_GONE' : "Vojska je na putu prema", 'NEXT_FARM' : "Preacivanje slijedeca farma", 'SUCCESS_COUNT' : "Ukupno uspje?nih poslanih napada", 'HALT_FARMING' : "Prekini farmanje", 'MACHINE_RUNNING' : "Farming Machine je pokrenut", 'CHANGE_VILLAGE' : "Pokusaj preacivanja na slijedece selo", 'NO_FARM' : "Farma nije raspolo?ljiva", 'NOT_FARMER' : "Ovo nije famersko selo", 'USED_TROOPS' : "Kori?tena vojska", 'GOING_TO' : "Kretanje prema", 'INSTALL_M1' : "Dodaj novu farmu za ovo selo", 'INSTALL_M2' : "Happy Farming.pozdravite paula(coly) xD ", 'TRIBE_SELECT1' : "tvoj narod?", 'TRIBE_SELECT2' : "Molimo da unesete ispravnu Broj NAroda za svoju vrstu.", 'TRIBE_SELECT3' : "Niste mogli postavit ispravno pleme,rimljane namjestite kao zadnje.", 'ROMAN' : "Rimljani", 'TEUTON' : "Teutonci", 'GAUL' : "Gali", //Settings 'SETRANDOMIZE' : "Slucajni Poljodjelstvo", 'SETREADREP' : "Analize Izvješća napraviti red prioriteta", 'SETDELTLIST' : "Brisanje privremenih popisa kad zaustavljanja", 'DELTEMPLIST' : "Brisanje privremene liste ručno", 'UPDATE_SETTINGS' : "Ažuriranje postavki", 'SETVILSKIP' : "Aktiviraj naselje preskakivanje", 'FARMMARKING' : "Označi farme u karti", 'DYNAMICTROOPCOUNT' : "Dynamic postrojbi" } } else if (ext == "it") { //Language:Italian, Translator : Snake lang = { 'UPDATE_M' : "Aggiorna", 'UPDATE_M1' : "UserScripts.org non trovato.", 'UPDATE_UNKNOWN' : "La Versione non corrisponde :", 'UPDATE_LAST' : "Hai già la Versione più Recente", 'UPDATE_BETA' : "Nuova Versione BETA disponibile", 'UPDATE_NEW' : "Nuova Versione disponibile", 'UPDATE_NOW' : "Vuoi aggiornare ora", 'CONFIRM' : "Conferma", 'REMOVING' : "Sto Rimuovendo", 'SWITCH_V' : "Cambiando villaggio:", 'AFTER' : "dopo", 'SEC' : " secondi", 'NO_VILLAGE' : "Nessun altro Villaggio disponibile!", 'WAITING' : "Aspetto", 'BEFORE_RE' : "prima di ricontrollare.", 'ADD_FARM' : "Stai aggiungendo una Farm", 'TROOP_CONFIG' : "La configurazione delle Truppe ?", 'ATTACK' : "Attacco", 'REINFORCE' : "Rinforzo", 'RAID' : "Raid", 'ACTIVE_FARM' : "Farm Attiva", 'CANCEL' : "Annulla", 'SAVE' : "Salva", 'ADD_TO' : "Aggiungi a", 'ADD_AS' : "Aggiungi come Farm", 'GLOBAL_IM_EX_PROMPT' : "Copia i Dati di Tutti i Villaggi o Incolla i Dati da un Backup", 'GLOBAL_IM_EX_M' : "Importa o Esporta i Dati delle Farm per tutti i Villaggi", 'LOCAL_IM_EX_PROMPT' : "Copy i Dati / Incolla nuovi Dati", 'LOCAL_IM_EX_M' : "Importa o Esporta i Dati delle Farm per questo Villaggio", 'OPTIMIZE_DONE' : "Ottimizzazione della distanza completata con Successo", 'OPTIMIZE_M' : "Ottimizza le Farm per i Villaggi Selezioni per Distanza.", 'OPTIMIZE_SM' : "Sto per Ottimizzare tutte le Farm nei Villaggi Selezionati per Distanza", 'INVALID_FARM' : "Configurazione delle truppe della Farm invalide! Rimuoverla?", 'DELETE_FARM' : "Cancella questa Farm.", 'EDIT_FARM' : "Modifica questa Farm", 'NO_FARM_YET' : "Imposta qualsiasi villaggio come Farm dal Profilo del Villaggio", 'FARM' : "Farm", 'SORT_FARM' : "Organizza Farm per Distanza dal Villaggio Attuale", 'DELETE_M' : "Premi il Bottone X per cancellare una Farm", 'EDIT_M' : "Premi il Bottone Modifica per modificare una Farm", 'END_M' : "Seleziona la posizione Finale da questa colonna, Clicca Qu? per Rimuoverla", 'START_M' : "Seleziona la posizione Iniziale da questa colonna", 'START_FARMING' : "Inizia il Farming dai Villaggi Selezionati", 'MINIMIZE' : "Minimizza", 'MAXIMIZE' : "Ingrandisci", 'FARM_INACTIVE' : "Farm Impostata come Inattiva", 'ERROR' : "Errore", 'NOT_ENOUGH' : "Non ci sono Abbastanza Truppe per il raid a", 'AVAILABLE' : "Disponibili", 'NEEDED' : "Necessarie", 'TROOPS_GONE' : "Le truppe stanno partendo per", 'NEXT_FARM' : "Seleziono la Prossima Farm", 'SUCCESS_COUNT' : "Conteggio Totale degli Invii con Successo", 'HALT_FARMING' : "Pausa Farming", 'MACHINE_RUNNING' : "Farming Machine Running", 'CHANGE_VILLAGE' : "Provo a Cambiare Villaggio", 'NO_FARM' : "Nessuna Farm Disponibile", 'NOT_FARMER' : "Questo non ? un Villaggio Farmer", 'USED_TROOPS' : "Truppe Usate", 'GOING_TO' : "Partendo Per", 'INSTALL_M1' : "Aggiungi nuove Farm dal Profilo del Villaggio", 'INSTALL_M2' : "Felice Farming", 'TRIBE_SELECT1' : "La Tua Trib?", 'TRIBE_SELECT2' : "Perfavore, inserisci il numero corretto per la Tua Trib?.", 'TRIBE_SELECT3' : "Non hai inserito un numero Valido per la tua Trib?, Selezionati i Romani per default.", 'ROMAN' : "Romani", 'TEUTON' : "Teutoni", 'GAUL' : "Galli", //Settings 'SETRANDOMIZE' : "Randomize Agricoltura", 'SETREADREP' : "Rapporti Analize a fare una coda di priorita", 'SETDELTLIST' : "Elimina elenco temporaneo quando ci si ferma", 'DELTEMPLIST' : "Eliminare manualmente la lista temporanea", 'UPDATE_SETTINGS' : "Update Settings", 'SETVILSKIP' : "Attiva villaggio salto", 'FARMMARKING' : "Mark aziende nella cartina", 'DYNAMICTROOPCOUNT' : "Dynamic Truppe" } } else if (ext == "ru") { //Language:Russian Translator : System Failure lang = { 'UPDATE_M' : "Обновить", 'UPDATE_M1' : "UserScripts.org не найдено.", 'UPDATE_UNKNOWN' : "Номер версии не совпадает :", 'UPDATE_LAST' : "Вы используете последнюю", 'UPDATE_BETA' : "Новая, БЕТА версия доступна", 'UPDATE_NEW' : "Доступна новая версия", 'UPDATE_NOW' : "Хотите обновить сейчас", 'CONFIRM' : "Вы уверены", 'REMOVING' : "Удаляю", 'SWITCH_V' : "Переключаюсь к деревне в", 'AFTER' : "после", 'SEC' : " секунд", 'NO_VILLAGE' : "Нет больше других деревень!", 'WAITING' : "Ожидаю", 'BEFORE_RE' : "до перепроверки.", 'ADD_FARM' : " Вы собираетесь добавить целья для фарма ", 'TROOP_CONFIG' : "Конфигурация войск", 'ATTACK' : "Нападение", 'REINFORCE' : "Подкрепление", 'RAID' : "Набег", 'ACTIVE_FARM' : "Активный фарм ", 'CANCEL' : "Отменить", 'SAVE' : "Сохранить", 'ADD_TO' : "Добавить к", 'ADD_AS' : "Добавить как цель для фарма", 'GLOBAL_IM_EX_PROMPT' : "Скоприровать всю информацию по деревням или вставить информацию из резервной копии", 'GLOBAL_IM_EX_M' : "Импортировать или экспортировать данные строки фарма для всех деревень", 'LOCAL_IM_EX_PROMPT' : "Копировать данные / Вставить новые данные", 'LOCAL_IM_EX_M' : " Импортировать или экспортировать фарм-данные для этой деревни ", 'OPTIMIZE_DONE' : "Оптимизация расстояния успешно проведена", 'OPTIMIZE_M' : " Оптимизировать фарм-цели в выбранных деревнях на основании расстояния.", 'OPTIMIZE_SM' : " Собираюсь оптимизировать все фарм-цели в выбранных деревнях по их расстояниям.", 'INVALID_FARM' : "Неверные настройки фарм-отряда! Удалить настройки?", 'DELETE_FARM' : "Удалить эту фарм-цель.", 'EDIT_FARM' : "Редактировать эту фарм-цель", 'NO_FARM_YET' : " Установите любую деревню в качестве фарм-цели из страницы профиля деревни", 'FARM' : "Фарм", 'SORT_FARM' : "Сортировать фарм-цели по их удалению от текущей деревни.", 'DELETE_M' : "Нажмите на значок Х чтобы удалить фарм-цель ", 'EDIT_M' : "Нажмите на Редактировать, чтобы редактировать фарм-цель", 'END_M' : " Выберите последнюю позицию в этой колонке, нажмите сдесь чтобы удалить EndIndex ", 'START_M' : "Выберите стартовую позицию из этой колонки", 'START_FARMING' : "Начать фарм из выбранных деревень", 'MINIMIZE' : "Скрыть", 'MAXIMIZE' : "Развернуть", 'FARM_INACTIVE' : "Фарм переведен в активный режим", 'ERROR' : "Ошибка", 'NOT_ENOUGH' : "Не достаточно войск для набега на", 'AVAILABLE' : "Доступно", 'NEEDED' : "Необходимо", 'TROOPS_GONE' : "Войска на пути в", 'NEXT_FARM' : "Выбераю следующую цель для фарма", 'SUCCESS_COUNT' : "Итого успешно послано", 'HALT_FARMING' : "Остановить фарм ", 'MACHINE_RUNNING' : "Farming Machine работает", 'CHANGE_VILLAGE' : " Пытаюсь изменить текущую деревню ", 'NO_FARM' : "Нет целей для фарма", 'NOT_FARMER' : "Это не фарм-деревня ", 'USED_TROOPS' : "Использованные войска ", 'GOING_TO' : "Отправляю в ", 'INSTALL_M1' : "Добавьте новые цели для фарма из страницы профиля деревни", 'INSTALL_M2' : "Удачного фарма", 'TRIBE_SELECT1' : "Ваш народ", 'TRIBE_SELECT2' : " Пожалуйста введите корректное число для вашего народа.", 'TRIBE_SELECT3' : "Вы не смогли установить правильный народ, устанавливаю Римляне по умолчанию.", 'ROMAN' : "Римляне", 'TEUTON' : "Германцы", 'GAUL' : "Галлы", //Settings 'SETRANDOMIZE' : "Рандомизировать цели", 'SETREADREP' : "Проанализировать отчеты, для создания очереди упорядоченной по приоритету", 'SETDELTLIST' : "Удалить временный список при остановке", 'DELTEMPLIST' : "Удаление временных список вручную", 'UPDATE_SETTINGS' : "Параметры обновления", 'SETVILSKIP' : "Включить деревне пропуска", 'FARMMARKING' : "Марк хозяйств на карте", 'DYNAMICTROOPCOUNT' : "Динамические войск" } } else if (ext == "net") { //Language:Espanhol, Translator : Royan lang = { 'UPDATE_M' : "Actualizar", 'UPDATE_M1' : "UserScripts.org no encontrado.", 'UPDATE_UNKNOWN' : "La version no coincide :", 'UPDATE_LAST' : "Ya tienes la ultima versión", 'UPDATE_BETA' : "Nueva versión BETA disponible", 'UPDATE_NEW' : "Nueva versión disponible", 'UPDATE_NOW' : "Quieres actualizar ahora", 'CONFIRM' : "Confirmar", 'REMOVING' : "Borrando", 'SWITCH_V' : "Cambiando ciudad en", 'AFTER' : "despues", 'SEC' : "segundo", 'NO_VILLAGE' : "No hay m?s ciudades disponibles !", 'WAITING' : "Esperando", 'BEFORE_RE' : "Antes revisa.", 'ADD_FARM' : "Vas a a?adir una granja", 'TROOP_CONFIG' : "La configuraci?n de tropas es", 'ATTACK' : "Ataque normal", 'REINFORCE' : "Refuerzo", 'RAID' : "Atraco", 'ACTIVE_FARM' : "Activar granjeo", 'CANCEL' : "Cancelar", 'SAVE' : "Salvar", 'ADD_TO' : "Anadir a", 'ADD_AS' : "A?adir como granja", 'GLOBAL_IM_EX_PROMPT' : "Copia o pega los datos de granjeo de todas las ciudades", 'GLOBAL_IM_EX_M' : "Importar o Exportar raw datos de granjeo de todas las ciudades", 'LOCAL_IM_EX_PROMPT' : "Copia los datos / pega los datos", 'LOCAL_IM_EX_M' : "Importar o Exportar raw datos de granjeo de esta ciudad", 'OPTIMIZE_DONE' : "Realizada optimizaci?n por distancia", 'OPTIMIZE_M' : "Optimizar el granjeo en funci?n de la distancia.", 'OPTIMIZE_SM' : "Optimizando el granjeo de las granjas seleccionadas en funci?n de su distancia", 'INVALID_FARM' : "Configuraci?n de tropas de granjeo erronea! ?eliminar?", 'DELETE_FARM' : "Borrar esta granja.", 'EDIT_FARM' : "Editar esta granja", 'NO_FARM_YET' : "Selecciona alguna ciudad como granja desde el perfil de las ciudades", 'FARM' : "Granja", 'SORT_FARM' : "Ordenar granjas por la distancia a la ciudad actual", 'DELETE_M' : "Dar a la X para borrar la granja", 'EDIT_M' : "Dar al boton de editar para editar la granja", 'END_M' : "Selecciona posici?n final en esta columna, Dar aqui para borrar el marcador de posici?n final", 'START_M' : "Selecciona posici?n inicial en esta columna", 'START_FARMING' : "Empezar granjeo en las ciudades selecionadas", 'MINIMIZE' : "Minimizar", 'MAXIMIZE' : "Maximizar", 'FARM_INACTIVE' : "Granja marcada inactiva", 'ERROR' : "Error", 'NOT_ENOUGH' : "Insuficientes tropas para mandar a", 'AVAILABLE' : "Disponible", 'NEEDED' : "Necesario", 'TROOPS_GONE' : "Tropas en camino a", 'NEXT_FARM' : "Seleccionando siguiente granja", 'SUCCESS_COUNT' : "Contador total de granjeos", 'HALT_FARMING' : "Pausar granjeo", 'MACHINE_RUNNING' : "Farming Machine funcionando", 'CHANGE_VILLAGE' : "Intentando cambiar de ciudad", 'NO_FARM' : "Granjeo no disponible", 'NOT_FARMER' : "Ciudad no granjera", 'USED_TROOPS' : "Tropas usadas", 'GOING_TO' : "Ir a", 'INSTALL_M1' : "A?adir nuevas granjas desde el perfil de las ciudades", 'INSTALL_M2' : "Feliz granjeo", 'TRIBE_SELECT1' : "Tu tribu", 'TRIBE_SELECT2' : "Por favor introduce el n?mero correspondiente a tu tribu.", 'TRIBE_SELECT3' : "Imposible seleccionar tribu, selcionando Romanos por defecto.", 'ROMAN' : "Romanos", 'TEUTON' : "Germanos", 'GAUL' : "Galos", //Settings 'SETRANDOMIZE' : "Selección aleatoria de la agricultura", 'SETREADREP' : "Analizar los informes para hacer una cola de prioridad", 'SETDELTLIST' : "Eliminar la lista previa a la parada temporal", 'DELTEMPLIST' : "Borrar lista temporal de forma manual", 'UPDATE_SETTINGS' : "Actualización de la configuración", 'SETVILSKIP' : "Activar pueblo sin pasar", 'FARMMARKING' : "Marcos explotaciones en el mapa", 'DYNAMICTROOPCOUNT' : "Dinámica de las tropas" } }else if (ext == "ae") { //Language:arabic, Translator : kmmad1 lang = { 'UPDATE_M' : "تحديث", 'UPDATE_M1' : "UserScripts.orgلا يمكن العثور على", 'UPDATE_UNKNOWN' : "رقم الاصدار غير مطابق:", 'UPDATE_LAST' : "بحوذتك احدث اصدار", 'UPDATE_BETA' : "يوجد اصدار جديد و لكن تجريبي.", 'UPDATE_NEW' : "اصدار جديد متاح الان", 'UPDATE_NOW' : "هل تود التحديث الان؟", 'CONFIRM' : "تأكيد", 'REMOVING' : "يتم الحذف", 'SWITCH_V' : "سيتم تغيير القرية في:", 'AFTER' : "بعد", 'SEC' : "ثانية", 'NO_VILLAGE' : "لايوجد قرية بديلة!", 'WAITING' : "انتظار", 'BEFORE_RE' : "قبل اعادة الفحص.", 'ADD_FARM' : "سوف تقوم باضافة مزرعة جديدة", 'TROOP_CONFIG' : "تصنيف القوات هو:", 'ATTACK' : "هجوم كامل", 'REINFORCE' : "مساندة", 'RAID' : "هجوم للنهب", 'ACTIVE_FARM' : "مزرعة عاملة", 'CANCEL' : "الغاء", 'SAVE' : "حفظ", 'ADD_TO' : "اضافة الي", 'ADD_AS' : "اضافة كمزرعة", 'GLOBAL_IM_EX_PROMPT' : "انسخ بيانات جميع قراك أو الصق من ملف", 'GLOBAL_IM_EX_M' : "تصدير او استيراد معلومات المزارع الاصلية لجميع القرى", 'LOCAL_IM_EX_PROMPT' : "نسخ المعلومات / لصق المعلومات", 'LOCAL_IM_EX_M' : "تصدير أو استيراد معلومات المزارع لهذة القرية", 'OPTIMIZE_DONE' : "تم توزيع المزارع حسب المسافة من القرى بنجاح", 'OPTIMIZE_M' : "توزيع المزارع على القرى المختارة حسب المسافة.", 'OPTIMIZE_SM' : "سوف يتم توزيع المزارع على القرى حسب المسافة.", 'INVALID_FARM' : "تصنيف الجيش لهذة المزرعة غير صالح! هل تريد الحذف؟", 'DELETE_FARM' : "احذف هذة المزرعة.", 'EDIT_FARM' : "عدل المزرعة.", 'NO_FARM_YET' : "اضبط أي قرية لتكون مزرعة لك من صفحة هذة القرية.", 'FARM' : "مزرعة", 'SORT_FARM' : "رتب المزارع حسب مسافتها من القرية الحالية.", 'DELETE_M' : "X لحذف المزرعة اضغط على ", 'EDIT_M' : "اضغط على ايقونة تعديل, لتغيير معلومات المزرعة", 'END_M' : "اختار مزرعة التوقف الأخيرة من هنا, أو اضغط هنا لعدم توقف النهب نهائيا", 'START_M' : "اختار مزرعة البداية من هذا العمود", 'START_FARMING' : "ابداء النهب من القرى المختارة", 'MINIMIZE' : "تصغير", 'MAXIMIZE' : "تكبير", 'FARM_INACTIVE' : "المزرعة غير فعالة", 'ERROR' : "خطأ", 'NOT_ENOUGH' : "لايوجد قوات كافية للهجوم على:", 'AVAILABLE' : "متاح", 'NEEDED' : "مطلوب", 'TROOPS_GONE' : "القوات في طريقها الي", 'NEXT_FARM' : "المزرعة التالية", 'SUCCESS_COUNT' : "عدد مرات الارسال بنجاح", 'HALT_FARMING' : "توقف", 'MACHINE_RUNNING' : " تعملFarming Machine ", 'CHANGE_VILLAGE' : "احاول تغيير القرية الحالية", 'NO_FARM' : "لا يوجد مزرعة متاحة", 'NOT_FARMER' : "هذة ليست قرية مزارعة", 'USED_TROOPS' : "القوي المستخدمة", 'GOING_TO' : "ذاهب الى", 'INSTALL_M1' : "اضف مزارع جديدة من صفحات القرى مباشرة", 'INSTALL_M2' : "استمتع بالنهب", 'TRIBE_SELECT1' : "قبيلتك", 'TRIBE_SELECT2' : "برجاء ادخال الرقم الصحيح لقبيلتك.", 'TRIBE_SELECT3' : "لم تستطع ادخال رقم قبيلتك الصحيحة. سوف يتم تعيين قبيلتك الرومان.", 'ROMAN' : "رومان", 'TEUTON' : "جرمان", 'GAUL' : "الاغريق", //Settings 'SETRANDOMIZE' : "الزراعة بطريقة عشوائية", 'SETREADREP' : "اناليزي تقارير لجعل قائمة انتظار ذات الأولوية", 'SETDELTLIST' : "حذف قائمة مؤقتة عندما وقف", 'DELTEMPLIST' : "قائمة مؤقتة حذف يدويا", 'UPDATE_SETTINGS' : "إعدادات التحديث", 'SETVILSKIP' : "تنشيط قرية تخطي", 'FARMMARKING' : "مزارع مارك في الخريطة", 'DYNAMICTROOPCOUNT' : "دينامية القوات" } }else if (ext == "de") { //Language:German, Translator : Tequila/pixelgeek lang = { 'UPDATE_M' : "Update", 'UPDATE_M1' : "UserScripts.org nicht gefunden.", 'UPDATE_UNKNOWN' : "Versions Nummer stimmt nicht überein :", 'UPDATE_LAST' : "Du hast das Neuste", 'UPDATE_BETA' : "Eine Neue Beta-Version ist verfügbar", 'UPDATE_NEW' : "Eine Neue Version ist verfügbar", 'UPDATE_NOW' : "Wollen Sie updaten?", 'CONFIRM' : "Sind Sie sicher?", 'REMOVING' : "Entfernen", 'SWITCH_V' : "wechsel zu Dorf", 'AFTER' : "später", 'SEC' : "sekunden", 'NO_VILLAGE' : "kein anderes Dorf verfügbar!", 'WAITING' : "warte", 'BEFORE_RE' : "before recheck.", 'ADD_FARM' : "Farm hinzufügen", 'TROOP_CONFIG' : "Truppen Einstellung", 'ATTACK' : "Angriff", 'REINFORCE' : "Unterstützung", 'RAID' : "Raubzug", 'ACTIVE_FARM' : "Aktive Farm", 'CANCEL' : "Abbrechen", 'SAVE' : "Speichern", 'ADD_TO' : "Hinzufügen", 'ADD_AS' : "Als Farm hinzufügen", 'GLOBAL_IM_EX_PROMPT' : "Farmdaten kopieren oder einfügen", 'GLOBAL_IM_EX_M' : "Importieren oder exportieren der roh Farmdaten aus allen Dörfern", 'LOCAL_IM_EX_PROMPT' : "Daten kopieren / Neue Daten einfügen", 'LOCAL_IM_EX_M' : "Importieren oder exportieren der Farmdaten aus diesem Dorf", 'OPTIMIZE_DONE' : "Entfernungsoptimirung erfolgt", 'OPTIMIZE_M' : "Optimiere alle Farmen im ausgewählten Dorf nach Entfernungen.", 'OPTIMIZE_SM' : "Optimiere alle Farmen in den ausgewählten Dörfern nach Entfernungen", 'INVALID_FARM' : "Die Truppeneinstellung ist ungültig! Entfernen?", 'DELETE_FARM' : "Farm entfernen.", 'EDIT_FARM' : "Farm bearbeiten", 'NO_FARM_YET' : "Wähle ein beliebiges Dorf als Farm, in der Dorfansicht", 'FARM' : "Farmen", 'SORT_FARM' : "Sortiert die Farmen nach Enfernung im momentanen Dorf", 'DELETE_M' : "x klicken um Farm zu löschen", 'EDIT_M' : "Auf das Edit Icon klicken um eine Farm zu editieren", 'END_M' : "Ende der Liste festlegen, Hier klicken um den EndIndex zu entfernen", 'START_M' : "Anfang der Liste festlegen", 'START_FARMING' : "Bei ausgewähltem Dorf mit farmen beginnen", 'MINIMIZE' : "Minimieren", 'MAXIMIZE' : "Maximieren", 'FARM_INACTIVE' : "Farm als inaktiv ausgewählt", 'ERROR' : "Fehler", 'NOT_ENOUGH' : "Nicht genügend Truppen vorhanden", 'AVAILABLE' : "Verfügbar", 'NEEDED' : "werden gebraucht", 'TROOPS_GONE' : "Truppen unterwegs", 'NEXT_FARM' : "wähle nächste Farm aus", 'SUCCESS_COUNT' : "Erfolgreich versendete Truppen", 'HALT_FARMING' : "STOP", 'MACHINE_RUNNING' : "Farm Maschine aktiviert", 'CHANGE_VILLAGE' : "Versuche aktuelles Dorf zu wechseln", 'NO_FARM' : "Keine Farm verfügbar", 'NOT_FARMER' : "Dies ist kein Farmdorf", 'USED_TROOPS' : "Benutzte Truppen", 'GOING_TO' : "Wechsel zu", 'INSTALL_M1' : "Neue Farmen vom Dorfprofil hinzufügen", 'INSTALL_M2' : "Happy Farming", 'TRIBE_SELECT1' : "Dein Volk", 'TRIBE_SELECT2' : "Bitte die richtige Zahl für dein Volk eingeben.", 'TRIBE_SELECT3' : "Du konntest nicht das richtige Volk einstellen, Römer wurden als Standart gewählt.", 'ROMAN' : "Römer", 'TEUTON' : "Germane", 'GAUL' : "Gallier", //Settings 'SETRANDOMIZE' : "Zufallsfarmen aktivieren", 'SETREADREP' : "Berichte für die Erstellung einer Prioritätenliste analysieren", 'SETDELTLIST' : "Temporäre Farmingliste löschen wenn FM gestoppt wird", 'DELTEMPLIST' : "Temporäre Farmingliste manuell löschen", 'UPDATE_SETTINGS' : "Einstellungen ändern", 'SETVILSKIP' : "Dorfwechsel falls zuwenig Truppen vorhanden sind", 'FARMMARKING' : "Farmen in Karte markieren", 'DYNAMICTROOPCOUNT' : "Dynamic Troops" } } else if (ext == "cn") { //Language:简体中文,, Translator : congxz6688 lang = { 'UPDATE_M' : "升级", 'UPDATE_M1' : "UserScripts.org 无法连接", 'UPDATE_UNKNOWN' : "版本号不匹配 :", 'UPDATE_LAST' : "你正在使用最新版", 'UPDATE_BETA' : "一个新的Beta版可用", 'UPDATE_NEW' : "一个新版本可用", 'UPDATE_NOW' : "你现在要升级本脚本", 'CONFIRM' : "确定吗", 'REMOVING' : "移除", 'SWITCH_V' : "将切换村庄至", 'AFTER' : "请稍候", 'SEC' : "秒", 'NO_VILLAGE' : "没有其它村庄可切换", 'WAITING' : "正在等待", 'BEFORE_RE' : "在重新检测以前", 'ADD_FARM' : "你正在添加你的羊", 'TROOP_CONFIG' : "军队配置为", 'ATTACK' : "攻击", 'REINFORCE' : "增援", 'RAID' : "掠夺", 'ACTIVE_FARM' : "激活打羊行动", 'CANCEL' : "取消", 'SAVE' : "保存", 'ADD_TO' : "添加到", 'ADD_AS' : "存为肥羊", 'GLOBAL_IM_EX_PROMPT' : "复制所有村庄数据或从备份中粘贴数据", 'GLOBAL_IM_EX_M' : "为所有村子导入或导出肥羊数据", 'LOCAL_IM_EX_PROMPT' : "复制数据或粘贴新数据", 'LOCAL_IM_EX_M' : "导入或导出这个村子的数据", 'OPTIMIZE_DONE' : "成功地进行了距离优化", 'OPTIMIZE_M' : "以距离为基础优化打羊程序.", 'OPTIMIZE_SM' : "将要在选中的村子里进行距离优化", 'INVALID_FARM' : "打羊部队的设定无效,移除它?", 'DELETE_FARM' : "删掉这一记录", 'EDIT_FARM' : "编辑此羊", 'NO_FARM_YET' : "你还没有设定属于自己的肥羊,赶快动手吧", 'FARM' : "肥羊", 'SORT_FARM' : "以当前村为标准,按距离给肥羊排序", 'DELETE_M' : "按X删除羊", 'EDIT_M' : "按编辑图标编辑羊", 'END_M' : "从队列中选择结束点,按这里移除终点", 'START_M' : "在队列中选择起始点", 'START_FARMING' : "从选定的村庄开始打羊行动", 'MINIMIZE' : "最小化", 'MAXIMIZE' : "最大化", 'FARM_INACTIVE' : "肥羊设置失效", 'ERROR' : "计划暂时受阻", 'NOT_ENOUGH' : "没有足够的军队攻击", 'AVAILABLE' : " 可用", 'NEEDED' : "需要", 'TROOPS_GONE' : "正在派遣军队到", 'NEXT_FARM' : "自动选择下一肥羊", 'SUCCESS_COUNT' : "成功发送总计", 'HALT_FARMING' : "中止打羊行动", 'MACHINE_RUNNING' : "打羊机运行中", 'CHANGE_VILLAGE' : "尝试改变当前村子", 'NO_FARM' : "没有可用的羊", 'NOT_FARMER' : "此村未参与打羊", 'USED_TROOPS' : "正在调动军队", 'GOING_TO' : "正在准备 -", 'INSTALL_M1' : "小提示:你可以从敌村描述页把它添加为肥羊", 'INSTALL_M2' : "尽情享受吧", 'TRIBE_SELECT1' : "你的种族", 'TRIBE_SELECT2' : "请输入一个正确的种族代码", 'TRIBE_SELECT3' : "你未能正确设定你的种族,默认为罗马。", 'ROMAN' : "罗马", 'TEUTON' : "日尔曼", 'GAUL' : "高卢", //Settings 'SETRANDOMIZE' : "随机农业", 'SETREADREP' : "极大的关联性报告,以优先队列", 'SETDELTLIST' : "停车时删除临时名单", 'DELTEMPLIST' : "手动删除临时名单", 'UPDATE_SETTINGS' : "更新设置", 'SETVILSKIP' : "跳过激活乡村", 'FARMMARKING' : "在地图马克农场", 'DYNAMICTROOPCOUNT' : "动态部队" } }else if (ext == "id") { //Language:Indonesia, Translator : Abhy Boy lang = { 'UPDATE_M' : "Update Script", 'UPDATE_M1' : "UserScripts.org tidak ditemukan.", 'UPDATE_UNKNOWN' : "Versi Update tidak sesuai :", 'UPDATE_LAST' : "Script saat ini adalah yang terbaru", 'UPDATE_BETA' : "Versi BETA yang baru sudah tersedia", 'UPDATE_NEW' : "Versi yang baru sudah tersedia", 'UPDATE_NOW' : "Anda ingin Update sekarang", 'CONFIRM' : "Anda Yajin", 'REMOVING' : "Menghapus", 'SWITCH_V' : "Berpindah ke Desa yang lain pada ", 'AFTER' : "setelah", 'SEC' : "detik", 'NO_VILLAGE' : "Tidak ada Desa lain lagi yang akan di serang!", 'WAITING' : "Menunggu", 'BEFORE_RE' : "sebelum cek ulang.", 'ADD_FARM' : "Anda akan menambahkan daftar Serang", 'TROOP_CONFIG' : "Konfigurasi serangan adalah ", 'ATTACK' : "Menyerang Penuh", 'REINFORCE' : "Bantuan", 'RAID' : "Merampas", 'ACTIVE_FARM' : "Aktif Diserang", 'CANCEL' : "batal", 'SAVE' : "Simpan", 'ADD_TO' : "Tambahkan Ke", 'ADD_AS' : "Ditambahkan Serangan", 'GLOBAL_IM_EX_PROMPT' : "Gandakan data atau ganti dengan data yang baru", 'GLOBAL_IM_EX_M' : "Import atau Export data raw untuk semua Desa", 'LOCAL_IM_EX_PROMPT' : "Gandakan Data / Timpakan Data Baru", 'LOCAL_IM_EX_M' : "Import atau Export data raw untuk Desa ini", 'OPTIMIZE_DONE' : "Berhasil melakukan optimalisasi berdasar jarak", 'OPTIMIZE_M' : "Optimalkan Serangan berdasar jarak.", 'OPTIMIZE_SM' : "Mulai melakukan optimalisasi Serangan berdasar jarak", 'INVALID_FARM' : "Seting Tentara tidak benar! hapus ini ?", 'DELETE_FARM' : "Hapus data ini.", 'EDIT_FARM' : "Ubah data ini", 'NO_FARM_YET' : "Ubah sebuah desa menjadi jajahan Anda dari Halaman Profile Desa", 'FARM' : "Jajah", 'SORT_FARM' : "urutkan berdasarkan jarak mulai dari data ini", 'DELETE_M' : "Tekan tanda X untuk menghapus Data Jajahan", 'EDIT_M' : "Tekan tanda X untuk merubah Data Jajahan", 'END_M' : "Pilih Posisi terakhir pada data, Tekan disini untuk membuang tanda", 'START_M' : "Pilih posisi mulai di sini", 'START_FARMING' : "Mulai menjajah dari Desa terpilih", 'MINIMIZE' : "Kecilkan", 'MAXIMIZE' : "Besarkan", 'FARM_INACTIVE' : "jajahan diset tidak aktif", 'ERROR' : "Kesalahan", 'NOT_ENOUGH' : "Tidak cukup tentara untuk menjajah pada", 'AVAILABLE' : "Tersedia", 'NEEDED' : "Diperlukan", 'TROOPS_GONE' : "Tentara sedang menuju ", 'NEXT_FARM' : "Pilih Jajahan Berikutnya", 'SUCCESS_COUNT' : "Jumlah kiriman Pasukan yang berhasil ", 'HALT_FARMING' : "Hentikan Jajahan", 'MACHINE_RUNNING' : "Mesin Jajahan Berjalana", 'CHANGE_VILLAGE' : "Berusaha mengganti Desa yang dijajah", 'NO_FARM' : "Tidak ada Jajahan tersedia", 'NOT_FARMER' : "bukan desa yang bisa Dijajah", 'USED_TROOPS' : "Pasukan digunakan", 'GOING_TO' : "Menuju ke", 'INSTALL_M1' : "Tambah sebuah desa menjadi jajahan Anda dari Halaman Profile Desa", 'INSTALL_M2' : "Selamat bersenang - senang", 'TRIBE_SELECT1' : "Kebangsaan Anda", 'TRIBE_SELECT2' : "Silakan pilih angka yang sesuai dengan kebangsaaan pasukan.", 'TRIBE_SELECT3' : "Anda salah memilih Kebangsaan, Gunakan Romawi sebagai defaultnya.", 'ROMAN' : "Romawi", 'TEUTON' : "Teuton", 'GAUL' : "Gaul", //Settings 'SETRANDOMIZE' : "Mengacak pertanian", 'SETREADREP' : "Analisis laporan untuk membuat antrian prioritas", 'SETDELTLIST' : "Hapus daftar sementara saat berhenti", 'DELTEMPLIST' : "Hapus daftar sementara secara manual", 'UPDATE_SETTINGS' : "Pengaturan pembaruan", 'SETVILSKIP' : "Aktifkan desa skipping", 'FARMMARKING' : "Mark peternakan di peta", 'DYNAMICTROOPCOUNT' : "Pasukan Dinamis" } } else if (ext == "fr") { //Language:français, Translator : Sch@k@ lang = { 'UPDATE_M' : "Mise à jour", 'UPDATE_M1' : "UserScripts.org non trouvé.", 'UPDATE_UNKNOWN' : "Le numéro de version ne correspond pas :", 'UPDATE_LAST' : "Tu utilises le plus récent", 'UPDATE_BETA' : "Une nouvelle version BETA est arrivée", 'UPDATE_NEW' : "Une nouvelle version est arrivée", 'UPDATE_NOW' : "Veux-tu mettre à jour maintenant", 'CONFIRM' : "Es-tu sÜr", 'REMOVEING' : "Effacer", 'SWITCH_V' : "Passe au village à", 'AFTER' : "après", 'SEC' : "secondes", 'NO_VILLAGE' : "Pas d'autre village où aller !", 'WAITING' : "Attendre", 'BEFORE_RE' : "avant de relancer.", 'ADD_FARM' : "Tu vas ajouter une cible ", 'TROOP_CONFIG' : "Ton armée est ", 'ATTACK' : "attaquer", 'REINFORCE' : "soutenir", 'RAID' : "piller", 'ACTIVE_FARM' : "Actif", 'CANCEL' : "Arrêter", 'SAVE' : "Sauver", 'ADD_TO' : "Ajouter à", 'ADD_AS' : "Ajouter en tant que cible", 'GLOBAL_IM_EX_PROMPT' : "Copie les données de tous les villages ou colle les données sauvegardées", 'GLOBAL_IM_EX_M' : "Importe ou exporte les données pour tous les villages", 'LOCAL_IM_EX_PROMPT' : "Copie ou Colle les données de ce village", 'LOCAL_IM_EX_M' : "Importe ou exporte les données de ce village", 'OPTIMIZE_DONE' : "Optimisation des distances réussie", 'OPTIMIZE_M' : "Optimise l'ordre des villages par rapport à l'éloignement du tien", 'OPTIMIZE_SM' : "Optimise l'ordre de tous les villages par rapport à l'eloignement de tes villages sélectionnés", 'INVALID_FARM' : "Réglages des troupes invalides ! Les effacer ?", 'DELETE_FARM' : "Efface ce pillage", 'EDIT_FARM' : "Edite ce pillage", 'NO_FARM_YET' : "Ajoute n'importe quel village dans ta liste en allant sur les informations de celui-ci", 'FARM' : "Pillage", 'SORT_FARM' : "Trie les pillages par distance du village actuel", 'DELETE_M' : "Clique sur X pour effacer un pillage", 'EDIT_M' : "Clique sur l'icone pour éditer un pillage", 'END_M' : "Sélectionne la position de fin, clique ici pour effacer", 'START_M' : "Sélectionne la position de départ", 'START_FARMING' : "Lancement des pillages sur les villages sélectionnés", 'MINIMIZE' : "Minimise", 'MAXIMIZE' : "Maximise", 'FARM_INACTIVE' : "Le pillage est inactif", 'ERROR' : "En attente ...", 'NOT_ENOUGH' : "Pas assez de troupes pour piller", 'AVAILABLE' : "Disponible", 'NEEDED' : "Nécessaire", 'TROOPS_GONE' : "Armée en route pour", 'NEXT_FARM' : "Sélection de la cible suivante", 'SUCCESS_COUNT' : "Total des attaques envoyées", 'HALT_FARMING' : "--> ARRETER <--", 'MACHINE_RUNNING' : "Pillages en cours .", 'CHANGE_VILLAGE' : "Tentative de changement de village :", 'NO_FARM' : "Plus de pillage possible", 'NOT_FARMER' : "Pas de pillages sur ce village", 'USED_TROOPS' : "Armée utilisée", 'GOING_TO' : "Préparation pour ", 'INSTALL_M1' : "Ajoute une nouvelle cible à partir de la carte", 'INSTALL_M2' : "Joyeux pillages", 'TRIBE_SELECT1' : "Ta tribu", 'TRIBE_SELECT2' : "Entre un nombre correct pour ta tribu.", 'TRIBE_SELECT3' : "Tu n as pas mis la bonne tribu.", 'ROMAN' : "Romains", 'TEUTON' : "Germains", 'GAUL' : "Gaulois", //Settings 'SETRANDOMIZE' : "Lance les pillages aléatoirement", 'SETREADREP' : "Analyse les rapports afin d'optimiser les pillages", 'SETDELTLIST' : "Efface la liste temporaire une fois arrêté", 'DELTEMPLIST' : "Supprimer la liste temporaire manuellement", 'UPDATE_SETTINGS' : "Mise à jour des paramètres", 'SETVILSKIP' : "Activer village à sauter", 'FARMMARKING' : "Mark fermes sur la carte", 'DYNAMICTROOPCOUNT' : "Dynamic troupes" } } else if (ext == "no") { //Language:norwegian, Translator : Koffirola lang = { 'UPDATE_M' : "Oppdater", 'UPDATE_M1' : "UserScripts.org ble ikke funnet.", 'UPDATE_UNKNOWN' : "Du har ikke versjon :", 'UPDATE_LAST' : "Du bruker den siste versjonen", 'UPDATE_BETA' : "En ny BETA versjon er tilgjengelig!", 'UPDATE_NEW' : "En ny versjon er tilgjengelig!", 'UPDATE_NOW' : "Vil du oppdatere nå", 'CONFIRM' : "Er du sikker", 'REMOVING' : "Fjerner", 'SWITCH_V' : "Bytter til byen med", 'AFTER' : "etter", 'SEC' : "andre", 'NO_VILLAGE' : "Ingen andre byer å gå til!", 'WAITING' : "Venter", 'BEFORE_RE' : "før ny sjekk.", 'ADD_FARM' : "Du kommer til å legge til farm", 'TROOP_CONFIG' : "Troppeinstillingene er", 'ATTACK' : "Angrip", 'REINFORCE' : "Forsterk", 'RAID' : "Plyndring", 'ACTIVE_FARM' : "Aktiv farm", 'CANCEL' : "Avbryt", 'SAVE' : "Lagre", 'ADD_TO' : "Legg til", 'ADD_AS' : "Legg til som farm", 'GLOBAL_IM_EX_PROMPT' : "Kopier alle byenes data, eller legg til ny data", 'GLOBAL_IM_EX_M' : "Importer eller eksporter rå farm-data fra alle byer", 'LOCAL_IM_EX_PROMPT' : "Kopier / Lim inn farm data", 'LOCAL_IM_EX_M' : "Importer eller Eksporter farm data for denne byen", 'OPTIMIZE_DONE' : "Distansekalkulasjon er ferdig", 'OPTIMIZE_M' : "Sorter farmene dine i denne byen etter distanse.", 'OPTIMIZE_SM' : "Sorterer farmene dine etter distanse", 'INVALID_FARM' : "Farmens troppeinstillinger er feil! Slette den?", 'DELETE_FARM' : "Slett denne farmen", 'EDIT_FARM' : "Endre denne farmen", 'NO_FARM_YET' : "Sett en by som Farm fra Byens Profilside.Set any village as your farm from Village Profile Page", 'FARM' : "Farm", 'SORT_FARM' : "Sorter farmene fine etter Distanse fra denn byen", 'DELETE_M' : "Trykk på 'X' ikonet for å slette en farm.", 'EDIT_M' : "Trykk på 'Endre' ikonet for å endre en farm", 'END_M' : "Velg sluttpunk for farming i denne kolonnen. Trykk her for å slette EndIndex", 'START_M' : "Velg startposisjon fra denne kolonnen", 'START_FARMING' : "Start å farme fra de valgte byene", 'MINIMIZE' : "Minimer", 'MAXIMIZE' : "Maksimer", 'FARM_INACTIVE' : "Farmen er satt som Inaktiv", 'ERROR' : "En Feil oppstod", 'NOT_ENOUGH' : "Det er ikke nok tropper for raidet mot", 'AVAILABLE' : "Tilgjengelig", 'NEEDED' : "Trengs", 'TROOPS_GONE' : "Tropper er på vei til", 'NEXT_FARM' : "Velger neste farm", 'SUCCESS_COUNT' : "Totalt Gjennomførte Troppe-Sendinger", 'HALT_FARMING' : "Stopp Farming", 'MACHINE_RUNNING' : "Farming Maskinen Kjører", 'CHANGE_VILLAGE' : "Prøver å Bytte Gjeldende By", 'NO_FARM' : "Ingen Tilgjengelige Farmer", 'NOT_FARMER' : "Dette er Ikke en Farmeby", 'USED_TROOPS' : "Brukte Tropper", 'GOING_TO' : "Går Til", 'INSTALL_M1' : "Legg til en ny Farm fra Byens Profilside", 'INSTALL_M2' : "Lykke til med Farmingen!", 'TRIBE_SELECT1' : "Din Stamme", 'TRIBE_SELECT2' : "Vennligst skriv inn riktig nummer for din stamme.", 'TRIBE_SELECT3' : "Du Valgte ikke Riktig Stamme, Romer blir satt som Standard.", 'ROMAN' : "Romer", 'TEUTON' : "Germaner", 'GAUL' : "Galler", //Settings 'SETRANDOMIZE' : "Tilfeldig Farming", 'SETREADREP' : "Analyser Rapporter for å lage en Prioritetskø", 'SETDELTLIST' : "Slett Midlertidig Liste når Farmingen er Ferdig", 'DELTEMPLIST' : "Slett midlertidige liste", 'UPDATE_SETTINGS' : "Oppdater innstillinger", 'SETVILSKIP' : "Aktiver landsbyen hopper", 'FARMMARKING' : "Mark gårder i kart", 'DYNAMICTROOPCOUNT' : "Dynamisk Tropper" } } else if (ext == "asia") { //Language:thai, Translator : XPeter lang = { 'UPDATE_M' : "อัพเดท", 'UPDATE_M1' : "ไม่พบเวปไซด์ UserScripts.org .", 'UPDATE_UNKNOWN' : "ไม่พบเลขเวอร์ชั่น :", 'UPDATE_LAST' : "คุณกำลังใช้เวอร์ชั่นล่าสุด", 'UPDATE_BETA' : "พบเวอร์ชั่น BETA ใหม่", 'UPDATE_NEW' : "พบเวอร์ชั่นใหม่", 'UPDATE_NOW' : "คุณต้องการอัพเดทเดี๋ยวนี้", 'CONFIRM' : "คุณแน่ใจหรือไม่", 'REMOVEING' : "กำลังลบ", 'SWITCH_V' : "เปลี่ยนไปยังหมู่บ้านที่", 'AFTER' : "หลังจาก", 'SEC' : "วินาที", 'NO_VILLAGE' : "ไม่มีฟาร์มอื่นแล้ว", 'WAITING' : "กำลังรอ", 'BEFORE_RE' : "ก่อนจะเช็คอีกครั้ง", 'ADD_FARM' : "คุณกำลังจะเพิ่มฟาร์ม", 'TROOP_CONFIG' : "จำนวนกองทัพทั้งหมดคือ", 'ATTACK' : "โจมตี", 'REINFORCE' : "ส่งกำลังเสริม", 'RAID' : "ปล้น", 'ACTIVE_FARM' : "ใช้ฟาร์มนี้", 'CANCEL' : "ยกเลิก", 'SAVE' : "บันทึก", 'ADD_TO' : "เพิ่มลง", 'ADD_AS' : "เพิ่มเป็นฟาร์ม", 'GLOBAL_IM_EX_PROMPT' : "Copy ข้อมูล All Village Data หรือ Paste Data จาก backup", 'GLOBAL_IM_EX_M' : "Import หรือ Export ข้อมูล raw farm data สำหรับทุกหมู่บ้าน", 'LOCAL_IM_EX_PROMPT' : "Copy ข้อมูล / Paste ข้อมูลใหม่", 'LOCAL_IM_EX_M' : "Import หรือ Export ข้อมูลฟาร์มของหมู่บ้าน", 'OPTIMIZE_DONE' : "เรียงลำดับฟาร์มใหม่อัตโนมัติเรียบร้อยแล้ว", 'OPTIMIZE_M' : "เรียงลำดับฟาร์มใหม่อัตโนมัติตามระยะทาง", 'OPTIMIZE_SM' : "กำลังเรียงลำดับฟาร์มใหม่อัตโนมัติตามระยะทาง", 'INVALID_FARM' : "เลือกข้อมูลกองทัพของฟาร์มผิดพลาด ต้องการลบ?", 'DELETE_FARM' : "ลบฟาร์มนี้", 'EDIT_FARM' : "แก้ไขฟาร์มนี้", 'NO_FARM_YET' : "เลือกหมู่บ้านเป็นฟาร์มได้จากหน้าหลักของหมู่บ้านนั้น", 'FARM' : "ฟาร์ม", 'SORT_FARM' : "เรียงลำดับฟาร์มตามระยะทางจากหมู่บ้านนี้", 'DELETE_M' : "คลิ๊กที่ปุ่ม X เพื่อลบฟาร์ม", 'EDIT_M' : "คลิ๊กปุ่ม Edit เพื่อแก้ไขรายละเอียดของฟาร์ม", 'END_M' : "เลือกจุดสิ้นสุดจากแถวนี้, คลิ๊กที่นี่เพื่อยกเลิกจุดสิ้นสุด", 'START_M' : "เลือกจุดเริ่มต้นจากแถวนี้", 'START_FARMING' : "เริ่มต้นฟาร์มจากหมู่บ้านที่เลือกไว้", 'MINIMIZE' : "ย่อส่วน", 'MAXIMIZE' : "ขยายส่วน", 'FARM_INACTIVE' : "ฟาร์มถูกยกเลิก", 'ERROR' : "เกิดความขัดข้อง", 'NOT_ENOUGH' : "กองทัพมีจำนวนไม่พอกับการปล้นที่", 'AVAILABLE' : "ว่าง", 'NEEDED' : "ต้องการ", 'TROOPS_GONE' : "กองทัพอยู่ระหว่างทางไป", 'NEXT_FARM' : "กำลังเลือกฟาร์มต่อไป", 'SUCCESS_COUNT' : "ส่งกองทัพสำเร็จทั้งหมด", 'HALT_FARMING' : "ยกเลิกการฟาร์ม", 'MACHINE_RUNNING' : "Farming Machine กำลังทำงาน", 'CHANGE_VILLAGE' : "กำลังเปลี่ยนไปยังหมู่บ้านถัดไป", 'NO_FARM' : "ไม่มีฟาร์มเหลืออยู่", 'NOT_FARMER' : "นี่ไม่ใช่ฟาร์ม", 'USED_TROOPS' : "กองทัพที่ใช้", 'GOING_TO' : "กำลังจะ", 'INSTALL_M1' : "คุณสามารถเพิ่มฟาร์มได้จากหน้าจุดระดมพล", 'INSTALL_M2' : "ขอให้สนุกกับการทำฟาร์ม", 'TRIBE_SELECT1' : "กองทัพของคุณ", 'TRIBE_SELECT2' : "กรุณาเลือกจำนวนของกองทัพให้ถูกต้อง", 'TRIBE_SELECT3' : "คุณเลือกชนิดกองทัพไม่ถูกต้อง, ระบบเลือกให้อัดโนมัติ", 'ROMAN' : "โรมัน", 'TEUTON' : "ทูทันส์", 'GAUL' : "กอลส์", //Settings 'SETRANDOMIZE' : "เกษตร Randomize", 'SETREADREP' : "Analize รายงานให้คิวลำดับความสำคัญ", 'SETDELTLIST' : "ลบรายการชั่วคราวเมื่อหยุด", 'DELTEMPLIST' : "รายการชั่วคราวลบด้วยตนเอง", 'UPDATE_SETTINGS' : "การตั้งค่า Update", 'SETVILSKIP' : "หมู่บ้านเปิดข้าม", 'FARMMARKING' : "ฟาร์ม Mark ในแผนที่", 'DYNAMICTROOPCOUNT' : "ยก Dynamic" } } else if (ext == "fi") { //Language:finnish, Translator : gotler lang = { 'UPDATE_M' : "Päivitä", 'UPDATE_M1' : "Osoitetta UserScripts.org ei löydy.", 'UPDATE_UNKNOWN' : "Versionumero ei täsmää :", 'UPDATE_LAST' : "Käytät viimeisintä versiota", 'UPDATE_BETA' : "Uusi BETA versio saatavilla", 'UPDATE_NEW' : "UUSI versio saatavilla", 'UPDATE_NOW' : "Haluatko päivittää nyt", 'CONFIRM' : "Oletko varma", 'REMOVING' : "Poistetaan", 'SWITCH_V' : "Vaihdetaan kylään koordinaateissa", 'AFTER' : "jälkeen", 'SEC' : "sekuntia", 'NO_VILLAGE' : "Ei farmattavia kyliä jäljellä!", 'WAITING' : "Odotetaan", 'BEFORE_RE' : "ennen uudelleentarkistusta.", 'ADD_FARM' : "Olet lisäämässä farmia", 'TROOP_CONFIG' : "Joukkomääritys on", 'ATTACK' : "Hyökkäys", 'REINFORCE' : "Vahvistus", 'RAID' : "Ryöstö", 'ACTIVE_FARM' : "Aktiivinen Farmi", 'CANCEL' : "Peruuta", 'SAVE' : "Tallenna", 'ADD_TO' : "Lisää", 'ADD_AS' : "Lisää farmiksi", 'GLOBAL_IM_EX_PROMPT' : "Copy All Village Data Or Paste Data from backup", 'GLOBAL_IM_EX_M' : "Import or Export raw farm data For all village", 'LOCAL_IM_EX_PROMPT' : "Copy the Data / Paste new Data", 'LOCAL_IM_EX_M' : "Import or Export farm data of this village", 'OPTIMIZE_DONE' : "Etäisyyksien optimointi onnistui", 'OPTIMIZE_M' : "Optimoi farmit valituissa kylissä etäisyyksien perusteella.", 'OPTIMIZE_SM' : "Going to Optimize All Farms In Selected Villages By their Distance", 'INVALID_FARM' : "Farm's Troops setting is invalid! Remove it?", 'DELETE_FARM' : "Poista farmi", 'EDIT_FARM' : "Muokkaa farmia", 'NO_FARM_YET' : "Set any village as your farm from Village Profile Page", 'FARM' : "Farmi", 'SORT_FARM' : "Järjestä farmit etäisyyden valittuun kylään perusteella", 'DELETE_M' : "Paina X kuvaketta poistaaksesi farmin", 'EDIT_M' : "Paina Muokkaa kuvaketta muokataksesi farmia", 'END_M' : "Valitse lopetuskohta. Paina tässä poistaaksesi valinnan", 'START_M' : "Valitse aloituskohta", 'START_FARMING' : "Aloita valittujen kylien farmaaminen", 'MINIMIZE' : "Minimoi", 'MAXIMIZE' : "Maksimoi", 'FARM_INACTIVE' : "Farmi ei ole aktiivinen", 'ERROR' : "Virhe", 'NOT_ENOUGH' : "Ei tarpeeksi joukkoja ryöstöön kylään", 'AVAILABLE' : "Saatavilla", 'NEEDED' : "Tarvitaan", 'TROOPS_GONE' : "Joukot ovat matkalla kylään", 'NEXT_FARM' : "Valitaan seuraava farmi", 'SUCCESS_COUNT' : "Onnistuneesti lähetettyjen lukumäärä", 'HALT_FARMING' : "Pysäytä farmaus", 'MACHINE_RUNNING' : "Farmikone käynnissä", 'CHANGE_VILLAGE' : "Yritetään vaihtaa nykyinen kylä", 'NO_FARM' : "Ei farmeja saatavilla", 'NOT_FARMER' : "Tämä ei ole farmaava kylä", 'USED_TROOPS' : "Käytetyt joukot", 'GOING_TO' : "Lähetetään", 'INSTALL_M1' : "Add New Farms from Village Profile Page", 'INSTALL_M2' : "Farmaamisen iloa", 'TRIBE_SELECT1' : "Heimosi", 'TRIBE_SELECT2' : "Anna heimon tyyppiä vastaava numero.", 'TRIBE_SELECT3' : "Et asettanut oikeaa heimoa, käytetään Roomalaisia oletuksena.", 'ROMAN' : "Roomalainen", 'TEUTON' : "Teutoni", 'GAUL' : "Gallialainen", //Settings 'SETRANDOMIZE' : "Satunnainen farmaus", 'SETREADREP' : "Analysoi raportit muodostaaksesi prioriteettijonon", 'SETDELTLIST' : "Poista väliaikainen lista lopettaessa", 'DELTEMPLIST' : "Poista väliaikainen luettelo käsin", 'UPDATE_SETTINGS' : "Päivitä asetukset", 'SETVILSKIP' : "Ota kylä heitto", 'FARMMARKING' : "Mark tilojen kartta", 'DYNAMICTROOPCOUNT' : "Dynaaminen Joukot" } } else if (ext == "nl") { //Language:dutch, Translator : Inqt_vis lang = { 'UPDATE_M' : "Update", 'UPDATE_M1' : "UserScripts.org niet gevonden.", 'UPDATE_UNKNOWN' : "Versie nummer komt niet overeen :", 'UPDATE_LAST' : "Je gebruikt de laatste versie.", 'UPDATE_BETA' : "Een nieuwe versie is beschikbaar, het is wel de BETA versie.", 'UPDATE_NEW' : "Een nieuw versie is beschikbaar.", 'UPDATE_NOW' : "Wil je nu updaten.", 'CONFIRM' : "Weet je het zeker?", 'REMOVING' : "Verwijderen", 'SWITCH_V' : "Wissel van dorp", 'AFTER' : "na", 'SEC' : "seconde", 'NO_VILLAGE' : "Geen ander dorp om naar toe te gaan!", 'WAITING' : "Wachten..", 'BEFORE_RE' : "voor recheck.", 'ADD_FARM' : "Je bent bezig met een nieuw farm toe te voegen", 'TROOP_CONFIG' : "Troepeninstellingen zijn", 'ATTACK' : "Aanval", 'REINFORCE' : "Versterking", 'RAID' : "Overval", 'ACTIVE_FARM' : "Actieve farm", 'CANCEL' : "Annuleer", 'SAVE' : "Opslaan", 'ADD_TO' : "Voeg toe aan", 'ADD_AS' : "Voeg toe aan Autofarm", 'GLOBAL_IM_EX_PROMPT' : "Kopieer alle dorpen data of plak alle data van een backup.", 'GLOBAL_IM_EX_M' : "Importeer of Exporteer Raw Farm Data van alle dorpen.", 'LOCAL_IM_EX_PROMPT' : "Kopieer de data / Plak nieuwe data", 'LOCAL_IM_EX_M' : "Importeer of exporteer Raw Farm Data van dit dorp.", 'OPTIMIZE_DONE' : "Sorteren op afstand gelukt!", 'OPTIMIZE_M' : "Sorteer farms in geselecteerde dorpen op hun afstand.", 'OPTIMIZE_SM' : "Sorteer farms in geselecteerde dorpen op hun afstand.", 'INVALID_FARM' : "Farm troepen instellingen is incorrect, verwijderen?", 'DELETE_FARM' : "Verwijder deze farm", 'EDIT_FARM' : "Wijzig deze farm", 'NO_FARM_YET' : "Zet een dorp als farmdorp op je dorpsprofiel pagina.", 'FARM' : "Farm", 'SORT_FARM' : "Sorteer farms op afstand van dit dorp", 'DELETE_M' : "Klik op het kruisje (X) om een farm te verwijderen", 'EDIT_M' : "Klik op de wijzig icoon om een farm te wijzigen", 'END_M' : "Selecteer eindpositie van deze rij, Klik hier om EndIndex te verwijderen", 'START_M' : "Selecteer startpositie van deze rij.", 'START_FARMING' : "Start Farming van geselecteerde dorpen", 'MINIMIZE' : "Minimaliseer", 'MAXIMIZE' : "Maximaliseer", 'FARM_INACTIVE' : "Farm ingesteld als inactive", 'ERROR' : "Error", 'NOT_ENOUGH' : "Niet genoeg troepen om te farmen", 'AVAILABLE' : "Beschikbaar", 'NEEDED' : "Nodig", 'TROOPS_GONE' : "Troepen op weg naar", 'NEXT_FARM' : "Bezig met volgende farm selecteren", 'SUCCESS_COUNT' : "Aantal succesvol verzonden", 'HALT_FARMING' : "Halt Farming", 'MACHINE_RUNNING' : "Farming Machine bezig", 'CHANGE_VILLAGE' : "Bezig met veranderen van dorp", 'NO_FARM' : "Geen farm beschikbaar.", 'NOT_FARMER' : "Dit is geen farmersdorp.", 'USED_TROOPS' : "Gebruikte troepen", 'GOING_TO' : "Gaan naar", 'INSTALL_M1' : "Voeg nieuwe farms toe van Dorpsprofiel pagina.", 'INSTALL_M2' : "Succes met farmen.", 'TRIBE_SELECT1' : "Je volk", 'TRIBE_SELECT2' : "Gebruik een correct getal voor je volk instellingen..", 'TRIBE_SELECT3' : "Het is niet gelukt om je volk in te stellen, Romein standaard ingesteld.", 'ROMAN' : "Romein", 'TEUTON' : "Germaan", 'GAUL' : "Gallier", //Settings 'SETRANDOMIZE' : "Willekeurig farmen", 'SETREADREP' : "Bekijk reports om een prioriteitslijst te maken", 'SETDELTLIST' : "Verwijder tijdelijke lijst wanneer je stopt", 'DELTEMPLIST' : "Verwijderen tijdelijke lijst handmatig", 'UPDATE_SETTINGS' : "Update instellingen", 'SETVILSKIP' : "Activeer dorp overslaan", 'FARMMARKING' : "Mark boerderijen in de kaart", 'DYNAMICTROOPCOUNT' : "Dynamische Troepen" } } else if (ext == "ir") { //Language:persian, Translator : Reza_NA lang = { 'UPDATE_M' : "بروز رسانی", 'UPDATE_M1' : "UserScripts.org پیدا نشد.", 'UPDATE_UNKNOWN' : "شماره نسخه مطابقت نمی کند :", 'UPDATE_LAST' : "شما از جدیدترین استفاده می کنید", 'UPDATE_BETA' : "نسخه جدید در دسترس است اما به صورت آزمایشی.", 'UPDATE_NEW' : "نسخه جدید در دسترس است", 'UPDATE_NOW' : "می خواهید بروز رسانی کنید", 'CONFIRM' : "آیا مطمئن هستید", 'REMOVEING' : "پاک کردن", 'SWITCH_V' : "تعویض به دهکده جدید در", 'AFTER' : "بعد از", 'SEC' : "ثانیه", 'NO_VILLAGE' : "دهکده دیگری برای حرکت نیست!", 'WAITING' : "صبر کنید", 'BEFORE_RE' : "قبل از بررسی مجدد.", 'ADD_FARM' : "شما در حال اضافه کردن مستعمره هستید", 'TROOP_CONFIG' : "آرایش لشکریان هست", 'ATTACK' : "حمله", 'REINFORCE' : "پشتیبانی", 'RAID' : "غارت", 'ACTIVE_FARM' : "مستعمره فعال", 'CANCEL' : "لغو", 'SAVE' : "ذخیره", 'ADD_TO' : "اضافه کردن به", 'ADD_AS' : "اضافه کرده به عنوان مستعمره", 'GLOBAL_IM_EX_PROMPT' : ".داده های تمام دهکده ها را رونوشت بگیرید یا داده های پشتیبانی را درج کنید", 'GLOBAL_IM_EX_M' : "وارد کردن یا خارج کردن ردیف داده های مستعمرات برای تمامی دهکده ها", 'LOCAL_IM_EX_PROMPT' : "از داده ها رونوشت بگیرید / داده های جدید را درج کنید", 'LOCAL_IM_EX_M' : "وارد کردن یا خارج کردن داده های همین مستعمره", 'OPTIMIZE_DONE' : "بهینه سازی مسافت با موفقیت انجام شد", 'OPTIMIZE_M' : "بهینه سازی مستعمرات در دهکده اصلی انتخاب شده برا اساس فاصله.", 'OPTIMIZE_SM' : "اقدام برای بهینه سازی تمامی مستعمرات در دهکده اصلی انتخاب شده برا اساس فاصله", 'INVALID_FARM' : "تنظیمات لشکریان برای مستعمره نامعتبر می باشد! پاک شود?", 'DELETE_FARM' : "حذف این مستعمره.", 'EDIT_FARM' : "ویرایش اطلاعات این مستعمره", 'NO_FARM_YET' : "انتخاب تمامی دهکده های به عنوان مستعمره از صفحه مشخصات دهکده", 'FARM' : "مستعمره", 'SORT_FARM' : "مرتب سازی بر اساس فاصله ی مستعمره از دهکده فعلی", 'DELETE_M' : "برای پاک کردن یک مستعمره روی تصوری ضربدر کلیک کنید", 'EDIT_M' : "برای اصلاح اطلاعات یک مستعمره بر روی تصویر ویرایش کلیک کنید", 'END_M' : "انتخاب نقطه پایان از این ستون، برای حذف آخرین اندیس اینجا کلیک کنید", 'START_M' : "انتخاب نقطه شروع از این ستون", 'START_FARMING' : "شروع غارت از دهکده های انتخاب شده", 'MINIMIZE' : "کوچک سازی", 'MAXIMIZE' : "حداکثر سازی", 'FARM_INACTIVE' : "تنظیم مستعمره بعنوان غیر فعال", 'ERROR' : "خطا", 'NOT_ENOUGH' : "برای حمله غارت سرباز کافی وجود دارد در", 'AVAILABLE' : "موجود", 'NEEDED' : "مورد نیاز", 'TROOPS_GONE' : "لشکریان در راه ", 'NEXT_FARM' : "انتخاب مستعمره بعدی", 'SUCCESS_COUNT' : "تمام لشکریان ارسال شده به صورت موفقیت آمیز", 'HALT_FARMING' : "متوقف ساختن غارت", 'MACHINE_RUNNING' : "دستگاه غارتگر در حال پردازش است", 'CHANGE_VILLAGE' : "تلاش برای تعویض دهکده فعلی", 'NO_FARM' : "هیچ مستعمره ای موجود نیست", 'NOT_FARMER' : "این دهکده مستعمره ای ندارد", 'USED_TROOPS' : "لشکریان استفاده شده", 'GOING_TO' : "حرکت برای", 'INSTALL_M1' : "اضافه کردن مستعمرات جدید از صفحه ی مشخصات دهکده ها", 'INSTALL_M2' : "غارت سودمند", 'TRIBE_SELECT1' : "نژاد شما", 'TRIBE_SELECT2' : "لطفا برای نژاد خود عدد مناسب وارد کنید.", 'TRIBE_SELECT3' : "شما نمی توانید نژاد فعلی خود را تعریف کنید، تنظیم رومی به عنوان پیشفرض.", 'ROMAN' : "رومی", 'TEUTON' : "توتن", 'GAUL' : "گول", //Settings 'SETRANDOMIZE' : "کشاورزی تصادفی", 'SETREADREP' : "تحلیل گزارشات برای ایجاد صف اولویت بندی شده", 'SETDELTLIST' : "لیست حذف موقت هنگام توقف", 'DELTEMPLIST' : "پاک کردن لیست موقت دستی", 'UPDATE_SETTINGS' : "تنظیمات بروز رسانی", 'SETVILSKIP' : "دهکده فعال پرش", 'FARMMARKING' : "مزارع علامت گذاری در نقشه", 'DYNAMICTROOPCOUNT' : "نیروهای دینامیکی" } } else if (ext == "tw") { //Language:繁體中文, Translator : Mike Chuang lang = { 'UPDATE_M' : "升級", 'UPDATE_M1' : "UserScripts.org 無法連線", 'UPDATE_UNKNOWN' : "未知版號 :", 'UPDATE_LAST' : "您使用的是最新版本", 'UPDATE_BETA' : "有新的Beta版可用", 'UPDATE_NEW' : "有新版可用", 'UPDATE_NOW' : "您現在要升級嗎", 'CONFIRM' : "確定嗎", 'REMOVING' : "移除", 'SWITCH_V' : "將切換村莊至", 'AFTER' : "請稍候", 'SEC' : "秒", 'NO_VILLAGE' : "沒有其他村莊可切換", 'WAITING' : "等待中", 'BEFORE_RE' : "在重新檢測以前", 'ADD_FARM' : "您正在增加您的羊", 'TROOP_CONFIG' : "軍隊配置為", 'ATTACK' : "攻擊:正常", 'REINFORCE' : "增援", 'RAID' : "攻擊:搶奪 ", 'ACTIVE_FARM' : "啟動打羊任務", 'CANCEL' : "取消", 'SAVE' : "保存", 'ADD_TO' : "增加到", 'ADD_AS' : "存為肥羊", 'GLOBAL_IM_EX_PROMPT' : "複製所有村莊資料或從備份中拷貝資料", 'GLOBAL_IM_EX_M' : "為所有村莊匯入或匯出肥羊資料", 'LOCAL_IM_EX_PROMPT' : "複製資料或拷貝新資料", 'LOCAL_IM_EX_M' : "匯入或匯出本村莊的資料", 'OPTIMIZE_DONE' : "距離優化完成", 'OPTIMIZE_M' : "以距離優化打羊程序.", 'OPTIMIZE_SM' : "將要在選擇中的村莊裡進行距離優化", 'INVALID_FARM' : "攻擊部隊的設定無效,移除它?", 'DELETE_FARM' : "刪除本任務", 'EDIT_FARM' : "編輯本任務", 'NO_FARM_YET' : "您還沒設定始於自己的肥羊,趕快行動吧", 'FARM' : "肥羊", 'SORT_FARM' : "以目前村莊為標準,按距離給肥羊排序", 'DELETE_M' : "按X刪除羊", 'EDIT_M' : "按編輯圖示編輯羊", 'END_M' : "從對列中選擇結束點,按這裡移除終點", 'START_M' : "在對列中選擇起始點", 'START_FARMING' : "從選擇的村莊開始打羊行動", 'MINIMIZE' : "最小化", 'MAXIMIZE' : "最大化", 'FARM_INACTIVE' : "肥羊設定失效", 'ERROR' : "計畫暫時受阻", 'NOT_ENOUGH' : "沒有足夠的軍隊攻擊", 'AVAILABLE' : " 可用", 'NEEDED' : "需要", 'TROOPS_GONE' : "正在派遣軍隊到", 'NEXT_FARM' : "自動選擇下一肥羊", 'SUCCESS_COUNT' : "攻擊成功發動總計", 'HALT_FARMING' : "終止打羊行動", 'MACHINE_RUNNING' : "攻擊機運行中", 'CHANGE_VILLAGE' : "嘗試改變當前村莊", 'NO_FARM' : "沒有可用的羊", 'NOT_FARMER' : "此村未參予打羊", 'USED_TROOPS' : "正在調動軍隊", 'GOING_TO' : "正在準備 -", 'INSTALL_M1' : "小提示:您可以從敵村村莊概述頁把它加入攻擊名單中", 'INSTALL_M2' : "盡情享受吧", 'TRIBE_SELECT1' : "您的種族", 'TRIBE_SELECT2' : "請輸入一個正確的種族代碼", 'TRIBE_SELECT3' : "您未能正確設定種族,內定為羅馬。", 'ROMAN' : "羅馬", 'TEUTON' : "日耳曼", 'GAUL' : "高盧", //Settings 'SETRANDOMIZE' : "Randomize farming", 'SETREADREP' : "Analize reports to make a priority queue", 'SETDELTLIST' : "Delete temporary list when stopping", 'DELTEMPLIST' : "Delete temporary list manually", 'UPDATE_SETTINGS' : "Update settings", 'SETVILSKIP' : "Activate village skipping", 'FARMMARKING' : "Mark farms in map", 'DYNAMICTROOPCOUNT' : "Dynamic Troops" } } else if (ext == "lt") { //Language:Lithuanian Translator : m0ng00se lang = { 'UPDATE_M' : "Atnaujinti", 'UPDATE_M1' : "UserScripts.org nerastas.", 'UPDATE_UNKNOWN' : "Nesutampa versijos numeris :", 'UPDATE_LAST' : "Jūs naudojatės vėliausia", 'UPDATE_BETA' : "Atsirado nauja BETA versija", 'UPDATE_NEW' : "Atsirado NAUJA versija", 'UPDATE_NOW' : "Ar norite atnaujinti", 'CONFIRM' : "Jūs įsitikinę", 'REMOVING' : "Šalinama", 'SWITCH_V' : "Jungiamasi į kaimą", 'AFTER' : "po", 'SEC' : "sek.", 'NO_VILLAGE' : "Neturite daugiau kaimų!", 'WAITING' : "Laukiama", 'BEFORE_RE' : "prieš patikrinimą.", 'ADD_FARM' : "Ketinate pridėti fermą", 'TROOP_CONFIG' : "Karių konfigūracija yra", 'ATTACK' : "Ataka", 'REINFORCE' : "Pastiprinimas", 'RAID' : "Reidas", 'ACTIVE_FARM' : "Aktyvi ferma", 'CANCEL' : "Atšaukti", 'SAVE' : "Išsaugoti", 'ADD_TO' : "Pridėti", 'ADD_AS' : "Pridėti fermą", 'GLOBAL_IM_EX_PROMPT' : "Kopijuoti kaimų duomenis arba įkelti informaciją iš kopijos", 'GLOBAL_IM_EX_M' : "Importuoti / Eksportuoti visų kaimų fermų duomenis", 'LOCAL_IM_EX_PROMPT' : "Kopijuoti duomenis / Įkelti duomenis", 'LOCAL_IM_EX_M' : "Importuoti / Eksportuoti šio kaimo fermų duomenis", 'OPTIMIZE_DONE' : "Atstumų optimizavimas sėkmingai atliktas", 'OPTIMIZE_M' : "Optimizuoti pasirinkto kaimo fermas pagal atstumą.", 'OPTIMIZE_SM' : "Ketinate optimizuoti pasirinkto kaimo fermas pagal atstumą", 'INVALID_FARM' : "Neteisingai nustatyti kariai ferminimui! Pašalinti?", 'DELETE_FARM' : "Pašalinti šią fermą.", 'EDIT_FARM' : "Redaguoti šią fermą", 'NO_FARM_YET' : "Pasirinkite kaimą, kurį ferminsite iš šiuo metu aktyvaus savo kaimo", 'FARM' : "Ferma", 'SORT_FARM' : "Rūšiuoti fermas pagal atstumą nuo jūsų kaimo", 'DELETE_M' : "Norėdami pašalinti fermą, paspauskite X", 'EDIT_M' : "Norėdami keisti fermos nustatymus, paspauskite Edit", 'END_M' : "Pasirinkite paskutinę poziciją nuo šio stulpelio, paspauskite čia, norėdami pašalinti EndIndex", 'START_M' : "Pasirinkite pradinę poziciją nuo šio stulpelio", 'START_FARMING' : "Pradėti pasirinktų kaimų ferminimą", 'MINIMIZE' : "Minimizuoti", 'MAXIMIZE' : "Maksimizuoti", 'FARM_INACTIVE' : "Ferma statusas pakeistas į neaktyvią", 'ERROR' : "Klaida", 'NOT_ENOUGH' : "Nepakanka karių reidinimui", 'AVAILABLE' : "Prieinama", 'NEEDED' : "Reikalinga", 'TROOPS_GONE' : "Kariai keliauja į", 'NEXT_FARM' : "Pasirinkti kitą fermą", 'SUCCESS_COUNT' : "Sėkmingų išsiuntimų skaičius", 'HALT_FARMING' : "Nustoti ferminti", 'MACHINE_RUNNING' : "Farming Machine dirba", 'CHANGE_VILLAGE' : "Bandoma pakeisti aktyvų kaimą", 'NO_FARM' : "Nėra fermų", 'NOT_FARMER' : "Čia ne ferminimo kaimas", 'USED_TROOPS' : "Naudoti kariai", 'GOING_TO' : "Keliaujama į", 'INSTALL_M1' : "Naujas fermas pridėkite iš kaimo aprašymo puslapio", 'INSTALL_M2' : "Sėkmės ferminant", 'TRIBE_SELECT1' : "Jūsų gentis", 'TRIBE_SELECT2' : "Įveskite teisingą jūsų genties kodą.", 'TRIBE_SELECT3' : "Jums nepavyko sėkmingai įvesti genties kodo, automatiškai nustatoma: Romėnai.", 'ROMAN' : "Romėnai", 'TEUTON' : "Germanai", 'GAUL' : "Galai", //Settings 'SETRANDOMIZE' : "Ferminimas atsitiktine tvarka", 'SETREADREP' : "Analizuoti ataskaitas, ferminimo prioritetams nustatyti", 'SETDELTLIST' : "Išvalyti laikinąjį sąrašą, kai stabdoma", 'DELTEMPLIST' : "Išvalyti laikinąjį sąrašą rankiniu būdu", 'UPDATE_SETTINGS' : "Pakeisti nustatymus", 'SETVILSKIP' : "Įjungti kaimų praleidimą", 'FARMMARKING' : "Rodyti fermas žemėlapyje", 'DYNAMICTROOPCOUNT' : "Dinaminis karių parinkimas" } } else if (ext == "il") { //Language:Hebrew, Translator : Tzachi lang = { 'UPDATE_M' : "עדכן", 'UPDATE_M1' : " לא נמצאUserScripts.org .", 'UPDATE_UNKNOWN' : "מספר הגירסה אינו תואם :", 'UPDATE_LAST' : "הגירסה מעודכנת", 'UPDATE_BETA' : "גירסת בטא חדשה זמינה", 'UPDATE_NEW' : "גירסה חדשה זמינה", 'UPDATE_NOW' : "אתה רוצה לעדכן עכשיו", 'CONFIRM' : "האם אתה בטוח", 'REMOVING' : "מסיר", 'SWITCH_V' : "מחליף לכפר ב", 'AFTER' : "בעוד", 'SEC' : "שניות", 'NO_VILLAGE' : "אין כפר נוסף לביצוע!", 'WAITING' : "ממתין", 'BEFORE_RE' : "לפני בדיקה מחדש.", 'ADD_FARM' : "הוספת חווה", 'TROOP_CONFIG' : "הגדרת החיילים היא", 'ATTACK' : "התקפה רגילה", 'REINFORCE' : "תגבור", 'RAID' : "בזיזה", 'ACTIVE_FARM' : "חווה פעילה", 'CANCEL' : "ביטול", 'SAVE' : "שמור", 'ADD_TO' : "הוסף ל", 'ADD_AS' : "הוסף כחווה", 'GLOBAL_IM_EX_PROMPT' : "העתק את כל נתוני החוות או הדבק נתונים מגיבוי", 'GLOBAL_IM_EX_M' : "ייבא או ייצא נתוני חווה לכל הכפרים", 'LOCAL_IM_EX_PROMPT' : "העתק נתונים / הדבק נתונים", 'LOCAL_IM_EX_M' : " ייבא או ייצא נתוני חווות של כפר זה ", 'OPTIMIZE_DONE' : "אופטימיזציה על פי מרחק בוצע בהצלחה", 'OPTIMIZE_M' : "בצע אופטימיזציה של החוות בכפר זה על פי מרחק.", 'OPTIMIZE_SM' : "מבצע אופטימיזציה לכל החוות בכפר הנבחר על פי מרחק", 'INVALID_FARM' : "הגדרת החיילים של החווה אינה תקינה, האם להסיר אותה?", 'DELETE_FARM' : "מחק חווה זו.", 'EDIT_FARM' : "ערוך חווה זו", 'NO_FARM_YET' : "קבע כפרים כחוות מדף הפרופיל שלהם", 'FARM' : "חווה", 'SORT_FARM' : "סדר חוות על פי מרחק מהכפר הנוכחי", 'DELETE_M' : "x כדי למחוק חווה לחץ על ה ", 'EDIT_M' : "לחץ על לחצן העריכה כדי לערוך את נתוני החווה", 'END_M' : "בחר בעמדת הסיום בעמודה זו, לחץ כאן כדי להסיר את עמדת הסיום", 'START_M' : "בחר עמדת התחלה מעמודה זו", 'START_FARMING' : "התחל בזיזה מהכפר הנבחר", 'MINIMIZE' : "מזער", 'MAXIMIZE' : "הגדל", 'FARM_INACTIVE' : "חווה מוגדרת כלא פעילה", 'ERROR' : "Error", 'NOT_ENOUGH' : "אין מספיק חיילים בשביל הבזיזה של", 'AVAILABLE' : "זמין", 'NEEDED' : "צריך", 'TROOPS_GONE' : "חיילים בדרך ל", 'NEXT_FARM' : "בוחר בחווה הבאה", 'SUCCESS_COUNT' : "מספר הבזיזות שנשלחו עד כה בהצלחה", 'HALT_FARMING' : "עצור בזיזות", 'MACHINE_RUNNING' : "מכונת הבזיזות פועלת", 'CHANGE_VILLAGE' : "מנסה להחליף כפר", 'NO_FARM' : "אין חווה זמינה", 'NOT_FARMER' : "כפר זה אינו כפר בוזז", 'USED_TROOPS' : "חיילים בשימוש", 'GOING_TO' : "עובר ל", 'INSTALL_M1' : "הוסף חוות חדשות מדף הפרופיל של הכפרים", 'INSTALL_M2' : "בהצלחה בבזיזות", 'TRIBE_SELECT1' : "השבט שלך", 'TRIBE_SELECT2' : "אנא הכנס את המספר עבור השבט שלך.", 'TRIBE_SELECT3' : "לא קבעת את השבט הנכון שלך, קובע רומאים כברירת מחדל.", 'ROMAN' : "רומאים", 'TEUTON' : "טאוטונים", 'GAUL' : "גאלים", // Settings 'SETRANDOMIZE' : "בזוז בסדר רנדומלי", 'SETREADREP' : "נתח דוחות כדי ליצור סדר מועדף של חוות", 'SETDELTLIST' : "מחק רשימה זמנית בעצירה", 'DELTEMPLIST' : "מחק רשימה זמנית באופן ידני", 'UPDATE_SETTINGS' : "עדכן הגדרות", 'SETVILSKIP' : "הפעל דילוג כפרים", 'FARMMARKING' : "סמן חוות במפה", 'DYNAMICTROOPCOUNT' : "חיילים דינמיים" } } lang['SCRIPT_NAME'] = "Otomatik yagma"; } //image & style function loadImage() { FM_log(3,"loadImage() called"); image['DELETE'] = "data:image/gif;base64," + "R0lGODlhDAAMAMQQAMwzM88/P/zy8tllZfXZ2fnl5fLMzOyystJMTO+/v+mlpdVZWdxycuWZ" + "meKMjN9/f////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "ACH5BAEAABAALAAAAAAMAAwAQAVJIAQViiCKx0CICQAciLuYJ+MCwSoWw60UMtqp5zKcBAHA" + "ICFyABC6Q3KAilFFDVegFxCKkC7GaZxN4oSEJAJiuAEKiYdxbKCFAAA7"; image['EDIT'] = "data:image/png;base64," + "iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAABGdBTUEAAK/INwWK6QAAABl0" + "RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAASsSURBVHjaYmzvn8bw798fBmYW" + "dgZmBiaGX39+M7AxszD8/fePgYmVmYGd4RNDjFQXgxDHSwaGPwwM/ySsck591i4T/bhrljLn" + "4y6gwl8MUAAQQEwMeAATwz+Gj79FGM68d2T49xdo1l8GRgap1BiRB79kn92Raf7LyK6LrB4g" + "gFgYCABWpt8MVz+bMIj/2MQgJKXgIv3pj4nczWUMAoycl5j/fr8ONJ4B6CUGBg4GBoAAYiJk" + "2N+/Pxk+/uRjOPdcmeGveFg+0/O9zN9YfjMwyP9c/e03w7f//xgY7j1hYGiaw8AAEEAsuA35" + "y/D3/z9BJXm5fF5+MavnN4KOi0qqOzGcmsjwU4jl7bPfPxdwA4Px8gMGhoqFDAx3njMwAAQQ" + "hmH/gAH/8+8vBn5+3ggTY706fW1Nzd9//zPcF2d15fw2A+il9wxP/zDsvPeG4cnTdwwMbasY" + "GF59hOgFCCC4Yf///2f49fsXAycHp4Outmqpga62Fz8fH8OPn78ZXr16ySDO84KB6cMWhq9A" + "+06/U1n24OV/hulr7zF8/Pof7hCAAGKCGPIbZJi2rrb6yogQ3z02luZeLCxsDG/ff2R4/+kL" + "w5cv7xkEuY4xMPx8wfDsnwUjj+XMpKesXnxQg4SAWB2I+QACiIWFhVlOTkYxw0BfL0NOWkrw" + "1+8/DO8+fGL4DaT//vvP8P37TwYent8M7Nx3GX6/ZWB4wuTBKCkuGiQjLSrCxy/Q9+njhw9A" + "gwSBmB8ggBgPHz991FBP1+rbjx8M33/8Yvj95w8DyMC/f/8xsLIAI/s/I8OVi7sZxFk2MDy/" + "9YHhDW8cAycXJzA42Bnu3Ln7furUyW3Pnz45CTTsJ0AAMb3/8PE3KK18Bbrg89dvDF+/gQz9" + "CY4IJiZGBh5uDoY9e88xtM34xfCSL5mBg5ODgRkozs7GxuDr7SW4YsWqhtDIOG0VFf0zAAHE" + "rKVnsP/bj5+6UpLiSr9+/QUa+J2BBegiNlZQSvzP8Afo0ju37zCYmtsx6GirM/Dz8TCoqaoy" + "aGtrMcjJyzIoyMuyWVjaODGxC6wACCAWoKMeXr58Pfj9+49zzU2Ng/n5uBl+fP8BjMWfDMyM" + "QBcAvSMlJc/w+9M9BilRAwZRKV0GDjYWoMtYwTF4+8FzhhNnLzIwsvxmAggATQCy/wQBAQEA" + "BQUE8ePj5Fv09/ffJCQmdB4aFgD6+voABgUEAAQDAwBDQkAAAvndAPfo1AD+ExoABwwSAOHm" + "6wDL0dcA3dzdqgkFAZEDAQPbAgiezoDR+vPL18+lJ8+c+fRTT7/JQEsFGAl/wIaxcrAxMHAr" + "MfDxijB8//aF4fztpwwXLl6+9vXz+zomhr9r2biEGH7++sMAEEAoOYCJiZmBhfFX883rN77/" + "+vmzydJYl5MTaBAHMLB//WFhuHP/I8Ola+eev/vwceGPb597WJiZ3v7/h8jeAAGElp3+MzAD" + "yzIudraea1du3Pz87fsyV1tznhdvPjKcuXTt7+NHD+eyMTG2C/BzP/jxHVRcMKLoBgggHBmd" + "Eeg9ps1PH93zX7ftSy8wm736/uVjH9BLO1lYuDAMgQGAAGIEZSdqAYAAAwBv6sTarY5ZRgAA" + "AABJRU5ErkJggg=="; image['OPTIMIZE'] = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf" + "8%2F9hAAAABGdBTUEAAK%2FINwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFk" + "eXHJZTwAAALtSURBVDjLbVPtS1NxFD73Nid6R7o13XxpY8WgJWTIPhQskMj%2BAKFvQpB%2B" + "HtYHIUd9EJQC8R8YftoQhNk%2FkGStNV%2Ba1cSyMXQ5tcbm1DX3du%2F93ds5FxQlL5wxfr" + "%2FzPOd5nnMvp6oqXPTEYrFBWZYHGGMgSVKwt7d3%2BqI%2B7izB2tqaCwF7WMcIzthstha6" + "X1payjU2NlrxzIBkHf39%2FRsnGP4M2I%2FAdWxKYJMFi9VqNaDS6%2FWMzkRRTGCtB4NB%2" + "FzmCeDzuEwRhyG6380ajkSYlsSzVahUqlQooikKESby3ohXebDYPTU5O%2Bgirox9k5TOZDH" + "nhaKLFYhF4nifv2hSXy0XnAt1tb29DOBxWkZw%2Fl0E0Gh1vamoapakUXKFQgHQ6DXV1deBw" + "OECn02mE5XKZ7E6MjIxoCjgMaBXltmIJVqvVWCqV4PDwkAgX8f%2FL%2Bvp6QFtjbrf7Lg1D" + "q7CwsHCIZCXEZLlIJMKcTiefz%2BehWCxqEzc2NiCVSvX5fL55muL3%2Bx%2F8aJx5W5IK8K" + "jjNRgMBrIJU1NTCk%2ByyBuyadJpCjWgndP1Uk9VFqHT7ILpLS9lBqSU7HCBQGB1f3%2B%2F" + "FWUK3d3dRkod1waBxFNMX2SiIoMkM77d5ORudXpg5dc7iO8sw5WV3l0kzp6GODc3N97W1jZK" + "Siiwma1n0Nf1GJiqAFMYKKBCprALRqEVFrfmYTX9QUZVem2NoVDoBbI9b25uhqOjI00BSSbw" + "dj4JEqqQFQkkJsHfWhFuX70Hx1JZt5yKVDUCzEDBDXANDQ30UsHm5mapaq0KMpPBctmGYKaR" + "%2FSmkwWSwwpedT7Cc%2BJwrA9hPLYyNjfkPDg6eYDhZk8nUk3SEftcwLFERoYJqrptvwp1r" + "DyGWjkJ4%2FeNBia%2B0%2F55Qa%2Bc%2BpuHhYRda2UMrx7j%2FjMfjaaG0Z2dnc99uzHBu" + "231z%2BOf77%2Fiq9SBY%2FO9rPPt4vd7BXC43QCvmOC74tevNK6ZcMlcUVpedUOWTvn%2FP" + "Q%2BbC95cxOwAAAABJRU5ErkJggg%3D%3D"; image['GIM_EXPORT'] = "data:image/png;base64," + "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8%2F9hAAAABGdBTUEAAK%2FINwWK6" + "QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKUSURBVDjLhVNdSJ" + "NRGH6%2B%2BenSTc3Rl9Y0KzRcoSHShURERRldlLGLMsqrCO2iLuwuL7qKLr0MoQvDHJi" + "gJkEbG5mGdzKU1PnvN7I2Fgu33Or7W%2B858YkrpRee8x7ec97n%2FTtHyGQyCAQCVtJX" + "CS2GYdSQribQ1vhEeon0C0KgublZx18i%2BP3%2B43TJI0lSXVlZGWw2GwoKCsCINzY2k" + "EwmEQ6HEYvFPpLtptvtXs9i8Pl872VZZuEyu4mqqplgMJh57O1Ya%2Fe25jByExZaTpSW" + "luJ%2F4nQ6kdZSTlXRAtvtIkXmTNPT07Db7RwlJSVYSS7infwGa8llaJoOTdXhLCwX7Zr" + "97C3PdW9fy2BTFoHD4WB1IhKJIJH3HZPKBA4UOXHh4GXoGR0GQTd0vk%2Bl0peuPW9aGm" + "7zVolmLSyyKIoUTUMgPoN9uRIk635MRYNY%2BbYMVVFRXlTBz0PhBf%2FIfd9FloHFzIA" + "dULM4FhMh7jiyMIREfBOte9vwtLEL65%2B%2FanNyaFz5qTSdf3Y6P6sEXdc5CcO9Qw85" + "UTQaRfJHktvYnTzFqpPzOV%2FHmEG%2B6awMzOgmyRahquHtlyF%2Bp0FoTJCz%2Fs8UG" + "ExHk1DRflHjDAxHBpBSNrldURQ0djaMUT%2FO0DgZuSyySPF4HPQS%2BQTS6fQfZksuBu" + "Q%2B5BXlQFDzceflDWqkJh2tOCydqq%2FH7Pw8xsYnvILH47lC7P0ul8tWWVkJq9UKQRB" + "w99VtFBcW4%2BSx2q3xmeNcWl2F3z86qWv6I4Gl29vbe4RIOglui8VSzP4CK2dQfo09ks" + "gf0kxoDhpPm%2FVG%2F0DOT1Z7wqOcYLt0d3cXknMVwaCmhjzRHi%2Bl7pjqmq3b8Y1v%" + "2Fxg7ofZBTY6rvbp%2Ft%2FPfI0AjgZ0qo%2BwAAAAASUVORK5CYII%3D"; image['IM_EXPORT'] = "data:image/png;base64," + "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8%2F9hAAAABGdBTUEAAK%2FINwWK6" + "QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAK4SURBVDjLjZPrT1" + "JhHMfPq%2FNH%2BK6ty2bhJcswzUa2hTMaEmCsZmWuUU0HQuAVEWHMgCnLy2yOhiOKIs0" + "L08ByXgab1TTRNlO7ULwylTOZ9iL9djiVrdLmi%2B%2BbZ7%2FP5znP93kOAYDYKt1F%2" + "B0k6cR4ZK86jSCS3m9sW7pGxwh5FwlqfOmnNW34w7NUcInck6Ck%2BQNJgZNjExYTzOl6" + "7iuG%2FnQuf7kjEp2eT%2FxV45AlknyopMmLJweRDGR05Jt1KBDvLMdoiRp8uLeKpTiO3" + "FHiUiWR%2FWTI12sBD8JEC%2FkYBvLXpeGrIwHCTGOPuKgxYRXCXsan7ilTyD0G%2FOpn" + "0lqdQfisfwccq%2BJuEGKjjYHpqkklvLQc%2BiwiBe2p06%2FmwSVOo5kvJjISgCyLpgi" + "j%2FbQGCHWX0p4rgNZ7AyxdjWFxcxPLyMuZmZ%2BBUHUOHlodnd26g%2FeYpmIQsSn86n" + "iR81akBf9PZn%2BfMo%2BEsTIy%2FwtLSEgP%2FyuzbGbQUsnFXdhJd5gtoLMxAOWdvgK" + "Cb5Xr1aevDzXno0WZufHg3t7nz3%2Fn08T1qclhouHgUZZl71ulwfxRYncZ9omGPWOstG" + "6urq8ywUqmESqWCWq1GaWkpsxaNRmEx3YKaEz8Vg%2F%2B5RpPJtEJRFDMcA1tbW9HW1o" + "bKyspNQUwqkUj2bfkODAbDSiQSYYYrKipgs9lgt9tRU1OzKZDL5RAKhb8FRc8vJxR0nTs" + "vtvMGxBb%2BN8dQO2ISjUYDh8MBp9MJWsysPXhjR0GnBGIbbzrbytGmaw%2FzCRr%2BLO" + "u9iqrBEhT1FqDAmo9wOAydTgeXywW32426ujqEQiFoBlSoH9NDO6REvkOERFl8lKB3HqR" + "tIdoWOC5Lp3jXchakUum80WhkQLoXmM1mCASC%2BdySMwvZtVlf0zWpYzT8ZfeVXYPEdr" + "%2FpTvMdjX2sh%2B52%2FVQAAAAASUVORK5CYII%3D"; image['MINIMIZE'] = "data:image/png;base64," + "iVBORw0KGgoAAAANSUhEUgAAAB4AAAAQCAYAAAABOs/SAAAABGdBTUEAAK/INwWK6QAAAB" + "l0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAGASURBVHjaYlyyYMVMdnb2" + "NFYWFgYWIGZkYmKgBfj/7x/Dnz9/GH4D8c+fP2cBBBALDzd3Mhc3NwMHOwcDCysrAzONLP" + "4Lsvj3b4YfP38wfPv6NRkggFiAljLz8PAycHFyMrCxsjEwA31NE4uBPv31+xcDy3dWEJcZ" + "IIBYQD4FWcrFBfE1MzMTAyMjI3WD+f9/hr9//4F9CwIgnwMEEAsoeEE+BVnKzsHOwMJMGx" + "//+fsHYSnQToAAYgHFKSh4QT4FWcpCo6AGW8r8G2IX0E6AAIKnJGoHLzaAbAdAADExDBAA" + "CKABsxgggPBG6OUrlxjOnjtDsqG6OnoMxkYmeNUABBBei/fs3cXQ0FJHssWF+SUELQYIIL" + "wW6+rqMyTEJZFssbGhCUE1AAHEgpzJ0YGLkysYU7MggQGAAGIBlaGg4gxUssAyOa0KEJAd" + "YLuAdgIEEAuwJPkLLEOZ4cUZMJPTssgEldcgOwECiAXIWQYsuGNhxRmtK4lv37+DHLAMIM" + "AAhwiVy91Y0KAAAAAASUVORK5CYII="; image['MAXIMIZE'] = "data:image/png;base64," + "iVBORw0KGgoAAAANSUhEUgAAAB4AAAAQCAYAAAABOs/SAAAABGdBTUEAAK/INwWK6QAAABl" + "0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAF1SURBVHjaYlyyYMVMdnb2NF" + "YWFgYWIGZkYmKgBfj/7x/Dnz9/GH4D8c+fP2cBBBALDzd3Mhc3NwMHOwcDCysrAzONLP4Ls" + "vj3b4YfP38wfPv6NRkggFiAljLz8PAycHFyMrCxsjEwA31NE4uBPv31+xcDy3dWEJcZIIBY" + "QD4FWcrFBfE1MzMTAyMjI3WD+f9/hr9//4F9CwIgnwMEEAsoeEE+BVnKzsHOwMKM8LGwJB9" + "FFr59/gnO/vP3D8JSoJ0AAcQCilNQ8IJ8CrKUBUtQz5kxnyQLUzISwTS6WX+Yf0PsAtoJEE" + "BwGXzBGxocTpbF6ADZDoAAok0SJgIABNCAWQwQQANmMUAADZjFAAFEVGmxeu1KqlsMEEAsy" + "Jmc1FRKTkECAwABxAIqQ0HFGahkgWVybAUAOQBUKSAXICA7wHYB7QQIIBZgSfIXWIYyw4sz" + "YCanZZEJKq9BdgIEEAuQswxYcMfCijNaVxLfvn8HOWAZQIABACNVl3Dbv9rRAAAAAElFTkS" + "uQmCC"; image['LOADING'] = "data:image/gif;base64," + "R0lGODlhEAAQAPfgAP////39/erq6uvr6+jo6Pn5+dPT0/v7+/X19efn5/Pz8/j4+Pf39/r6+vz8" + "/MzMzO/v7/b29svLy/7+/unp6e7u7kJCQtnZ2fHx8a+vr4mJid7e3s/PzyYmJrOzs/Dw8NLS0vT0" + "9Le3t9ra2tvb25CQkKOjo2tra9DQ0KysrM3Nza2traurq729vezs7M7OzuHh4fLy8rq6und3d6Cg" + "oIGBgYCAgGRkZGJiYsPDw8fHx4eHh+Dg4J+fn6KiooiIiG9vb6enp9fX18DAwOXl5d3d3e3t7WBg" + "YJmZmZOTk9/f30VFRebm5jQ0NBUVFQQEBNjY2ISEhOTk5K6urtzc3D8/P2dnZ8LCwpubm8jIyLm5" + "uZqamiEhIcTExC0tLbCwsIyMjNXV1dHR0VxcXOPj40lJSTw8PGxsbExMTCwsLF9fXxAQEMnJyRYW" + "FpSUlCIiIhsbGwgICAsLC11dXVhYWJGRkba2try8vMbGxr+/v7i4uDs7O76+vmFhYYaGho2NjbW1" + "tZeXl4qKiiQkJKmpqYODg0ZGRk9PT3Z2dgkJCTo6OkFBQY+Pjx8fH3l5eRMTEw8PDyoqKrGxsWho" + "aHNzcwcHB7KysqGhoYKCgkpKSmVlZXFxcaioqE1NTeLi4p2dnaampqSkpJ6ensXFxVNTU7S0tFZW" + "VjExMVlZWaWlpVRUVDAwMCgoKFBQUKqqqg0NDUNDQxkZGT09PUdHR3p6ehISEgICAsHBwURERDU1" + "NZKSkm1tbTk5OWlpaRwcHFJSUtTU1DMzMyAgIH5+fiMjI3JycnR0dA4ODkhISMrKynx8fJiYmAYG" + "BnV1dU5OTgMDA4WFhR4eHgoKCpycnC8vL1paWmNjYzc3N7u7u4uLiycnJ3t7e15eXhoaGjY2NkBA" + "QP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEA" + "AAAh+QQFAADgACwAAAAAEAAQAAAIpQDBCRxIsGDBF1FwOQEQwEEAg+B6XJMT5wmAAwwiFCjo480j" + "TVOYAJhQAEMFBgPFLOomyCADAQI2gqvDBQhEcBVgVBA4p4OImyFIeBIoy4uAmwcMhBFoocmAmw0k" + "cBB4Yk+emwJyGBDYw8KPmyhkbBB4wUonTgYNTBnyYaCeMaiQqMCg4EILGimKFLzj6MYZRDY0JGFx" + "AaISD0lqaEil4+jNxwIDAgAh+QQFAADgACwBAAEADgAOAAAImwDBCTRQx1SkDmj8qBDIkIUzbVzg" + "OFkj59QWhhmqrJohggKBLzgqrQEADsocRRcZCqwBIMAEHxaiqFQZoMCBGWWuzGQYAAGDOa0q7BQ4" + "4cOHG3QgDAUXQMCAHUckLEVAZoClSTSWJqBSAcYOY3d2EhFThAE4HTVsWBqBIAKTMKNeuGD4AAkY" + "N5+CfNGSjMDMBDokgVqRY0QMhgEBACH5BAUAAOAALAEAAQAOAA4AAAiZAMEJHOEDCDILOJKAEMhQ" + "xpkyFvY08dLBkAmGfPqo+nPFxQAtlBp1oAGOhzI1KRgy/NOG1wtAk6apVGnlGDQ3QDjMZJgh0RJM" + "M2LsFJjgSRsNNhQMBQegaaofUJYGOOAATwkZSxdEOECBExYUOxFUUBAAnBBQQSQkKNAAgwAiAxYw" + "JCHDg4wcEgyQYIJgJoQRKrJwKOJCrsCAACH5BAUAAOAALAEAAQAOAA4AAAiZAMEJhOFBg5UjtExA" + "Ecgwy48TN8aoQrNETQaGDwrNMKECQoUufsx8YwEuwZYafBgyxHLqkAEdYDyoVDmjQ50MSUbMZChC" + "mCkTWBDsFEghFitCJiIMBUfg0aA8LKQszfAqkxAPKJYeiRPlw6gWPHZOsOXlATgieLLwwOAgQIMC" + "DQIsY0ghDIgLPBIYUbAgwEwEAqSQoYChL8OAACH5BAUAAOAALAEAAQAOAA4AAAiZAMEJFMDGFSMN" + "SPTAEMjwwopAJX7YmAGkxhCGRVJcykNCgQIQlzRZuQPuQ4sUBhgyzIAKCAkqdl6oVFkCTSgOLQjM" + "ZJhjySY2XQrsFOjCTBkOEhoMBTegiQUqIDAs1ZKmz4ALOoduGqRrARkYMXYKggMLBLgQCQSEODAB" + "wAprtd74YMjgA4YIBwA8SeStx0wHBQrktVBIBcOAACH5BAUAAOAALAEAAQAOAA4AAAibAMEJjEFF" + "R6kVIh5QEMiQwIMWdjIE6RHIBwqGLl7gEUKAQQQl2MCAeQCOAQkURBgyzGGjBBkjF1KqZEiIkggC" + "GxTMZIjixJ8EUhzsFPgBx4kBAgIMBQeBzo0YEBos7XJo24IQBZb6MRQqQIECE3Zu2aMGCrgAAQBw" + "m5KAAKBm1KpkYAggDTNpkJz4ItaJxcwHhWZx6UCqhAGGAQEAIfkEBQAA4AAsAQABAA4ADgAACJkA" + "wQksYAQGMA4GlGAQyBABgQ0XQEjo0uKKEoYLBjBxoeBAgwEGPEgiAc5BDCMIGDIUEuTLgAYhIqhU" + "eQWLhAYMHMxkWCQJCwcHAOwUGEJDCQBIh4JTYEPDoicplIpBhARTHBxKRZ0RoSIYpB87UxwZxgOc" + "qEZtdtkRMGBItl99+DCkUSXaoDRNzCzpJWOmmBJjzFg4QWMEw4AAIfkEBQAA4AAsAQABAA4ADgAA" + "CJkAwQmc0AABhAEDICwQyHCCAwYhIAiQsmFDBYZIAAQ44GBCgAgUwhgQAO6Bl2cAGDIkIIGDgiiV" + "jqhUOWLIhjJypsxkSEFLljdrEuwUuOALoA5OCAwFFyHIClJwSi3d8EkEIy7FlupxIwFEpkiBdg7Z" + "0UMpIUW5atwyAuGBCUc7XjBcUa2KoUN0cJwQxGamEBqIxtzY4cETw4AAOw=="; image['SETTINGS'] = "data:image/png;base64," + "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8%2F9hAAAABGdBTUEAAK%2FINwWK6QAAABl0" + "RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAH0SURBVDjLlZPLbxJRGMX5X%2FxbjB" + "pjjCtXLl2L0YWkaZrhNQwdIA4FZxygC22wltYYSltG1HGGl8nopCMPX9AUKQjacdW4GNPTOywak7" + "ZAF%2FeRe%2FM73%2FnOzXUAcEwaqVTKmUgkGqIoWoIgWP%2FfTYSTyaSTgAfdbhemaSIej%2BNc" + "AgRudDod9Pt95PN5RKPR8wnwPG%2FZ1XVdB8dxin0WDofBsiyCwaA1UYBY%2FtdqtVAqlRCJRN6F" + "QiE1k8mg2WyCpunxArFY7DKxfFir1VCtVlEoFCBJEhRFQbFYhM%2Fna5wKzq%2F%2B4ALprzqxbF" + "UqFWiaBnstl8tQVRWyLMPr9R643W7nCZhZ3uUS%2BT74jR7Y5c8wDAO5XA4MwxzalklVy%2BPxNC" + "iKcp4IkbbhzR4K%2Bh9IH02wax3MiAYCgcBfv99%2F4TS3xxtfepcTCPyKgGl5gCevfyJb%2FQ3q" + "6Q5uMcb7s3IaTZ6lHY5f70H6YGLp7QDx9T0kSRtr5V9wLbZxw1N%2FfqbAHIEXsj1saQR%2BM8BC" + "dg8icbJaHOJBqo3r1KfMuJdyuBZb2NT2R5a5l108JuFl1CHuJ9q4NjceHgncefSN9LoPcYskT9pY" + "IfA9Al%2BZ3X4xzUdz3H74RbODWlGGeCYPcVf4jksz08HHId6k63USFK7ObuOia3rYHkdyavlR%2" + "B267GwAAAABJRU5ErkJggg%3D%3D"; image['DELTEMPLIST'] = "data:image/png;base64," + "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8%2F9hAAAABGdBTUEAAK%2FINwWK6QAAABl0" + "RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAK9SURBVBgZBcFLiFVlAADg7%2F%2FP" + "uXdmGp3xMeIokk1USG8jKmlRYJJU1K6NRILQopXVImoVFBGBpLteu2gVLYyiUALFRSVk0aKC0nyE" + "5uA43pm598495%2Fzn7%2FtCzhns%2F%2FLSQzh867rxXYO6NahbddsaNm0Py7iGhEUs4DMcKwHa" + "pnn4vtk1u157bBMA6Fft9KBqpxdX07aqZnmUnL%2B24tuz%2FT04WAK0TbN5qhvApRtJJwRloCgZ" + "60Q3j0VFjDoFO7dN2Do9ueGT05cPRYBU11OTJU3LchX0am6M6K3SW2VhyPxKAm98ftGuuUl3z3Q2" + "lQCprjes7Ub9Ef3VJMagRFEQCwpBEWgR0pIfzy06c7F3uQRIVbV5eqLQGzYGoyzGrIjEFBSRQlYU" + "yIWrSyNHjv%2B9hP0lQFNV2zdPdfRWswYyRQpiRqKQlTlqM6mTNFUzd%2FSVR69HgFSNts9Oj%2B" + "lXWYgUIYiICICQyZlmNJKqUYIS9r793URZxO5YJ6pSEmVkGUkAATFSp2SlP2iwBCU0o2rT5OS4GG" + "ghEwJRkDMh4ORHhic%2F9MO%2Ff3lpfF1YU11%2Fnea9ElI1uqmc7CojRQxSG8hZixBw4mNTf37h" + "jucPGJu7y%2FC3Y8Xvp46%2Fc%2FyJTr%2F4%2FsbtM21Kh3Y%2FuOPOua0zfjnfSG2WBUXMioLR" + "py%2B6%2F9kXTJw9IZz6QGd4XnfDlnjl3IUdZaqq3Xj65z%2F%2BsTgsrYyyOmWjOqiaVpNaB65e" + "MD47x1OvAijf2qJowy1lqusHnnv83ok39z0CAFKmTlnVcOanrQa%2FfmPyq5eNhv8ZYHmpkAqXi9" + "l79t62fnrymYXl2sX5vvmlVUuDWt1kRYy6naAbWv%2BcOip2grro6y1k567ElBrvh537Ds%2FgIL" + "ZjIzZiPdZjerzb6YyPd%2BxJp%2B248rW1%2FQVVGeeL3Bx58ljz7v%2FpCEpK8wRGcAAAAABJRU" + "5ErkJggg%3D%3D"; } function loadStyle() { FM_log(3,"loadStyle() called"); var styleText = "tr.inactive{font-style:italic; color:gray;}"; styleText += "div.isfarm{background-image:url("+farmImage+") !important}"; //defining style new, so it won't conflict with TBeyond styleText += "table.FMtbg {width: 90%; margin:auto;}"; styleText += "table.FMtbg td {border: 1px solid silver; font-size:13px; padding: 1px; text-align:center;}"; styleText += ".FMtbg {background-color: #C0C0C0; width:100%; text-align:center;}"; styleText += "table.FMtbg tr {background-color: #FFFFFF;}"; styleText += "table.FMtbg tr.cbg1 td, td.cbg1 {background-color:#F5F5F5;}"; styleText += "table.FMtbg td.cbg2 {background-color:#71D000;}"; styleText += "p#FMtitle {width: 90%; margin: 10px auto;}"; GM_addStyle(styleText); } /*define unit properties > needed to analyse battle reports * [0], [1] , [2] , [3] , [4] , [5] , [6] , [7] , [8] , [9] * att, def1, def2, lumber, clay, iron, crop, food, speed, load */ romans=new Array(); romans[0] = new Array(40,35,50,120,100,180,40,1,6,40); // Legionnaire romans[1] = new Array(30,65,35,100,130,160,70,1,5,20); // Praetorian romans[2] = new Array(70,40,25,150,160,210,80,1,7,50); // Imperian romans[3] = new Array(0,20,10,140,160,20,40,2,16,0); // Equites Legati romans[4] = new Array(120,65,50,550,440,320,100,3,14,100); // Equites Imperatoris romans[5] = new Array(180,80,105,550,640,800,180,4,10,70); // Equites Caesaris romans[6] = new Array(60,30,75,900,360,500,70,3,4,0); // Battering Ram romans[7] = new Array(75,60,10,950,1350,600,90,6,3,0); // Fire catapult romans[8] = new Array(50,40,30,30750,27200,45000,37500,4,4,0); // Senator romans[9] = new Array(0,80,80,5800,5300,7200,5500,1,5,1600); // Settler romans[10] = new Array(0,0,0,0,0,0,0,6,0,0); // Hero romans[11] = new Array(1,1,1,0,0,0,1,1,1,1,0) romans[12] = new Array(0,0,0,1,1,1,0,0,0,0,0) teutons=new Array(); teutons[0] = new Array(40,20,5,95,75,40,40,1,7,60); // Clubswinger teutons[1] = new Array(10,35,60,145,70,85,40,1,7,40); // Spearfighter teutons[2] = new Array(60,30,30,130,120,170,70,1,6,50); // Axefighter teutons[3] = new Array(0,10,5,160,100,50,50,1,9,0); // Scout teutons[4] = new Array(55,100,40,370,270,290,75,2,10,110); // Paladin teutons[5] = new Array(150,50,75,450,515,480,80,3,9,80); // Teuton Knight teutons[6] = new Array(65,30,80,1000,300,350,70,3,4,0); // Ram teutons[7] = new Array(50,60,10,900,1200,600,60,6,3,0); // Catapult teutons[8] = new Array(40,60,40,35500,26600,25000,27200,4,4,0); // Chief teutons[9] = new Array(10,80,80,7200,5500,5800,6500,1,5,1600); // Settler teutons[10] = new Array(0,0,0,0,0,0,0,6,0,0); // Hero teutons[11] = new Array(1,1,1,0,0,0,1,1,1,1,0) teutons[12] = new Array(0,0,0,1,1,1,0,0,0,0,0) gauls = new Array(10); gauls[0] = new Array(15,40,50,100,130,55,30,1,7,30); // Phalange gauls[1] = new Array(65,35,20,140,150,185,60,1,6,45); // Swordfighter gauls[2] = new Array(0,20,10,170,150,20,40,2,17,0); // Pathfinder gauls[3] = new Array(90,25,40,350,450,230,60,2,19,75); // Theutates Thunder gauls[4] = new Array(45,115,55,360,330,280,120,2,16,35); // Druidrider gauls[5] = new Array(140,50,165,500,620,675,170,3,13,65); // Haeduan gauls[6] = new Array(50,30,105,950,555,330,75,3,4,0); // Ram gauls[7] = new Array(70,45,10,960,1450,630,90,6,3,0); // Trebuchet gauls[8] = new Array(40,50,50,30750,45400,31000,37500,4,5,0); // Chieftain gauls[9] = new Array(0,80,80,5500,7000,5300,4900,1,5,1600); // Settler gauls[10] = new Array(0,0,0,0,0,0,0,6,0,0); // Hero gauls[11] = new Array(1,1,1,0,0,0,1,1,1,1,0) gauls[12] = new Array(0,0,1,1,1,1,0,0,0,0,0) nature = new Array(10) nature[0] = new Array(10,25,10,0,0,0,0,1,20,0); // Rat nature[1] = new Array(20,35,40,0,0,0,0,1,20,0); // Spider nature[2] = new Array(60,40,60,0,0,0,0,1,20,0); // Serpent nature[3] = new Array(80,66,50,0,0,0,0,1,20,0); // Bat nature[4] = new Array(50,70,33,0,0,0,0,2,20,0); // Wild boar nature[5] = new Array(100,80,70,0,0,0,0,2,20,0); // Wolf nature[6] = new Array(250,140,200,0,0,0,0,3,20,0); // Bear nature[7] = new Array(450,380,240,0,0,0,0,3,20,0); // Crocodile nature[8] = new Array(200,170,250,0,0,0,0,3,20,0); // Tiger nature[9] = new Array(600,440,520,0,0,0,0,5,20,0); // Elephant // let's get rollin' if (document.body) { //suffixGlobal = server + '_' + getPlayerId(); FM_log(3,"suffixGlobal="+suffixGlobal); if (GM_getValue("Active_" + suffixGlobal, -1) > -1 && GM_getValue("ReadRep_" + suffixGlobal, 0)==1) { FM_log(3,"going to check reports"); checkreports(); } //checkreports(); var url1 = document.location.href; if (url1.indexOf("a2b.php") > -1){ if (document.getElementById('troops') != null){ var xf = "<td class=\"column-last\"><img class=\"unit uhero\" src=\"img/x.gif\" title=\"Hero\" alt=\"Hero\" /> <input type=\"text\" class= \"text disabled\" name=\"t11\" value=\"\" maxlength=\"6\" /><span class=\"none\"> (0)</span></td>"; var tb1 = document.getElementById('troops') if (tb1.rows[2].cells[3].innerHTML == ""){ tb1.rows[2].cells[3].innerHTML = xf; } } } main(); }