iks:virtonomic kvala_personal_indicator_zarplaty

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

目前為 2017-12-05 提交的版本,檢視 最新版本

// ==UserScript==
// @name           iks:virtonomic kvala_personal_indicator_zarplaty
// @version        1.75
// @namespace      virtonomica
// @description    Отображение максимального числа сотрудников, которое держит топ, а также максимальной технологии установленной в подразделении. Показ процентного соотношения зарплаты от среднегородской.
// @include        http*://*virtonomic*.*/*/main/unit/view/*
// @grant          none
// ==/UserScript==

// Окно калькулятора
var strSetting = "<style>"
					+".calcTop { background-color: white; position:fixed;margin:0; padding:0; display:none; top:10px; width:250px; color: #708090;"
						+" border: 2px solid #b4b4b4; box-shadow: 0 0 0 2px #708090, 0 0 0 4px #b4b4b4; border-radius:11px; -webkit-border-radius:11px; -moz-border-radius:11px; -khtml-border-radius:13px}"
					+" .calcTop > div:nth-child(1) { position:relative; margin:0; padding:0}"
					+" .calcTop td:nth-child(2) { text-align: right; white-space: nowrap; color: blue }"
					+" .calcTop th { background-color:#e1e1e1; text-align:center; border-radius:7px; height:28px }"

					+' .scriptIks_imp { border: 2px solid #708090; border-radius:50%; background:#e1e1e1; text-align:right }'
					+' .scriptIks_cur { cursor: pointer }'
					+" .scriptIks_exit {background: url(data:image/svg+xml;base64,"
						+'iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAABHNCSVQICAgIfAhkiAAABO9JREFUSIm9l2tsFFUUx3+zM9vHtsi05Rk/iB8kiHwAURISwwciRgQMiX5QXgEENUjQGIigVR6C1YhCgEoM'
						+'WPBJJNFEIZLoJ0NItIBKFDWC+Cogj3andGf6mHvv8cPMtrvdXWgiepLNbs793/u759xzz+xY5JiXcocjsh+RKVYqBY7TNyhCvglIsd+RVrq6ojmW9SUwxw28c7mzrRzofOAd+7axVKyrh8oUhCGiFSgN'
						+'SoHWkU/FPh35RSnI0YnWECrUgYPon37OIpa7gdeYB/ZS7jyEd1O7d2LV1sYLxwuZ6DvPFyrE5GwoC+vdUOxTGgkCwvf2Eaek3g28TQCWl3JHgnWusnErluvGUeg40vxoe32hKtToXF+UGZRCjMacPoNu'
						+'PgqJBMBQN/AuO4jstSdOwKqqQoKgNCxOrWTBWX/W1z/6nNRbgweDMVnwAWCyA9xTtnQxkvEjcagQrbCURhuFCUOc0PRFojWiwvwN5kTfY0JsLdhhlGqMQX7/A2w7e7wTAByruhq6e6CnOxLGu/atkJ4R'
						+'dVSNG0/3r2co++qbqGBzNGiNGBN9t7XSM30q1pjRXDrwEc6R49R0aCSTQVpbweqt43Iv5d7kkHQQPwM98ZmECkspuoalGLng0Uh6+yT86kEkPj4YXRURxPOQCxeQP/9Cnz2HeX4VtctWAOBOvZfv7ryF'
						+'6pbL2IZcaNbGOghRmsMwTl2IUYrUuMl5yqrpM7jid2A3fYBuPoZkMmDbiFLI+tXU1q/N0w9ftAxZtQ5I9IcC2AnEQBCA7yOBj/gB+AHmxPcF6hsefAh//OioCG07Or/1a6jpBwUI9jThSFEoAAmMIJkY'
						+'mPER30eCgPLmE2T2vFUwYdhLm+l+cgmW1piGF6hZ/WyB5vzjjzDkx5ac9lRoVvvQG8W5f0Z8N7MXX4E24Ad0jRlF3fbGgomdx5qpvGNSgf/v5Y9R2fRhsXPNtVkOYqJIVQjKxNWqkLSH/uEkzuHDtIqh'
						+'bsfOvJm50DAMSSaTXHx6BZW79+VenZLmYCRKs4p7sNZI2sP8cipS2DbO7vdpTSap27Kt6CI6maR99SrKdzRBMnlNKEACEcgpKtLtfdCs2TZOYxP+8eaii4RfHKLslS0DhgIkREx0neKi0qdPFaq0Rj2x'
						+'mKqJhWcKMGjadHqeeSq6kgMFYwQJgqiaW86C6ffc1Rq1ZG7JNGdtyMub6V6+OHrIDAgsEl+jAOnszB81BrV0XkFhQVTV/W3Y69voXPJwkT8NJcAS+EjHlbwBSwS1bBF1298omHRxzUrCu+4mvfW1grER'
						+'O94kWPDANcF4KVe8qhrxUm7vpz3lSst906SYXVizUrzKwZG24gZpa9hUVHd6wq15a/b7zIx6Wr/UCJCYPbNgk5fWPUf51l19zSGRwFrbQHrj+sJUTpuKtkqnvGgztYBLb+/K87U2vEhZw7aCjmQ5DtaG'
						+'V0lv3JDnT3/2CVbpnqktL+UW3VZbhSYzcSxD5yxEjnxNau9+KCsrGYEoRefc2Zjx42g79CnVR09S21kSPKok2AJUAkI0KW1jrtp64zkC3baQFIurZLnbDbyKBPB50QgA20CFGRgUQCwoM1eFAnwL0Rkv'
						+'HNiy181mASTcwDsPzP+foPVu4F2GIm8S/yG08E0iBz4c2A9MuY7Aq7879dtADXAzMOhfADuA39zASxcb/AeyO0uL5H6hJgAAAABJRU5ErkJggg=='
						+"); position: absolute; top:2px; right:2px; margin:0; padding:0; width:30px; height:30px}"
					+' .scriptIks_but { color:white; border:1px solid #708090; border-radius: 10px; background: #708090;'
						+' background: linear-gradient(top, #e1e1e1, #708090, #e1e1e1);'
						+' background: -webkit-linear-gradient(top, #e1e1e1, #708090, #e1e1e1);'
						+' background: -moz-linear-gradient(top, #e1e1e1, #708090, #e1e1e1);'
						+' background: -ms-linear-gradient(top, #e1e1e1, #708090, #e1e1e1);'
						+' background: -o-linear-gradient(top, #e1e1e1, #708090, #e1e1e1) }'
					//----------
					+" #unitInfoCal { margin:0 2px; padding:0 }"
					+" #unitInfoCal td { border-top: 1px solid #b4b4b4 }"
					+" #unitInfoCal hr { height: 1px; color: #b4b4b4 }"

					+" .scriptIks_news {background: url(data:image/svg+xml;base64,"
						+'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'
						+"); position: absolute; top:2px; right:5px; margin:0; padding:0; width:30px; height:30px}"
					+" .scriptIks_cal {background: url(data:image/svg+xml;base64,"
						+'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'
						+'/4k7KvX0dCV2AAAAAElFTkSuQmCC'
						+"); position: absolute; top:2px; left:3px; margin:0; padding:0; width:24px; height:30px}"
				+"</style>"

				// Основное окно
				+"<div id='unitInfo' class='calcTop' style='left:10px'><div>"
				+"<table id='unitInfoCal' cellpadding=2>"
					+"<tr><th class='scriptIks_cur' title='Переместить'><b><h1>ТОП-1</h1></b></th></tr>"
					+"<tr><td style='border-top:none'><table cellpadding=2>"
						+"<tr><td style='border-top:none'>Зарплата одного сотрудника</td> <td style='border-top:none'><font id='employee_salary'>0</font>"
							+"<font id='color_salary' title='Процентов от средней по городу'> (<font id='wage_percentage_salary'>0</font> %)</font></td></tr>"
						+"<tr><td>Уровень квалификации сотрудников</td> <td><font id='employee_level'>0</font> <font title='требуется'>(~<font id='employee_level_required'>0</font>)</font></td></tr>"
						+"<tr><td>Загрузка</td> <td id='percent_load_top1_'><font id='percent_load_top1'>0</font> %</td></tr>"
						+"<tr><td>Максимальная квалификация сотрудников для полной загрузки ТОП-1</td> <td id='employee_level_maximum'>0</td></tr>"
						+"<tr><td>Максимальное количество сотрудников при данной их квалификации</td> <td>"
							+"<font id='maximum_workers' title='100 %'>0</font><font id='maximum_workers_'><hr><font id='maximum_workers_1'>0</font></font></td></tr>"
						+"<tr><th colspan='2'><b><h1>Оборудование</h1></b></th></tr>"
						+"<tr><td style='border-top:none'>Качество</td> <td id='equipment_quality' style='border-top:none'>0</td></tr>"
						+"<tr><td>Максимальное качество при данной квалификации сотрудников</td> <td id='equipment_quality_max'>0</td></tr>"
						+"<tr name='technology'><td>Минимальное качество по технологии</td> <td id='equipment_quality_technology'>0</td></tr>"
						+"<tr name='office'><td>Управленческая мощность офиса</td> <td><font id='office_control_power'>0</font></td></tr>"
						+"<tr><th colspan='2'><b><h1>ТОП-3</h1></b></th></tr>"
						+"<tr><td style='border-top:none'>Суммарное количество подчинённых по профильной квалификации</td> <td id='labor_summary' style='border-top:none'>0</td></tr>"
						+"<tr><td>Предельная нагрузка по квалификации</td> <td id='labor_summary'><font id='labor_summary_max'>0</font><hr><font id='labor_summary_max1' title='На следующем уровне квалификации'>0</font></td></tr>"
						+"<tr><td>Загрузка</td> <td><font id='overload_top3'>0</font> %</td></tr>"
						+"<tr name='labor_summary_plus'><td>Можно еще нанять в отрасле</td> <td id='labor_summary_plus' style='color:green'>0</td></tr>"
						+"<tr name='labor_summary_mimus'><td>Перебор рабочих в отрасле</td> <td id='labor_summary_mimus' style='color:red'>0</td></tr>"

						+"<tr name='customers'><th colspan='2'><b><h1>Посещаемость</h1></b></th></tr>"
						+"<tr name='customers'><td style='border-top:none'>Количество посетителей</td> <td id='customers_count' style='border-top:none'>0</td></tr>"
						+"<tr name='customers'><td>Максимально по персоналу</td> <td id='customers_max'>0</td></tr>"
						+"<tr name='customers'><td>Процент посещаемости</td> <td><font id='customers_percent'>0</font> %</td></tr>"
					+'</table></td></tr>'
				+"</table>"
				+'<div class="scriptIks_news scriptIks_cur" title="Обновить кэш сервера"></div>'
				+'<div id="calcToBloc" class="scriptIks_cal scriptIks_cur" title="Калькулятор"></div>'
				+'<div id="unitInfoBloc" style="position: absolute; margin:0; padding:0; display:none; width:100%; height:100%; top:0; background: #e1e1e1; opacity: 0.7;">'
				+'<div style="position: absolute; border: 2px solid #b4b4b4; background:#708090; width:10px; height:10px; border-radius:5px; -webkit-border-radius:5px; -moz-border-radius:5px; -khtml-border-radius:7px">'
				+'</div></div>'
                +"</div></div>"

				// Окно калькулятора
				+"<div id='calcTop1' class='calcTop' style='right:10px'><div>"
				+'<table style="width: 100%">'
					+'<tr><th style="cursor: move" title="Переместить"><b><h1>Калькулятор</h1></b></th></tr>'
					+'<tr><td><table>'
					+'<tr><td>Квалификация ТОПа</td> <td><input id="calcTopKv" type="text" size="4" class="scriptIks_imp"></td></tr>'
					+'<tr name="technology"><td>Технология</td> <td><input id="calcTopTehImp" type="text" size="4" class="scriptIks_imp"></td></tr>'
					+'<tr><td>Количество работников</td> <td><input id="calcTopKolRab" type="text" size="4" class="scriptIks_imp"></td></tr>'
					+'<tr><td>Квалификация работников</td> <td><input id="calcTopKvRab" type="text" size="4" class="scriptIks_imp"></td></tr>'
					+'<tr><td align="center" colspan="2"><input id="calcButton" type="button" value="Расчитать" class="scriptIks_cur scriptIks_but"></td></tr>'
					+'<tr name="technology"><td align="center" colspan="2"><hr></td></tr>'
					+'<tr name="technology"><td>Максимальная технология<br>по данной квалификации</td> <td id="calcTopTeh"></td></tr>'
					+'<tr><td align="center" colspan="2"><hr></td></tr>'
					+'<tr><td>Максимальное количество<br>персонала при<br>данной квалификации</td> <td id="calcTopRabMax"></td></tr>'
					+'<tr><td><input id="calcTopRab_MaxImp" value="120" type="text" size="4" class="scriptIks_imp" title="Укажите процент на какой расчитать">'
										+'&nbsp;%</td> <td id="calcTopRab_Max"></td></tr>'
					+'<tr><td align="center" colspan="2"><hr></td></tr>'
					+'<tr><td>Максимальная квалификация<br>персонала при данном количестве</td> <td id="calcTopRab"></td></tr>'
					+'<tr name="technology"><td><hr>Минимальная квалификация<br>по данной технолигии</td> <td id="calcTopRabTeh"></td></tr>'
					+'<tr><td align="center" colspan="2"><hr></td></tr>'
					+'<tr><td>Максимальное качество<br>оборудования при данной<br>квалификации персонала</td> <td id="calcTopOb"></td></tr>'
					+'<tr name="technology"><td><hr>Качество оборудования<br>по данной технолигии</td> <td id="calcTopObTeh"></td></tr>'
					+'<tr><td align="center" colspan="2"><hr></td></tr>'
					+'<tr><td>Максимальное количество<br>персонала в отрасли</td> <td id="calcTop3"></td></tr>'
					+'</table></td></tr>'
				+'<table>'
				+'<div class="scriptIks_exit scriptIks_cur" id="calcExitBloc" title="Закрыть"></div>'
				+'</div></div>';


var setInfoUnut = function(){
	var type = unitWork.type,																					// Тип юнита
		technology_level = parseInt( unitWork.unit.technology_level )|0,										// Технология
		labor_qty = parseInt(unitWork.unit.labor_qty)|parseInt(unitWork.unit.employee_count)|0,					// численость персонала
		competence_value = parseInt( unitWork.unit.competence_value )|0,										// квалификация ТОПа
		labor_summary = parseFloat( unitWork.forecast.labor_summary )|parseFloat( unitWork.unit.all_staff )|0,	// Суммарное количество подчинённых по профильной квалификации
		pers = unitWork.calcPersonalTop3(competence_value, (type == 'orchard' ? 'farm' : type)),				// вычисляет максимальное кол-во работающих на предприятиях отрасли для заданной квалификации игрока (топ-3)
		pers_next = unitWork.calcPersonalTop3(competence_value+1, (type == 'orchard' ? 'farm' : type)),			// вычисляет максимальное кол-во работающих на предприятиях отрасли для заданной квалификации игрока (топ-3) +1
		employee_level = parseFloat( unitWork.unit.employee_level ),											// квалификация персонала
		employee_level_required = parseFloat( unitWork.unit.employee_level_required ),							// Требкемая квалификация персонала
		employee_level_maximum = unitWork.calcQualTop1(competence_value, labor_qty, type).toFixed(2),			// Вычисляет максимальное квалификацию работающих при заданных их численности и квалификации игрока
		emp_count = unitWork.calcPersonalTop1( competence_value, employee_level, type ),						// Вычисляет максимальное кол-во работающих с заданной квалификацией на предприятиии для заданной квалификации игрока (топ-1)
		customers = parseInt( unitWork.unit.customers )|parseInt( unitWork.unit.customers_count )|0;			// численость клиентов

	// топ-3
	$('#labor_summary').html( labor_summary );
	$('#calcTop3').html(pers);
	unitWork.overload = unitWork.procVal(pers, labor_summary);
	if( unitWork.overload < 51 ) {
		unitWork.pP = 144.4;
		$('#calcTopRab_MaxImp').val( unitWork.pP );
	}
	$('#labor_summary_max').html( pers ).css( 'color', (unitWork.overload <= 100?'green':unitWork.overload < 102?'blue':'red' ) );
	$('#labor_summary_max1').html( pers_next );
	$('#overload_top3').html( unitWork.overload );
	if( unitWork.overload<100 ){
		$('#labor_summary_plus').html( (pers-labor_summary) );
		$('tr[name="labor_summary_mimus"]').css( 'display', 'none' );
	} else
	if( unitWork.overload>100 ){
		$('#labor_summary_mimus').html( (labor_summary-pers) );
		$('tr[name="labor_summary_plus"]').css( 'display', 'none' );
	} else {
		$('tr[name="labor_summary_mimus"]').css( 'display', 'none' );
		$('tr[name="labor_summary_plus"]').css( 'display', 'none' );
	}

	// Зарплата
	$('#employee_salary').html( unitWork.unit.employee_salary );
	var procZrp = unitWork.procVal( (parseFloat(unitWork.unit.city_salary)*parseFloat(unitWork.unit.unit_class_salary_koeff)), parseFloat(unitWork.unit.employee_salary) );
	$('#wage_percentage_salary').html( procZrp );
	$('#color_salary').css( 'color', (procZrp < 90 ? 'green' : procZrp > 110 ? 'red' : 'blue' ) );

	// Уровень квалификации сотрудников
	$('#employee_level').html( employee_level ).css( 'color', (employee_level < employee_level_required ? 'red' : 'green' ) );
	// Требуемая квалификации сотрудников
	$('#employee_level_required').html( employee_level_required );
	// Максимально допустимая квалификации сотрудников для заданной квалификации игрока (топ-1)
	$('#employee_level_maximum').html( employee_level_maximum );

	// процент загрузки по топ-1
	var percent_load_top1 = unitWork.procVal(emp_count, labor_qty);
	$('#percent_load_top1').html( percent_load_top1 );
	$('#percent_load_top1_').css( 'color', ( percent_load_top1 <= 100 ? 'green':percent_load_top1 > unitWork.pP ? 'red' : 'blue' ) );

	//Максимальное количество сотрудников при данной их квалификации
	var maximum_workers_1;
	$('#maximum_workers').html(emp_count);
	if( unitWork.overload < 81 ) {
		maximum_workers_1 = Math.floor(emp_count/100*unitWork.pP);
		$('#maximum_workers_1').html( maximum_workers_1 );
		$('#maximum_workers_').attr('title', unitWork.pP+' %');
	} else $('#maximum_workers_').css( 'display', 'none' );

	// Технология
	if( technology_level > 0 ){
		$('#calcTopTehImp').val(technology_level);
		$('#calcTopTeh').html(Math.floor( unitWork.calcTechMax(competence_value) ));
	} else $('tr[name="technology"]').css('display', 'none');

	// Качество оборудования
	var equipment_quality = parseFloat( unitWork.unit.equipment_quality ),
		equipment_quality_max = unitWork.calcEqQualMax( employee_level ),						// Максимальное при данной квалификации сотрудников
		equipment_quality_technology = parseFloat( unitWork.unit.equipment_quality_required );	// Минимальное качество оборудования по технологии
	$('#equipment_quality').html( equipment_quality ).css( 'color', (equipment_quality > equipment_quality_max ? 'red' : 'green' ) );
	$('#equipment_quality_max').html( equipment_quality_max );
	$('#equipment_quality_technology').html( equipment_quality_technology );

	// Управленческая мощность офиса
	if( type == 'office' ){
		var equipment_count = parseInt( unitWork.unit.equipment_count )|0,
			office_control_power = Math.min( equipment_count, labor_qty)*1.03^(equipment_quality-1)*1.4^(employee_level-1);
		$('#office_control_power').html( office_control_power  );
    } else $('tr[name="office"]').css('display', 'none');

	//-----------
	$('#calcTopKv').val( competence_value );
	$('#calcTopKolRab').val( labor_qty );
	$('#calcTopKvRab').val( employee_level );
	$('#calcTopRab').html( employee_level_maximum );
	$('#calcTopRabMax').html( emp_count );
	$('#calcTopRab_Max').html( maximum_workers_1 );

	$('#calcTopOb').html( equipment_quality_max );
},
// Локальное хранилище
coordinatesCalc = {
	'set': function(id, strStorage){
		window.localStorage.setItem(strStorage,
									JSON.stringify( {	'top': $(id).css('top'),
														'left': $(id).css('left'),
														'width': $(id).css('width') } ));
	},
	'get': function(strStorage){
		if( window.localStorage.getItem(strStorage) ) return ( JSON.parse( window.localStorage.getItem(strStorage) ) );
		else return false;
	},
	'resizHeight':  function(id){
		$(id).css({'height':'auto'});
	}
},
// Изменение окна информации о юните
Move = {
	'InfoUnut': function(){
		$( '#unitInfo' ).css({'z-index':unitWork.zIndex+1}).mouseup( function() {
			$('#unitInfo').css({'height':'auto'});
			coordinatesCalc.set('#unitInfo', 'coordinatesUnitInfo');
		});
		switch(unitWork.url[6]) {
			case undefined:
				$( '#unitInfo' ).resizable({'minWidth': 250, 'maxWidth': 570, 'handles':'e'});
				$( '.ui-resizable-handle' ).css({'background-color':'white', 'width':'2px', 'height':'95%', 'top':'2.5%'});
				break;
			default:
				$('#calcToBloc').css('display', 'none');
				$('.scriptIks_news').css('display', 'none');
                $('#unitInfoCal th.scriptIks_cur').removeAttr('title');
				break;
		}
		//-----------
		var coordinates = coordinatesCalc.get('coordinatesUnitInfo');
		if( coordinates != false ) {
			$('#unitInfo').css({
				'display': 'block',
				'top': coordinates.top,
				'left': coordinates.left,
				'width': coordinates.width,
				'height':'auto'
			});
        }
		$('#unitInfo').draggable({
			cancel: '#unitInfo table table',
			containment: 'body',
			cursor: 'move',
			snap: 'body'
		});
		$('#unitInfo h1:nth-child(1)').mouseup( function(){ coordinatesCalc.set('#unitInfo', 'coordinatesUnitInfo'); } );

 	   //------
		$('#calcToBloc').click(function(){
			$('#calcTop1').css('display', 'block');
			$(this).css('display', 'none');
		});
        this.Calculator();
	},
	'Calculator': function(){
		var coordinates = coordinatesCalc.get('coordinatesCalculator');
		if( coordinates != false ) {
			$('#calcTop1').css({
				'top': coordinates.top,
				'left': coordinates.left,
				'width': coordinates.width,
				'height':'auto'
			});
        }
		$('#calcTop1').css({'z-index':unitWork.zIndex+1+$('#unitInfo *').length}).draggable({
			cancel: '#calcTop1 table table',
			containment: 'body',
			cursor: 'move',
			snap: 'body'
		});
		$('#calcTop1 h1:nth-child(1)').mouseup( function(){ coordinatesCalc.set('#calcTop1', 'coordinatesCalculator'); } );

		var calcTopGet = function()
		{
			var p = false;
			if($('#calcTopTeh').html() != '') p = true;
			// Максимум рабов ТОП-3
			var kv = $('#calcTopKv').val();
			var type_1 = unitWork.type;
			if ( unitWork.type == 'orchard' )  type_1 = 'farm';
			$('#calcTop3').html( unitWork.calcPersonalTop3(kv, type_1) );
			// Максимальная техна
			if(p) $('#calcTopTeh').html( Math.floor(  unitWork.calcTechMax(kv) ) );
			// Максимальное кол. рабов ТОП-1
			var kvp = $('#calcTopKvRab').val();
			var emp_count = unitWork.calcPersonalTop1(kv, kvp, unitWork.type);
			$('#calcTopRabMax').html(emp_count);
			var kvpTeh = unitWork.kvTeh[$('#calcTopTehImp').val()];
			$('#calcTopRabTeh').html(kvpTeh);
			//-----
			var maxRab = $('#calcTopRab_MaxImp').val();
			$('#calcTopRab_Max').html( Math.floor(emp_count/100*maxRab) );
			// Макс. квала рабов
			unitWork.cur_pers = $('#calcTopKolRab').val();
			$('#calcTopRab').html( unitWork.calcQualTop1( kv, unitWork.cur_pers, unitWork.type ).toFixed(2) );
			// Макс. оборудование
			var max_eq = unitWork.calcEqQualMax(kvp);
			$('#calcTopOb').html(max_eq);
			if(p) $('#calcTopObTeh').html( unitWork.calcEqQualMax( kvpTeh ) );
			else $('#calcTopObTeh').html('');
		};
		calcTopGet();
		$('#calcButton').click(function(){ calcTopGet(); });

 	   //------
		$('#calcExitBloc').click(function(){
			$('#calcTop1').css('display', 'none');
			$('#calcToBloc').css({'display':'block'});
		});
	},
},
// Обновить данные
newCacheInfo = {
	'animateLeft': function(n){
	    var to = this;
	    $('#unitInfoBloc div').animate({ left: "-="+(n*2) }, +(n*5), function() { to.animateRight(n); });
	},
	'animateRight': function(n){
	    var to = this;
	    $('#unitInfoBloc div').animate({ left: "+="+(n*2) }, +(n*5), function() { to.animateLeft(n); });
	},
	'get': function(){
		$('#unitInfoBloc').css({'display':'block'});
		var w = parseInt($('#unitInfo').css('width'))/4;
		$('#unitInfoBloc div').css({'top':(parseInt($('#unitInfo').css('height'))/2-10)+'px', 'left': w+'px'});
		this.animateRight(w);
		$.getJSON('/api/' + unitWork.url[1] + '/main/token', function(token){
			$.post('/api/' + unitWork.url[1] + '/main/unit/refresh', { 'id': unitWork.url[5], 'token': token }).success( function(){
				$.post('/api/' + unitWork.url[1] + '/main/unit/forecast', { 'id': unitWork.url[5] }).success( function(data_){
					unitWork.forecast = data_;
					$.post('/api/' + unitWork.url[1] + '/main/unit/summary', { 'id': unitWork.url[5] }).success( function(data){
						$('#unitInfoBloc div').stop();
						unitWork.unit = data;
						setInfoUnut();
						$('#unitInfoBloc').css({'display':'none'});
					});
				});
			});
		});
	},
	'start': function(){
	    var to = this;
		$('.scriptIks_news').click(function(){ to.get(); });
	}
},

// Функции
unitWork =  {
 	'unit':{}, 'forecast':{}, 'zIndex':0, 'type':'',
	'pP': 120, 'cur_pers': '', 'overload': 0, 'mode': '',
	'kvTeh': [1, 1, 1.74, 2.41, 3.03, 3.62, 4.19, 4.74, 5.28, 5.8,
				6.31, 6.81, 7.3, 7.78, 8.26, 8.73, 9.19, 9.65, 10.1, 10.54,
				10.99, 11.42, 11.86, 12.29, 12.71, 13.13, 13.55, 13.97, 14.38, 14.79,
				15.19, 15.6, 16, 16.4, 16.8, 17.19, 17.58, 17.97, 18.36, 18.74, 19.13],

	///////////////////////////////////////////////////////////////////////////
	// q - квалификация игрока
	//вычисляет максимальное кол-во работающих на предприятиях отрасли для заданной квалификации игрока (топ-3)
	'calcPersonalTop3': function( q, type) {
		return (2*q*q + 6*q)*this.getK(type, 3);
	},//end calcPersonalTop3()

	///////////////////////////////////////////////////////////////////////////
	// q - квалификация игрока
	// qp -  квалификация персонала
	//вычисляет максимальное кол-во работающих с заданной квалификацией на предприятиии для заданной квалификации игрока (топ-1)
	'calcPersonalTop1': function(q, qp, type) {
		if((this.mode=='Crocuta')&&(type=='office')){return Math.floor(14*q*q/Math.pow(1.4, qp)/4.15);}
		return Math.floor(0.2*this.getK(type, 1)*14*q*q/Math.pow(1.4, qp));
	},//end calcPersonalTop1()

	///////////////////////////////////////////////////////////////////////////
	// q - квалификация игрока
	// p -  численность персонала
	//вычисляет максимальное квалификацию работающих при заданных их численности и квалификации игрока (обратна calcPersonalTop1())
	'calcQualTop1': function(q, p, type) {
		if(p==0) return 0.00;
		if((this.mode=='Crocuta')&&(type=='office')){return Math.log(14/4.15*q*q/p)/Math.log(1.4);}
		return Math.log(0.2*14*this.getK(type, 1)*q*q/p)/Math.log(1.4);
	},//end calcQualTop1()

	///////////////////////////////////////////////////////////////////////////
	// qp - квалификация игрока
	//вычисляет максимальное качество оборудования/животных для заданной квалификации персонала
	'calcEqQualMax': function( qp ) {
		return Math.floor(100*Math.pow(qp, 1.5))/100 ;
	},//end calcEqQualMax

	///////////////////////////////////////////////////////////////////////////
	// q - квалификация игрока
	//вычисляет максимальный уровень технологии для заданной квалификации игрока
	'calcTechMax': function(q) {
		return Math.round(10*Math.pow(q/0.0064, 1/3))/10 ;
	},//end calcTechMax()

	///////////////////////////////////////////////////////////////////////////
	//возвращает к для расчётов нагрузки по типу
	'getK': function (type, top) {
		var num = 0;
		switch(type) {
			case('shop'):
			case('restaurant'):
			case('lab'):
				num = 5;
				break;
			case('workshop'):
				num = (unitWork.url[1] == 'anna' ? 100 : 50);
				break;
			case('mill'):
				num =  ( top == 3 ? (unitWork.url[1] == 'anna' ? 100 : 50) : (unitWork.url[1] == 'anna' ? 10 : 5) );
				break;
			case('sawmill'):
				num = ( top == 3 ? (unitWork.url[1] == 'anna' ? 100 : 50) : (unitWork.url[1] == 'anna' ? 25 : 12.5) );
				break;
			case('animalfarm'):
				num = 7.5;
				break;
			case('medicine'):
			case('fishingbase'):
				num = 12.5;
				break;
			case('farm'):
				num = 20;
				break;
			case('orchard'):
				num = ( top == 3 ? 15 : 18);
				break;
			case('mine'):
				num = (unitWork.url[1] == 'anna' ? 50 : 100);
				break;
			case('office'):
			case('it'):
				//if(mode=='Crocuta') return
				num = 1;
				break;
			case('service'):
			case 'service_light':
			case('educational'):
				num = 1.5;
				break;
			case('repair'):
			case('fuel'):
				num = 2.5;
				break;
			case('power'):
				num = 75;
				break;
			case('villa'):
			case('warehouse'):
			case('unknown'):
				num = 0;
				break;
			default:
				num = 0;
		}//end switch
		return num;
	},//end getType()

	///////////////////////////////////////////////////////////////////////////
	//возвращает процент от val по отношению к nun
	'procVal': function(num, val) {
		num = val/(num/100);
		if (num) return num.toFixed(2);
		else return '0.00';
	}//end procVal()
};

// Расчет количества поситителей в ресторанах, сервисах, медцентрах
var serviceUnit = function(){
	$ = (typeof(unsafeWindow) != 'undefined' ? unsafeWindow : top.window).$;

	// максмальное количество поситетилей по персоналу
	var d,
		persKol = [parseInt(unitWork.unit.labor_qty)|parseInt(unitWork.unit.employee_count)|0, parseInt(unitWork.unit.employee_required_by_equipment)|0],
		spec = unitWork.unit.unit_type_produce_name;
	if(persKol[0] > persKol[1]) persKol[0] = persKol[1];

	switch(spec) {
		case('Больница'):
			d = 0.2;
			break;
		case('Стоматологическая клиника'):
			d = 0.5;
			break;
		case('Фитнес'):
		case('Йога'):
		case('Бодибилдинг'):
		case('Группы здоровья'):
		case('Профессиональный спорт'):
		case('Скалолазание'):
		case('Диагностический центр'):
		case('Поликлиника'):
		case('Детский сад'):
			d = 5;
			break;
		case('Прачечная'):
		case('Химчистка'):
		case('Прачечная самообслуживания'):
		case('SPA-салон'):
			d = 10;
			break;
		case('Косметический салон'):
			d = 20;
			break;
		case('Рыбный ресторан'):
		case('Устричный ресторан'):
			d = 30;
			break;
		case('Парикмахерская'):
		case('Сырный ресторан'):
			d = 40;
			break;
		case('Стейк ресторан'):
		case('Вегетарианский ресторан'):
		case('Ресторан мексиканской кухни'):
			d = 50;
			break;
		case('Пивной ресторан'):
		case('Ресторан итальянской кухни'):
		case('Ресторан греческой кухни'):
			d = 60;
			break;
		case('Фастфуд'):
			d = 70;
			break;
		case('Кафе-мороженое'):
		case('Кафе-кондитерская'):
		case('Кофейня'):
		case('Блинная'):
			d = 80;
			break;
		default:
			d = 1;
	}
	var maxPer = persKol[0] * d,
		pos = parseInt(unitWork.unit.customers)|parseInt(unitWork.unit.customers_count)|parseInt(unitWork.unit.sales)|0,
		proc = Math.round(pos/(maxPer/100))|0;
	$('#customers_count').html( pos );
	$('#customers_max').html( maxPer.toFixed(0).toString().replace(/(\d)(?=(\d\d\d)+([^\d]|$))/g, '$1 ') );
	$('#customers_percent').html( proc.toFixed(0) );
};

if(window.top == window) {
	var url = window.location.pathname.split('/');
	unitWork.url = url;
	$.post('/api/' + url[1] + '/main/unit/summary', { 'id': url[5] }).success( function(data){
		unitWork.unit = data;
		unitWork.type = data.unit_class_kind;
		switch(unitWork.type) {
			case 'shop':
			case 'workshop':
			case 'mill':
			case 'animalfarm':
			case 'medicine':
			case 'restaurant':
			case 'orchard':
			case 'farm':
			case 'mine':
			case 'lab':
			case 'villa':
//			case 'warehouse':
			case 'fishingbase':
			case 'office':
			case 'sawmill':
			case 'service':
			case 'service_light':
			case 'power':
			case 'repair':
			case 'fuel':
			case 'it':
			case 'educational':
				unitWork.zIndex = $('*').length;
				$('body').prepend( strSetting );
				$.post('/api/' + url[1] + '/main/unit/forecast', { 'id': url[5] }).success( function(data_){
					unitWork.forecast = data_;
					setInfoUnut();
					Move.InfoUnut();
					newCacheInfo.start();
				});
				break;
			case undefined:
				newCacheInfo.get();
				break;
		}
		switch(unitWork.type) {
			case 'restaurant':
			case 'service':
			case 'service_light':
			case 'medicine':
				serviceUnit();
				break;
			default:
				$('tr[name="customers"]').css( 'display', 'none' );
		}
    });
}

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址