Virtonomica:Labs Info

Дополнительная информация по лаборатории

// ==UserScript==
// @name           Virtonomica:Labs Info
// @namespace      Virtonomica
// @version        1.21
// @description    Дополнительная информация по лаборатории
// @include        http://*virtonomic*.*/*/main/unit/view/*/investigation
// @include        http://*virtonomic*.*/*/main/corporation/villas
// ==/UserScript==
var run = function() {
	//---------------------------------------------------------------------
	// работа с локальным хранилищем
	//---------------------------------------------------------------------
	/**
	* записать данные в локальнео хранилище, с проверкой ошибок
	*/
	function ToStorage(name,  val)
	{
	    try {
	       window.localStorage.setItem( name,  JSON.stringify( val ) );
	    } catch(e) {
	       out = "Ошибка добавления в локальное хранилище";
	       //console.log(out);
	    }
	}

	function getFromStorage(obj, id_shop)
	{
	    if (obj[id_shop] == null) return '';
	    return JSON.stringify(obj[id_shop]);
	}
	//---------------------------------------------------------------------
	// end of работа с локальным хранилищем
	//---------------------------------------------------------------------

	function TrimStr(s) {
		s = s.replace( /^\s+/g, '');
		return s.replace( /\s+$/g, '');
	}

	function getDays( days ){
		d = days%10;

		switch( d ){
			case 1: return (days + " день"); 
			case 2: 
			case 3: 
			case 4: 
				return (days + " дня"); 
			default : return (days + " дней"); 
		}
		
	}
	//alert("start");

	function getLabsInfo() {
		var info = $("<div id=labs_info></div>");
		$("table.infoblock").before( info );

		//  Все остальные страницы
		science_villa = JSON.parse( window.localStorage.getItem('science_villa') );
		if ( science_villa == null ) {
			science_villa = new Object();
			$("#labs_info").html("Не удалось получить список научных вилл из локального хранилища").css('color', 'red');
		} else{
			//$("#labs_info").html( JSON.stringify( science_villa ) );
		}

		// Число ученых
		var works = $("td:contains('Учёных на проекте')").next().text().replace(" ","").replace(" ","");
		// Сколько ученых надо
		var el_req = $("td:contains('требуется учёных')");
		var str = el_req.text();
		var pos = str.indexOf( ":" );
		var req = parseInt( str.substr(pos+1).replace(" ","").replace(" ","") );
		var power = works/req;

		el_req.append( " <font color=green>" + (Math.ceil(works/req*1000)/10) + "%</font>" );

		// Число недель для текущей стадии
		var weeks = $("td:contains('Текущая стадия длится')").next().text();
		if (weeks > 0) {
			// Элемент для вывода информации
			var el = $("td.progress_bar:eq(1)").next();
			// Текущий процент
			var procents = parseFloat( el.text() );
	
			var up = procents/weeks;
			var last = Math.ceil( (100 -  procents)/up);

			el.parent().parent()
			.append("<tr><td colspan=2>средний прирост: " + (Math.ceil( 1000*up )/1000) + "%")
			.append("<tr><td colspan=2>прогнозируется заверешние работ через <font color=green>" + getDays(last) + "</font>");
		}

		// поиск гипотез
		form = $("form[action*='investigation']");
		console.log("form.length = " + form.length);
		//if (form.length != 2 ) return;
	
		tr = $("tr[onclick^='hypotesisSelect']", form.eq(0) );
		console.log("tr.length = " + tr.length);

		// ищем регион
		div = $("div.officePlace");
		region = $("a", div).eq(2);
		console.log("reg = " + region.text() );

		kv = 1.0;
		if ( typeof( science_villa[ region.text() ] ) != "undefined" ){
			kv = science_villa[ region.text() ];
			$("#labs_info").html( "Эффект виллы: " + kv ).css('color', 'magenta');
		}

		// считаем ускорение
		//1,4286*(1-0,3/B9)
		k = kv*1.4286*(1 - 0.3/power);

		for (i=0; i<tr.length; i++){
			td = $("td", tr.eq(i) );
			pr = parseFloat(td.eq(2).text().replace("%", "").replace(" ", "").replace(" ", "") );
			days = parseFloat(td.eq(3).text().replace(" ", "").replace(" ", "") );

			console.log(pr + " = " +days + " == "  + k);
			td.eq(3).append( " <span title='" + (Math.ceil(days/k*10)/10)+"'><font color=maroon>(" + (Math.ceil(days/k)/1) + ")</font></span>");
	        }
		//console.log(form.eq(1).html());
	}

	function getVillaInfo(){
		console.log('parsing....');
		var info = $("<div id=labs_info></div>");
		var  labs_parsing = $("<li><div id=parsing style='float:left;cursor:pointer; color: white;'> <img title='Запомнить научные виллы' alt='Запомнить научные виллы' src='http://www.iconsearch.ru/uploads/icons/snowish/32x32/document-save-as.png'> </div>");

		var container = $('#topblock').next();
		container = $("li:last", container).prev().parent();
		container.append( labs_parsing ) ;

		$("table.unit-list").before( info );

		$("#parsing").click( function() {
			list = $("img[src*='181155111025.gif'], img[src*='182031111025.gif'], img[src*='140822111026.gif']");
			// 181155111025.gif = 1%
			// 182031111025.gif = 3%
			// 140822111026.gif = 9%

			science_villa = new Object();

			reg = 0;
			console.log('list = ' + list.length);
			for (i=0; i<list.length; i++){
				img = list.eq(i);
				src = img.attr('src');
				k = 1;
				if ( src.indexOf('181155111025.gif') > 0 ) k = 1.01;
				if ( src.indexOf('182031111025.gif') > 0 ) k = 1.03;
				if ( src.indexOf('140822111026.gif') > 0 ) k = 1.09;

				tr = img.parent().parent();
				td = $("td", tr).eq(0);
				region = $("i", td);

				console.log(k + " = " + region.text() + " = " + reg + " = " + science_villa[ region.text() ]);
				if ( typeof( science_villa[ region.text() ] ) != "undefined" ){
					if (science_villa[ region.text() ] >= k ) continue;
				}
				science_villa[ region.text() ]  = k;
				reg++;
			
			}
			ToStorage('science_villa', science_villa );
			$("#labs_info").html("Запомнили научные виллы: " + list.length + ", регионов: " + reg).css('color', 'green');
			console.log('.....end');
		});

	}

	// Проверим ссылку что это игровое поле
	var href = location.href;
	console.log( href );
	if (href.indexOf('villas') > 0) {
		getVillaInfo();
	} else {
		getLabsInfo();
	}
	console.log('finish');

}

if(window.top == window) {
    var script = document.createElement("script");
    script.textContent = '(' + run.toString() + ')();';
    document.documentElement.appendChild(script);
}