kvala_personal

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

Bu betiği kurabilmeniz için Tampermonkey, Greasemonkey ya da Violentmonkey gibi bir kullanıcı betiği eklentisini kurmanız gerekmektedir.

Bu betiği yüklemek için Tampermonkey gibi bir uzantı yüklemeniz gerekir.

Bu betiği kurabilmeniz için Tampermonkey ya da Violentmonkey gibi bir kullanıcı betiği eklentisini kurmanız gerekmektedir.

Bu betiği kurabilmeniz için Tampermonkey ya da Userscripts gibi bir kullanıcı betiği eklentisini kurmanız gerekmektedir.

Bu betiği indirebilmeniz için ayrıca Tampermonkey gibi bir eklenti kurmanız gerekmektedir.

Bu komut dosyasını yüklemek için bir kullanıcı komut dosyası yöneticisi uzantısı yüklemeniz gerekecek.

(Zaten bir kullanıcı komut dosyası yöneticim var, kurmama izin verin!)

Bu stili yüklemek için Stylus gibi bir uzantı yüklemeniz gerekir.

Bu stili yüklemek için Stylus gibi bir uzantı kurmanız gerekir.

Bu stili yükleyebilmek için Stylus gibi bir uzantı yüklemeniz gerekir.

Bu stili yüklemek için bir kullanıcı stili yöneticisi uzantısı yüklemeniz gerekir.

Bu stili yüklemek için bir kullanıcı stili yöneticisi uzantısı kurmanız gerekir.

Bu stili yükleyebilmek için bir kullanıcı stili yöneticisi uzantısı yüklemeniz gerekir.

(Zateb bir user-style yöneticim var, yükleyeyim!)

// ==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);
}