Raw Source
Runy69 / eR Fix+

// ==UserScript==
// @name			eR Fix+
// @version			0.2.5
// @author			Runy69
// @include			*www.erepublik.com/*
// @require			http://www.erepublik.com/js/jquery.tipsy.js?1412241140
// @updateURL		https://googledrive.com/host/0B8c6DgXq6gcGMVBBUTdqbVlrWGc/eRFix.meta.js
// @downloadURL		https://googledrive.com/host/0B8c6DgXq6gcGMVBBUTdqbVlrWGc/eRFix.user.js
// ==/UserScript==

J = jQuery;
J('head').append('<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css">');
var url = location.toString();
//CALC DAMAGE
function getRank() {
    var aRank = J(".citizen_military_box_wide img").attr("src").split("/")[6].split(".")[0].split("_");
    return +aRank.pop() + [{
        'recruit': 1,
        'private': 2,
        'corporal': 6,
        'sergeant': 10,
        'lieutenant': 14,
        'captain': 18,
        'major': 22,
        'commander': 26,
        'lt_colonel': 30,
        'colonel': 34,
        'general': 38,
        'field_marshal': 42,
        'supreme_marshal': 46,
        'national_force': 50,
        'world_class_force': 54,
        'legendary_force': 58,
        'god_of_war': 62,
        'titan': 66,
        'legendary': 70
    }][0][aRank.join("_")];
}

function getInfluence(strength, wep) {
	var rank = getRank();

	var influence = 10*(1+strength/400)*(1+rank/5)*(1+wep/100);
	return parseInt(influence);
}

//EXPORT LEADERBOARDS
exportJsonToCSV = function(cabeceras,myObj,filename) {
    var csv = "";
    J.each(myObj,function(indice,valor) {
            csv += "\n";
            J.each(valor,function(k,v){
                if(k == "id" || k == "name" || k == "values" || k == "myDivision") {
                    csv += v + ";";
                }
            });
    });
    csv = cabeceras + csv;
    csvData = 'data:application/csv;charset=utf-8,' + encodeURIComponent(csv);
    J('<a></a>')
    .attr('id','downloadFile')
    .attr('href', csvData)
    .attr('download',filename)
    .appendTo('body');

    J('#downloadFile').ready(function() {
        J('#downloadFile').get(0).click();
        J('#downloadFile').remove();
    });
};

function lbToCsv(filename, mode, country, week, mu, div){
    var url = "https://www.erepublik.com/es/main/leaderboards-"+mode+"-rankings/"+(mode.match(/co/i) ? week : country+"/"+week+"/"+mu+"/"+div);
    J.ajax({
        dataType: "json",
        url: url,
        data: "",
        success: function(data) {
            var arrData = (typeof data.top != 'object' ? JSON.parse(data.top) : data.top);
            var titulos = 'ID;Nick;Damage;Div';
            exportJsonToCSV(titulos,arrData,filename);
        }
    });
}

//LINK IN WALL POST
function start() {
	var aCUrl = J(location).attr('pathname').split('/');
	if(aCUrl.length > 2) {
		return;
	}
	scan();
	observeNewComments();
}

function observeNewComments() {
	var target = document.querySelector('#wall_master');
	var observer = new MutationObserver(function(mutations) {
			scan();
		});
	var config = { childList: true, subtree: true };
	observer.observe(target, config);
}

function scan() {
	var aCUrl = J(location).attr('pathname').split('/');
	var cLang = aCUrl[1];
	var postType = J('#show_friends_feed').hasClass('active') ? 'viewPost='
					: J('#show_regiment_feed').hasClass('active') ? 'unitPost='
					: 'viewPartyPost=';
    J('.wall_post').each(function(index){
        if(!J(this).attr('hasLink') && !J(this).hasClass('mu')) {
            var medal = J('div h6 strong', this).length > 0;
			var id = J(this).attr('id').replace('post_', '');
			J(this).find('.post_actions')
				.append(' <span>·</span> ')
				.append('<a href="https://www.erepublik.com/'+ cLang + '?' + postType + id + '">Link</a>' + (medal ? "" : ' <span>·</span> <a class="reshout" href="javascript:;">Reshout</a>'));
            J(this).attr('hasLink', true);
        }
    });
}

J(document).ready(function(){
    start();
    if(url.match(/profile/)) {
        //CT
        var pXP, paXP, pbXP, pStr, pTI, pHTML, pHTML1, strS, strT, aCUrl, cLang;
        var weapon=[0, 20, 40, 60, 80, 100, 120, 200];
        var uses=[0, 1, 2, 3, 4, 5, 6, 10];
        var influence=[];
        paXP = J('strong.citizen_level').attr('original-title').split('>');
        pbXP = paXP[3].split('/');
        pXP = parseFloat(pbXP[0].trim().replace(/,/g, ''));
        pStr = parseFloat(J('div.citizen_military_box span:eq(1)').text().trim().replace(/,/g, ''));
        pTI = (pXP/pStr).toFixed(4);
		aCUrl = J(location).attr('pathname').split('/');
		cLang = aCUrl[1];
		//Language strings
		//If you want to translate them into your language please send me a message with the translated sentences and which language is it (en, es, etc).
		switch(cLang){
			case 'es'://Spanish
				strS = 'Coeficiente Tanque';
				strT = 'Mientras m&aacute;s bajo mejor';
			break;
			case 'en'://English
				strS = 'Tank Rating';
				strT = 'The lower the better';
			break;
			default:
				strS = 'Tank Rating';
				strT = 'The lower the better';
		}
		pHTML = '\
		<style>\
			#tank_meter {width: 100%; height: 6px; border: solid 1px #e0e0e0; border-radius: 5px; -webkit-border-radius: 5px;}\
			#scale {display: table; width: 100%; padding: 0px 0px 0px 0px; margin: 2px 0px 0px 0px; border: 0px 0px 0px 0px; color: #999; font-weight: bold;}\
			#scale li {width: 10%; display: table-cell; white-space: nowrap; font-size: 8px;}\
		</style>\
		<div class="citizen_military" style="margin: 0 0 3px 0;">\
			<strong>'+strS+'</strong>\
			<h4 style="margin-left:40px">'+pTI+'</h4>\
			<div class="stat">\
				<div style="width: 162px;">\
				<meter id="tank_meter" min=0 low=2 high=4 max=5 optimum=-1 value='+pTI+' title="'+strT+'"></meter>\
					<ul id="scale">\
						<li><span id="scale">0</span></li>\
						<li><span id="scale">1</span></li>\
						<li><span id="scale">2</span></li>\
						<li><span id="scale">3</span></li>\
						<li><span id="scale">4</span></li>\
					</ul>\
				</div>\
			</div>\
		</div>';
		var i=0;
		for(i=0;i<weapon.length;i++){
			influence[i]=getInfluence(pStr,weapon[i]);
		}
		//DAMAGE
		var bar='\
		<div class="bar damage" style="width:98%">\
		<div class="border">\
		</div>\
		<div class="fill">\
				<span id="q0" style="width:9%;" class="mids" original-title=""></span>\
				<span id="q1" style="width:9%; background-color: #60B1DD; background-image: linear-gradient(#91C8E7 0px, #60B1DD 100%); border-bottom-color: #5892C1; border-top-color: #5892C1;" class="mids" original-title=""></span>\
				<span id="q2" style="width:9%;" class="mids" original-title=""></span>\
				<span id="q3" style="width:9%; background-color: #60B1DD; background-image: linear-gradient(#91C8E7 0px, #60B1DD 100%); border-bottom-color: #5892C1; border-top-color: #5892C1;" class="mids" original-title=""></span>\
				<span id="q4" style="width:9%;" class="mids" original-title=""></span>\
				<span id="q5" style="width:9%; background-color: #60B1DD; background-image: linear-gradient(#91C8E7 0px, #60B1DD 100%); border-bottom-color: #5892C1; border-top-color: #5892C1;" class="mids" original-title=""></span>\
				<span id="q6" style="width:9%;" class="mids" original-title=""></span>\
				<span id="q7" style="width:37%; background-color: #60B1DD; background-image: linear-gradient(#91C8E7 0px, #60B1DD 100%); border-bottom-color: #5892C1; border-top-color: #5892C1;" class="mids" original-title=""></span>\
			</div>\
		</div>';
		pHTML1 = '\
		<div class="citizen_military" style="margin-bottom: 15px;">\
			<strong>Influencia</strong>\
			<div class="stat" style="width:70%" style="margin-top:5px">\
				<table width="100%" border="0" class="barholder">\
					<tbody>\
						<tr>\
							<td>'+bar+'\
							</td>\
						</tr>\
					</tbody>\
				</table>\
				<small style="width:95%; margin-left:0px;"><strong style="margin:0; left:0px;">Da�o Base: '+influence[0]+'</strong><strong style="margin:0;">Max-Hit: '+influence[7]+'</strong></small>\
			</div>\
		</div>';
    	J('.citizen_military').css({"margin-bottom":"3px"});
		J('div.citizen_military:eq(0)').after(pHTML);
		J('div.citizen_military:eq(1)').after(pHTML1);
		for(var i=0;i<8;i++){
			var info="<center><h4>"+(i===0 ? "Sin Arma" : "Arma Q" + i)+"</h4><br/>\
				"+(i===0 ? "<div>" : "<img height='60px' width='60px' src='https://www.erepublik.net/images/icons/industry/2/q"+i+"_90x90.png'/><div style='float: right'>" )+"\
				<strong>Influencia:</strong> "+influence[i]+"<br/>\
				<strong>Potencia:</strong> "+(100+weapon[i])+"%<br/>\
				"+(i===0 ? "": ("<strong>Usos</strong>: "+uses[i]+"<br/>"))+"</div></center>";
			J('#q' + i).tipsy({gravity: 's', html: true}).attr("original-title", info);
		}
	} else if(url.match(/mycompanies/i)) {
		J(".c4").css("width","135px");
		J(".c5").css("width","140px");
		J(".current_tickets").css("top","92px");
		J(".current_tickets").css("left","65px");
		J(".current_tickets").css("bottom","auto");
		J(".current_tickets").css("right","auto");
		J(".overtime_tickets_info img").css("margin-top","0px");
	} else if(url.match(/inventory/)){
        if(J('#sell_offers table tfoot').length == 0) J('#sell_offers table').append('<tfoot></tfoot>');
	    var licenses = J('.ml_repeat:first .ml_selector');
	    var HTML = '<tr><td colspan="6"><h1 style="margin-left: 15px;" class="offer_ammount">Impuestos en paises con licencia</h1></td><td style="text-align: right!important; padding-right: 15px!important;"><strong>Importacion</strong><br><strong>IVA</strong></td></tr>';
 	    HTML += '<tr><td colspan="2">Pais</td><td>Comida</td><td>Armas</td><td>Tickets</td><td>Casas</td><td style="padding-left: 45px!important;">Raw</td></tr>';
	    J('#sell_offers table tfoot').append(HTML);
	    for(i=0;i<licenses.length;i++){
	        var id = J(licenses[i]).attr('country');
	        var ctry = erepublik.info.countries[id].permalink;
	        var link = "https://www.erepublik.com/es/country/economy/" + ctry;
    	    var HTML = '<tr>';
    	    HTML += '<td>';
	        HTML += '<img class="offer_image" src="https://static.erepublik.net/images/flags_png/M/'+ctry+'.png">';
	        HTML += '</td>';
	        HTML += '<td>';
	        HTML += '<strong class="offer_amount">'+ctry+'</strong>';
	        HTML += '</td>';
	        HTML += '<td>';
	        HTML += '<strong class="offer_amount" id="fIm-'+ctry+'"></strong><br>';
    	    HTML += '<strong class="offer_amount" id="fVat-'+ctry+'"></strong>';
        	HTML += '</td>';
	        HTML += '<td>';
    	    HTML += '<strong class="offer_amount" id="wIm-'+ctry+'"></strong><br>';
        	HTML += '<strong class="offer_amount" id="wVat-'+ctry+'"></strong>';
	        HTML += '</td>';
    	    HTML += '<td>';
        	HTML += '<strong class="offer_amount" id="tIm-'+ctry+'"></strong><br>';
	        HTML += '<strong class="offer_amount" id="tVat-'+ctry+'"></strong>';
    	    HTML += '</td>';
        	HTML += '<td>';
	        HTML += '<strong class="offer_amount" id="hIm-'+ctry+'"></strong><br>';
    	    HTML += '<strong class="offer_amount" id="hVat-'+ctry+'"></strong>';
        	HTML += '</td>';
	        HTML += '<td style="padding-left: 25px!important;">';
    	    HTML += '<strong class="offer_amount" id="frm-'+ctry+'"></strong>';
        	HTML += '<strong class="offer_amount" id="wrm-'+ctry+'"></strong>';
	        HTML += '<strong class="offer_amount" id="hrm-'+ctry+'"></strong>';
    	    HTML += '</td>';
        	HTML += '</tr>';
	        J('#sell_offers table tfoot').append(HTML);
    	    J.ajax({
        	    url: link,
            	context: document.body,
	            success: function(data) {
    	            var ctrya = data.match(/eRepublik Country Economy \| ([^"]+)/)[1].replace(/ /, "-");
        	        var taxes = data.match(/special">(\d+\.\d+|\d+)/g);
            	    J('#fIm-'+ctrya).empty().append(taxes[4].split(">")[1]+'%');   //Food Import
                	J('#fVat-'+ctrya).empty().append(taxes[5].split(">")[1]+'%');   //Food Vat
	                J('#wIm-'+ctrya).empty().append(taxes[7].split(">")[1]+'%');   //Weapon Import
    	            J('#wVat-'+ctrya).empty().append(taxes[8].split(">")[1]+'%');   //Weapon Vat
        	        J('#tIm-'+ctrya).empty().append(taxes[10].split(">")[1]+'%');  //Ticket Import
            	    J('#tVat-'+ctrya).empty().append(taxes[11].split(">")[1]+'%');  //Ticket Vat
                	J('#hIm-'+ctrya).empty().append(taxes[13].split(">")[1]+'%');  //House Import
	                J('#hVat-'+ctrya).empty().append(taxes[14].split(">")[1]+'%');  //House Vat
    	            J('#frm-'+ctrya).empty().append('W: '+taxes[16].split(">")[1]+'%');  //FRM Import
        	        J('#wrm-'+ctrya).empty().append('  F: '+taxes[18].split(">")[1]+'%'); //WRM Import
            	    J('#hrm-'+ctrya).empty().append('  H: '+taxes[20].split(">")[1]+'%'); //HRM Import
                }
        	});
    	}
    } else if(url.match(/leaderboards-damage/i)){
        J('.selectors_area a').after('<a class="open_settings" id="exportToXls" href="javascript:;" original-title="Export Data to Spreadsheet" style="right: 50px!important; text-align: center;"><i class="fa fa-download" style="font-size: 2em; margin-top: 2px; color: white;"></i></a>');
        J('#exportToXls').on('click', function() {
            var mode = erepublik.leaderboard.getCurrentTab();
            var week = parseInt(J("#leaderboard_week").val(),10);
            var countryId = J("#leaderboard_flag").val();
            var muId = J("#leaderboard_mu").val();
            var div = J("#leaderboard_divisions").val();
            var eday = J('.eday').text().replace(/[^\d]/g, "");
            var daysLeft = J('.timer_days').text().replace(/[^\d]|0/g, "");
            var filename = mode;
            if(mode.match(/co/i)) countryId = 0;
            filename += (muId!=0 ? " - MU "+muId : (countryId == 0? "" : " - Country "+countryId))+(div!=0 ? " - Div "+div : "")+' - '+(eday-(daysLeft-6))+"-"+(parseInt(eday)+parseInt(daysLeft))+'.csv';
            lbToCsv(filename ,mode, countryId, div, muId, week);
        });
    } else if(url.split("/".length<5)){
    	J('.info small').css({"width":"150px"});
        J('.reshout').click(function(){
            J("#shout").click().val(J(this).parent().parent().find('p').text().trim()), J(".post_button").click();
        });
	}
});