Travian Market Overflow/Depletion w incoming amounts

By firebird Last update Jun 20, 2009 — Installed 5,041 times.

There are 14 previous versions of this script.

// ==UserScript==

// @name           Travian Market Overflow/Depletion w incoming amounts

// @namespace      market_overflow_depletion

// @description    Travian Market Overflow/Depletion timers and incoming amount for resources/crop considering arriving merchants

// @version        1.0.3

// @author         benuix

// @include        http://s*.travian*.*/build.php*

// @include        http://s*.travian*.*/dorf1.php*

// @include        http://s*.travian*.*/dorf2.php*

// @exclude        http://s*.travian*.*/build.php*t=*

// ==/UserScript==

// Included page: marketplace - send recources



var lang=new Array();

lang['gr']="Δικοί μου έμποροι στον δρόμο";

lang['com']="Own merchants underway";

lang['dk']= "Dine handelsmænd er på vej";





function getElementsByClass(searchClass,node,tag) {

	var classElements = new Array();

	if ( node == null )

		node = document;

	if ( tag == null )

		tag = '*';

	var els = node.getElementsByTagName(tag);

	var elsLen = els.length;

	var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");

	for (i = 0, j = 0; i < elsLen; i++) {

		if ( els[i].className==searchClass ) {

			classElements[j] = els[i];

			j++;

		}

	}

	return classElements;

}




function isIframe(){
	return (self != top);

}

function isDorfPage() {
	var ind=location.href.lastIndexOf("/");
	var path=location.href.substring(ind+1);
	return ((path.indexOf("dorf1.php")+1) || (path.indexOf("dorf2.php")+1));
}



function isMarketSendResourcesPage() {

		var boolMLink1 = false;

		var boolMLink2 = false;

		var boolMarketResources = false;

		var forms=document.getElementsByTagName("form");	

		for(i=0;i<forms.length;i++)

		if (forms[i].name=='snd' && forms[i].action.indexOf('build.php')!=-1) {



			var mLinks = document.getElementsByTagName("a");

			for (xi = 0; xi < mLinks.length; xi++) {

				if (mLinks[xi].href.indexOf("&t=1") != -1) boolMLink1 = true;

				if (mLinks[xi].href.indexOf("&t=2") != -1) boolMLink2 = true;

			}

			var inputs=document.getElementsByTagName("input");

			var sn=0;

			for(j=0;j<inputs.length;j++)

				if(inputs[j].type=="text")sn++;

			if (boolMLink1 && boolMLink2 && sn > 6) boolMarketResources = true;

		}

		return boolMarketResources;

	}



function finddepletiontime(res,incomingLinks){

	var croptd=document.getElementById('l'+res);

	var croparr=croptd.innerHTML.split("/");

	var crop=croparr[0];

	var maxcropstorage=croparr[1];

	var cropproduction=croptd.title/3600;



	var sum=crop;

	var mul=1;

	var ret="<td ><font color='red'>";

	if(cropproduction<0){

		cropproduction*=-1;

		if(crop<=0){t--;return ret+"00:00:00</font></td>";}

	}else{ 

		sum=maxcropstorage-crop;

		mul=-1;

		ret="<td ><font color='black'>";

		if(sum<=0){t--;return ret+"00:00:00</font></td>";}

	}



	var savedtime=0;

	var remaining=0;



	for(i=0;i<incomingLinks.length;i++){

		remaining=sum/cropproduction;



		var timerhtml=document.getElementById("timer"+(i+1)).innerHTML;

		var timerarr=timerhtml.split(":");



		var incomingtime=Number(timerarr[0])*3600+Number(timerarr[1])*60+Number(timerarr[2])-savedtime;

		var income_html=incomingLinks[i].innerHTML;

		var income_array=income_html.split("|");

			var income=income_array[4-res];

			var ind=income.lastIndexOf(">");

			var num=Number(income.substring(ind+1));



				if(remaining>=incomingtime){

					sum-=cropproduction*incomingtime;

					sum+=mul*num;

					if(mul==1){
						if(sum>maxcropstorage)sum=maxcropstorage;
					}else{
						if(sum<0)sum=0;

					}

					savedtime+=incomingtime;

				}else break;

	}

	remaining=savedtime+sum/cropproduction;



	var h=Math.floor(remaining/3600);

	var m=Math.floor((remaining-h*3600)/60);

	var s=Math.floor(remaining-h*3600-m*60);



	ret+="<span id='timer"+t+"'>"+h+":"+m+":"+s+"</span></font></td>";

	return ret;

}







function incomingMerchants(incomingLinks){

	var ret="<tr>";

	var res=new Array();

	for(j=0;j<4;j++){

		res[j]=0;

	}

	for(i=0;i<incomingLinks.length;i++){

		var income_html=incomingLinks[i].innerHTML;

		var income_array=income_html.split("|");

		for(j=0;j<4;j++){

			var income=income_array[j];

			var ind=income.lastIndexOf(">");

			var num=Number(income.substring(ind+1));

			res[j]+=num;

		}

	}

        var flag=true;

	for(j=0;j<4;j++){

		ret+="<td>"+res[j]+"</td>";

                if(res[j]!=0)flag=false;

	}

        if(flag) return "";

	ret+="</tr>";

	return ret;

}





var t=1;

function createTable(){

	var htmlbody=document.body.cloneNode(true);

	 var sLang = location.hostname.substring(location.hostname.lastIndexOf('.') + 1);



	var ind=htmlbody.innerHTML.indexOf(lang[sLang]+":</p>");

	var newhtmlbody=htmlbody;

	if(ind!=-1){

		newhtmlbody.innerHTML=htmlbody.innerHTML.substring(0,ind)+"</p>";

	}



	var incomingLinks = getElementsByClass("f10",newhtmlbody,"span");


	
	if(isIframe())	while(parent.document.getElementById("timer"+t)){t++;}
	else	while(document.getElementById("timer"+t)){t++;}



	var wood=finddepletiontime(4,incomingLinks);
t++;
	var clay=finddepletiontime(3,incomingLinks);
t++;
	var iron=finddepletiontime(2,incomingLinks);
t++;
	var crop=finddepletiontime(1,incomingLinks);

	


	if(isIframe()  && self.name=="marketFrame"){
		var res=parent.document.getElementById("res");
		var restable=res.getElementsByTagName("TBODY")[0];

		var row=restable.insertRow(1);
		row.align='center';
		var rowtd=document.createElement("TD");
		rowtd.innerHTML="&nbsp";
		row.appendChild(rowtd);
		var rowtd1=document.createElement("TD");
		rowtd1.innerHTML=wood;
		row.appendChild(rowtd1);
		var rowtd=document.createElement("TD");
		rowtd.innerHTML="&nbsp";
		row.appendChild(rowtd);
		var rowtd2=document.createElement("TD");
		rowtd2.innerHTML=clay;
		row.appendChild(rowtd2);
		var rowtd=document.createElement("TD");
		rowtd.innerHTML="&nbsp";
		row.appendChild(rowtd);
		var rowtd3=document.createElement("TD");
		rowtd3.innerHTML=iron;
		row.appendChild(rowtd3);
		var rowtd=document.createElement("TD");
		rowtd.innerHTML="&nbsp";
		row.appendChild(rowtd);
		var rowtd4=document.createElement("TD");
		rowtd4.innerHTML=crop;
		row.appendChild(rowtd4);
		removeFrame();
	}else{
		var incoming=incomingMerchants(incomingLinks);



		var tablehtml="<table  style='background-color:#F5F5F5;border:1px solid silver;'><tr>"+

		"<td '><img class=\"r1\" src=\"img/x.gif\" alt=\"Ξύλο\" title=\"Ξύλο\"></td>"+

		"<td ><img class=\"r2\" src=\"img/x.gif\" alt=\"Πηλός\" title=\"Πηλός\"></td>"+

		"<td ><img class=\"r3\" src=\"img/x.gif\" alt=\"Σίδερο\" title=\"Σίδερο\"></td>"+

		"<td ><img class=\"r4\" src=\"img/x.gif\" alt=\"Σιτάρι\" title=\"Σιτάρι\"></td>"+

		"</tr><tr>"+wood+clay+iron+crop+"</tr>"+incoming+"</table>";

		var ps=document.getElementById("btn_ok").parentNode.nextSibling.nextSibling.nextSibling;



		var table=document.createElement("table");

		table.innerHTML=tablehtml;

		ps.parentNode.insertBefore(table,ps);

	}

}


function removeFrame(){
     var mf=parent.document.getElementById('marketFrame');  
     var mfp=mf.parentNode;   
     mfp.removeChild(mf);
}



if(isMarketSendResourcesPage()) createTable();
else if(isDorfPage()){
var content=document.getElementById("content");
content.innerHTML=content.innerHTML+"<iframe name='marketFrame' id='marketFrame' src='build.php?gid=17' width=301 height=52 style='visibility:hidden;'></iframe>";
}