kvala_personal

Отображение максимального числа сотрудников, которое держит топ, а также максимальной технологии установленной в подразделении.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, Greasemonkey alebo Violentmonkey.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie, ako napríklad Tampermonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, % alebo Violentmonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey alebo Userscripts.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie, ako napríklad Tampermonkey.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie správcu používateľských skriptov.

(Už mám správcu používateľských skriptov, nechajte ma ho nainštalovať!)

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

(Už mám správcu používateľských štýlov, nechajte ma ho nainštalovať!)

// ==UserScript==
// @name           kvala_personal
// @namespace      virtonomica
// @description    Отображение максимального числа сотрудников, которое держит топ, а также максимальной технологии установленной в подразделении.
// @description    Displays the maximum number of employees, which keeps the top and the maximum technology installed in the unit.
// @version        1.7
// @include        http://*virtonomic*.*/*/main/unit/view/*
// @include        http://igra.aup.ru/*/*/unit/view/*
// ==/UserScript==

var run = function() {

   var win = (typeof(unsafeWindow) != 'undefined' ? unsafeWindow : top.window);
   $ = win.$;

   // определяем интерфейс
   var lang = 'undef';
   var bt_logout = $("li[class='icon menulogout']");
   var logout_string = bt_logout.attr('title');
   if (logout_string == 'Выход') {
	lang = 'Ru';
   } else if(logout_string == 'Logout') {
	lang = 'En';
   } 
   console.log(lang);
   if ( lang == 'undef') {
        alert('Unsupported language for userscript "kvala_personal"');
	return;
   } 

   // Строки зависимые от языка
   // language definitions
   var Seting = new Object();
   Seting['Ru'] = new Object();
   Seting['En'] = new Object();

   // exactly as display in interface
   Seting['Ru']['Qualification of player'] = "Квалификация игрока";
   Seting['En']['Qualification of player'] = "Qualification of player";

   // exactly as display in interface
   Seting['Ru']['Total number of employees'] = "Суммарное количество подчинённых";
   Seting['En']['Total number of employees'] = "Total number of employees";

   // free form
   Seting['Ru']['Limit on qualification'] = "Предельная нагрузка по квале";
   Seting['En']['Limit on qualification'] = "Limit on qualification";

   // free form
   Seting['Ru']['bonus'] = "запас";
   Seting['En']['bonus'] = "bonus";

   // free form
   Seting['Ru']['without bonus'] = "без бонусов";
   Seting['En']['without bonus'] = "without bonus";

   // exactly as display in interface
   Seting['Ru']['Qualification of employees'] = "Уровень квалификации";
   Seting['En']['Qualification of employees'] = "Qualification of employees";

   // exactly as display in interface
   Seting['Ru']['Number of employees'] = "Количество";
   Seting['En']['Number of employees'] = "Number of";

   // free form
   Seting['Ru']['maximum'] = "Максимальное количество работников";
   Seting['En']['maximum'] = "Maximum number of employees";

   // free form
   Seting['Ru']['on Qualification'] = "На квале";
   Seting['En']['on Qualification'] = "on Qualification";

   // free form
   Seting['Ru']['next'] = "следующий уровень";
   Seting['En']['next'] = "next level";

   // exactly as display in interface
   Seting['Ru']['Technology level'] = "Уровень технологии";
   Seting['En']['Technology level'] = "Technology level";

   // free form
   Seting['Ru']['maximum technology'] = "Максимальная технология";
   Seting['En']['maximum technology'] = "Maximum of technology";

   // exactly as display in interface
   Seting['Ru']['Total area'] = "Общая площадь земли";
   Seting['En']['Total area'] = "Total area";

   // exactly as display in interface
   Seting['Ru']['Farm size'] = "Размер фермы";
   Seting['En']['Farm size'] = "Farm size";


function getPersonal( kv, k){
	return parseInt( (9.7*kv*kv + 41.5*kv - 48)* k);
}
function getEmploeeCount(kv, kve)
{
	return Math.floor(14*kv*kv/Math.pow(1.4, kve));
}
function getMaxTech( kv ){
	return Math.floor(10*Math.pow(kv/0.0064, 1/3))/10 ;
}
function numberFormat (number) {
        number += '';
        var parts = number.split('.');
        var int = parts[0];
        var dec = parts.length > 1 ? '.' + parts[1] : '';
        var regexp = /(\d+)(\d{3}(\s|$))/;
        while (regexp.test(int)) {
            int = int.replace(regexp, '$1 $2');
        }
        return int + dec;
}

// Определяем реалм
var realm =   ['vera', 'anna', 'olga', 'lien', 'mary'];
// Учтем особсенности производства по реалмам
var factory = [ 1,        2,        1,        1,       1 ];
var mine    = [ 1,        0.5,      1,        1,       1 ];

// наши бонусы по квалификации
var bonus = [
0, // 0 Добыча
0, // 1 Животноводство
0, // 2 Маркетинг
0, // 3 наука
0, // 4 Производство
0, // 5 Сельское хозяйство
0, // 6 Торговля
0, // 7 Управление
0, // 8 промысловое хозяйство
0, // 9 фитнес
0, // 10 рестораны
0, // 11 медицина 
0   // 12 энергетика
];

var str = "" + window.location;
var my_realm = 'unknown';
var my_relam_index = -1;
for (i=0; i< realm.length; i++){
	rc = str.search("/"+ realm[i] +"/");
	if ( rc == -1 ) continue;
	my_realm = realm[i];
	my_relam_index = i;
	break;
}

var type = 'unknow';

$("td:contains('" + Seting[lang]['Farm size'] +"')").each(function() { 
	type = 'ferma';
});

$("td:contains('" + Seting[lang]['Total area'] +"')").each(function() { 
	type = 'land';
});

// поиск по картинке
function findType()
{
  var head = $("#unitImage");
  var img = $("img", head);
  link = img.attr('src');

  n = link.indexOf('restaurant');
  if (n > 0) return "restaurant";

  n = link.indexOf('service_light');
  if (n > 0) return "fitness";

  n = link.indexOf('medicine');
  if (n > 0) return "medicine";

  n = link.indexOf('fishingbase');
  if (n > 0) return "fish";

  n = link.indexOf('lab');
  if (n > 0) return "science";

  n = link.indexOf('workshop');
  if (n > 0) return "factory";

  n = link.indexOf('shop');
  if (n > 0) return "shop";

  n = link.indexOf('office');
  if (n > 0) return "office";

  n = link.indexOf('mill');
  if (n > 0) return "mill";

  n = link.indexOf('mine');
  if (n > 0) return "mine";

  n = link.indexOf('power');
  if (n > 0) return "power";

  return "unknow";
}

if (type == 'unknow') type = findType();
//alert(type);

var k = 1;
// Квалификация игрока
var kv = 0;
$("td:contains('" + Seting[lang]['Qualification of player'] + "')").next().each(function() { 
	str = this.innerHTML;
	kv = parseInt( str );

	delta = 0;
	switch ( type){
		case 'ferma': k = 1.5; delta = bonus[1]; break; // ++
		case 'fish': k = 2.5;  delta = bonus[8]; break; // ++
		case 'land': k = 4;  delta = bonus[5]; break; // ++
                case 'science': delta = bonus[3];break; // ++
		case 'office': k = 0.2; delta = bonus[7];; break; // ++
		case 'shop': delta = bonus[6];break; // ++
		case 'restaurant': delta = bonus[10];break; // ++
		case 'fitness': k=0.3; delta = bonus[9];break; // ++
                case 'medicine': k = 2.5;  delta = bonus[11]; break; // ++
		case 'mine': {
			k = 20; // ++
                        if ( my_relam_index > -1){
				k = k * mine[ my_relam_index ];
			}
                       delta = bonus[0];
                       break;}
		case 'mill':
		case 'factory':  {
			k = 10; // ++
			if ( my_relam_index > -1){
				k = k * factory[ my_relam_index ];
			}
			delta = bonus[4];
			break;}
		case 'power': {
			k = 7.5; 
			delta = bonus[12]; 
			break;}
		default: return;
	}

	//console.log("kv= "+ kv + ", k = " +k);
	pers = getPersonal(kv, k);
        limit2  = Math.round(pers*1.2);
	var str =  '<span id=all_warrning_1><br>('+Seting[lang]['Limit on qualification']+': <b>' + numberFormat(pers) + '</b>)</span>';
        str+= '<span id=all_warrning_2><br>(20% '+ Seting[lang]['bonus'] +' = ' + numberFormat( limit2 ) + ')</span>';
	if  (delta > 0) {
		pers2 = getPersonal(kv-delta, k);
		str+=', [' + Seting[lang]['without bonus'] +': ' + numberFormat(pers2) + ']';
	}
        work = parseInt( $("td:contains('" + Seting[lang]['Total number of employees'] +"')").next().text().replace(" ", "").replace(" ", "").replace(" ", "").replace(" ", "") );
	
        this.innerHTML = this.innerHTML +str ;

        if (work > pers)  {
            $("#all_warrning_1").css('color', 'purple').css('font-weight', 'bold');
            $("td:contains('"+Seting[lang]['Qualification of player']+"')").css('color', 'purple');
        }
        if (work >= limit2)  {
            $("#all_warrning_2").css('color', 'red').css('font-weight', 'bold');
            $("td:contains('"+Seting[lang]['Qualification of player']+"')").css('color', 'red');
        }
});
var k = 1;
// Квалификация работников
var kvp = 0;
function process_employees( str, num_workers_string){
	//str = this.innerHTML;
	kvp = parseFloat( str );
	//console.log(str);
	//console.log(type);
	delta = 0;
	switch ( type){
		case 'ferma': k = 1.5; delta = bonus[1]; break; // ++
		case 'fish': k = 2.5; delta = bonus[8]; break; // ++
		case 'land': k = 4; delta = bonus[5]; break; // ++
                case 'science': delta = bonus[3];break;  // ++
		case 'office': k = 0.2; delta = bonus[7];; break; // ++
		case 'shop': delta = bonus[6];break; // ++
		case 'restaurant': delta = bonus[10];break; // ++
		case 'fitness': k=0.3; delta = bonus[9];break; // ++
		case 'mine': k=20; delta = bonus[0];break;
                case 'medicine': k = 2.5;  delta = bonus[11]; break; // ++
		case 'mill':
		case 'factory':  {
			k = 10; 
			if ( my_relam_index > -1){
				k = k * factory[ my_relam_index ];
			}
			delta = bonus[4];
			break;}
		case 'power': {
			k = 15; 
			delta = bonus[12]; 
			break;}
		default: return str;
	}

	emp_c = k*getEmploeeCount(kv, kvp);
	emp_count = Math.floor(emp_c);
	emp_c_next = k*getEmploeeCount(kv+1, kvp);
	emp_count_next = Math.floor(emp_c_next);

        work = parseInt( $("td:contains('"+num_workers_string+"')").next().text().replace(" ", "").replace(" ", "").replace(" ", "").replace(" ", "") );
        limit2  = Math.round(emp_count*1.2);
        temp = '<span id=unit_warning_2><br>(20% '+ Seting[lang]['bonus'] +' = ' + numberFormat( limit2 ) + ')</span>';

	str = str + '<span id=unit_warning_1><br>(' + Seting[lang]['maximum'] +': <b>' + numberFormat(emp_count) + '</b></span>)' + temp;
	str = str + '<br>(<font color=gray>' + Seting[lang]['on Qualification']+' '  + numberFormat(kv+1) + ' ('+ Seting[lang]['next'] +'): <b>' + numberFormat(emp_count_next) + '</b></font>)';

	//console.log("work = " +work + " " + emp_count);
        if (work >= emp_count ){
            $("#unit_warning_1").css('color', 'purple').css('font-weight', 'bold');
            $("td:contains('"+Seting[lang]['Qualification of employees']+"')").css('color', 'purple');
        }
        if (work >= limit2 ){
            $("#unit_warning_2").css('color', 'red').css('font-weight', 'bold');
            $("td:contains('"+Seting[lang]['Qualification of employees']+"')").css('color', 'red');
        }

	return str;
}

// работников
var flag = false;
// fix fir english interface
$("td:contains('Workers qualification')").next().each(function() { 
	//console.log("process_employees 1");
	this.innerHTML = process_employees(this.innerHTML, "Number of");
	flag = true;
});
if (flag == false) {
	$("td:contains('"+Seting[lang]['Qualification of employees']+"')").next().each(function() { 
		//console.log("process_employees 0");
		this.innerHTML = process_employees(this.innerHTML, Seting[lang]['Number of employees'] );
	});
}

var techn = 0;
var max_techn = 0;
$("td:contains('" + Seting[lang]['Technology level'] +"')").next().each(function() { 
	str = this.innerHTML;
	techn = parseInt( str );
	max_techn = getMaxTech(kv);
	switch ( type ){
		case 'ferma':  delta = bonus[1]; break;
		case 'land': delta = bonus[5]; break;
                case 'science':  delta = bonus[3];break;
		case 'office':  delta = bonus[7]; break;
		case 'shop': delta = bonus[6];break;
		case 'mine':delta = bonus[0];break;
		case 'mill':
		case 'factory':  
			delta = bonus[4];break;
		default: delta = bonus[4];
	}

	font = 'grey';
	if ( max_techn != techn) {
		font = 'red';
	} 

	str = ' <br>(<font color=' + font +'>' + Seting[lang]['maximum technology'] +': <b>' + numberFormat(max_techn) + '</b></font>)';
	if (delta > 0){
		max_techn2 = getMaxTech(kv-delta);
		str+= 	' [' + numberFormat(max_techn2) + ']';
	}
	this.innerHTML = this.innerHTML + str;
});

}

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