Greasy Fork is available in English.
Отображение максимальной технологии, максимального числа/квалификации сотрудников, которые держит топ. Также после открытия окна "Сотрудники и зарплата" на всех заводах этого города будет показано отношение зарплаты к среднегородской.
// ==UserScript== // @name Virtonomica:kvala_personal_indicator_zarplaty_by_Agor71 // @version 1.308 // @author Agor71 (edited by UnclWish) // @namespace virtonomica // @description Отображение максимальной технологии, максимального числа/квалификации сотрудников, которые держит топ. Также после открытия окна "Сотрудники и зарплата" на всех заводах этого города будет показано отношение зарплаты к среднегородской. // @include http*://*virtonomic*.*/*/main/unit/view/* // @include http*://*virtonomic*.*/*/window/unit/employees/engage/* // ==/UserScript== (function () { //Следующие три строки убирают "обои" и картинки предприятий со всех страниц. Для отключения функционала поставьте "//" в следующих строках - аналогично с тем, как эти два символа стоят в начале этой строки. Каждая строка имеет пояснения $('body').attr('class','');//убираем фон по бокам $('#wrapper > div.metro_header > div > div.picture').attr('style', 'display: none');//прячем фон из верхней части страницы //$('#wrapper > div.metro_header * .bg-image').attr('style', 'display: none');//прячем картинку предприятия //$('#wrapper > div.metro_header * .dainfo').attr('style', 'display: none');//прячем данные о скидках $( document ).ready(function() { //Следующие три строки убирают "обои" и картинки предприятий со всех страниц. Для отключения функционала поставьте "//" в следующих строках - аналогично с тем, как эти два символа стоят в начале этой строки. Каждая строка имеет пояснения $('body').attr('class','');//убираем фон по бокам $('#wrapper > div.metro_header > div > div.picture').attr('style', 'display: none');//прячем фон из верхней части страницы //$('#wrapper > div.metro_header * .bg-image').attr('style', 'display: none');//прячем картинку предприятия //$('#wrapper > div.metro_header * .dainfo').attr('style', 'display: none');//прячем данные о скидках }); if ($('.tabu > li').eq(1).attr('class') != 'sel') return; var new_interface = $("div.unit_box-container").length; if (new_interface) { // поменять местами заметки и инфу по топ-менеджеру var topBox = $("#notice_div").parent().next(); $("#notice_div").parent().insertAfter(topBox); // создать кнопку удаления заметки var str = '<div class="unit_button btn-virtonomics-unit-cancel" onclick="$(\'#notice_div\').text(\'\');return unitNoticeSet();">'; str += '<i class="fa fa-trash fa-lg fa-fw"></i> Удалить заметку</div>'; $("#notice_div").next().children().eq(0).children().eq(0).after($(str)); } saveAverageCityInfo(); var type, cur_pers; var kvTeh = [0, 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]; /***** Калькулятор *****/ $('#unit_subtab').each(function() { var str = this.innerHTML; str += '<br><div id="calcTop"><a id="calcToBloc" class="popup scriptIks_cur"><u>Калькулятор топ-1</u></a></div>'; var d=document.createElement('div'); d.id='calcTop1'; d.style='position: fixed; right: 5px; top: 5px; background:gray; padding: 0px;' +' border-radius:10px; -webkit-border-radius:10px; -moz-border-radius:10px; -khtml-border-radius:10px;'; var ua = navigator.userAgent; var strToBrauzer = '<div style="position:relative; margin: 0; padding: 4px;">'; if (ua.search(/Chrome/) > 0) strToBrauzer = '<div style="position:absolute; margin: 0; padding: 4px; right: 5px; top: 5px;">'; d.innerHTML = strToBrauzer +'<table style="background-color: white; border-radius:7px; -webkit-border-radius:7px; -moz-border-radius:7px; -khtml-border-radius:7px;">' +'<tr><td align="center" colspan="2" style="color: #708090;"><b><h1>Калькулятор</h1><b><hr></td></tr>' +'<tr><td>Квалификация ТОПа</td> <td><input id="calcTopKv" type="text" size="4" class="scriptIks_imp"></td></tr>' +'<tr><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><td align="center" colspan="2"><hr></td></tr>' +'<tr><td>Максимальная технология<br>по данной квалификации</td> <td id="calcTopTeh" style="text-align: right;"></td></tr>' +'<tr><td align="center" colspan="2"><hr></td></tr>' +'<tr><td>Максимальное количество<br>персонала при<br>данной квалификации</td> <td id="calcTopRabMax" style="text-align: right;"></td></tr>' +'<tr><td><input id="calcTopRab_MaxImp" value="120" type="text" size="4" class="scriptIks_imp" title="Укажите процент на какой расчитать"> %</td> <td id="calcTopRab_Max" style="text-align: right;"></td></tr>' +'<tr><td align="center" colspan="2"><hr></td></tr>' +'<tr><td>Максимальная квалификация<br>персонала при данном количестве<hr></td> <td id="calcTopRab" style="text-align: right;"></td></tr>' +'<tr><td>Минимальная квалификация<br>по данной технолигии</td> <td id="calcTopRabTeh" style="text-align: right;"></td></tr>' +'<tr><td align="center" colspan="2"><hr></td></tr>' +'<tr><td>Максимальное качество<br>оборудования при данной<br>квалификации персонала<hr></td> <td id="calcTopOb" style="text-align: right;"></td></tr>' +'<tr><td>Качество оборудования<br>по данной технолигии</td> <td id="calcTopObTeh" style="text-align: right;"></td></tr>' +'<tr><td align="center" colspan="2"><hr></td></tr>' +'<tr><td>Максимальное количество<br>персонала в отрасли</td> <td id="calcTop3" style="text-align: right;"></td></tr>' +'<tr><td align="center" colspan="2"><hr></td></tr>' +'<tr><td align="right" colspan="2"><a href="http://virtacalc.freehost96.ru/indextop.php" class="popup" title="Так-же расчет нагрузки ТОП-1 и многое другое..." target="_blank"><small>Калькулятор от DeMonyan</small></a></td></tr>' +'<table>' +'<div class="scriptIks_cur scriptIks_exitDiv" id="calcExitBloc" title="Закрыть">' +'<div class="scriptIks_crug1"></div>' +'<div class="scriptIks_exit"><b>X</b></div>' +'<div class="scriptIks_crug"></div>'; +'</div>' +'</div>'; document.body.appendChild(d); this.innerHTML = str; document.getElementById('calcTop1').style.display = "none"; }); document.getElementById('calcButton').onclick = calcTopGet; function calcTopGet(){ var p = false; if($('#calcTopTeh').html() != '') p = true; // Максимум рабов ТОП-3 kv = $('#calcTopKv').val(); var type_1 = type; if (type == 'orchard') type_1 = 'farm'; pers = calcPersonalTop3(kv, type_1); $('#calcTop3').html(pers); // Максимальная техна if(p) { techn = calcTechMax(kv); $('#calcTopTeh').html(Math.floor(techn)); } // Максимальное кол. рабов ТОП-1 kvp = $('#calcTopKvRab').val(); emp_count = calcPersonalTop1(kv, kvp, type); $('#calcTopRabMax').html(emp_count); var kvpTeh = kvTeh[$('#calcTopTehImp').val()]; $('#calcTopRabTeh').html(kvpTeh); //----- var maxRab = $('#calcTopRab_MaxImp').val(); $('#calcTopRab_Max').html(Math.floor(emp_count/100*maxRab)); // Макс. квала рабов cur_pers = $('#calcTopKolRab').val(); maxq=f2(calcQualTop1(kv,cur_pers, type)); $('#calcTopRab').html(maxq); // Макс. оборудование max_eq = calcEqQualMax(kvp); $('#calcTopOb').html(max_eq); if(p) { var teh_eq = calcEqQualMax(kvpTeh); $('#calcTopObTeh').html(teh_eq); } else $('#calcTopObTeh').html(''); } $('#calcToBloc').click(function(){ document.getElementById('calcTop').style.display = "none"; document.getElementById('calcTop1').style.display = "block"; }); $('#calcExitBloc').click(function(){ document.getElementById('calcTop').style.display = "block"; document.getElementById('calcTop1').style.display = "none"; }); /*************************************/ var win = (typeof(unsafeWindow) != 'undefined' ? unsafeWindow : top.window); $ = win.$; var mode=''; /*$( 'img[src*="812223"]' ).each ( function() { mode='Crocuta'; // алмазы });*/ //mode='Crocuta';// офисная мистика type = getType();//'unknow'; var k =getK3(type);// 0; if((type=='unknow')||(k==0)) return; ////////////////////////////////// var total=getPersonalTotal(); cur_pers=getPersonal(type); var kv = getPlayerQual(); $('#calcTopKv').val(kv); // топ-3 $("td:contains('Суммарное')").next().each(function() { str = this.innerHTML; //kv = parseInt( str ); var type_1 = type; if (type == 'orchard') type_1 = 'farm'; pers = calcPersonalTop3(kv, type_1); $('#calcTop3').html(pers); var pers_next=calcPersonalTop3(kv+1, type_1); overload = procVal(pers, total); if(overload>120) font='red'; else if(overload>100) font='blue'; else font='green'; if (new_interface) { // выделить цветом число подчиненных var curText = $(this).text(); $(this).html($('<font color=' + font + '><b>' + curText + '</b></font>')); var top3AndFree = '<tr><td>Нагрузка топ-3</td>'; top3AndFree += '<td><font color=' + font +'><b>' + overload + '%</b></font></td></tr>'; if (overload != 100) { var word = overload < 100 ? 'Свободно' : 'Лишних'; var delta = Math.abs(pers - total); top3AndFree += '<tr><td>' + word + ' подчинённых</td>'; top3AndFree += '<td><font color=' + font +'><b>' + getThousandsSplitted(delta) + '</b></font></td></tr>'; } $(this).parent().before($(top3AndFree)); var str = '<tr><td>Максимальное количество</td><td>' + getThousandsSplitted(pers) + '</td></tr>'; str += '<tr><td><font color=gray>На следующем уровне квалификации</font></td>'; str += '<td><font color=gray>' + getThousandsSplitted(pers_next) + '</font></td></tr>'; str += '<tr><td><font color=gray>Рабов для нагрузки в 80%<font color=gray></td><td><font color=gray>' + getThousandsSplitted(Math.floor(pers*0.8)) + '</font></td></tr><tr><td><font color=gray>Рабов для нагрузки в 120%</font></td><td><font color=gray>' + getThousandsSplitted(Math.floor(pers * 1.2)) + '</font></td></tr>'; $(this).parent().after($(str)); } else { var str=' <br><font color=' + font +'>Предельная нагрузка по квале: <b>'; str+=getThousandsSplitted(pers)+ '</b>'+' (на след.уровне: '+'<b>'+getThousandsSplitted(pers_next)+'</b>'+')'; str+='<br>Рабов для нагрузки в 80%: ' + getThousandsSplitted(Math.floor(pers*0.8)) + '<br>Рабов для нагрузки в 120%: ' + getThousandsSplitted(Math.floor(pers * 1.2)); //str+='</b>'; str+='<br><br>Загрузка топ-3: <b> '+overload+' %</b>'; if(overload<100) str+='<br>Свободно рабов: <b>'+getThousandsSplitted(pers-total)+'</b>'; else if(overload>100) str+='<br>Перебор рабов: <b>'+getThousandsSplitted(total-pers)+'</b>'; str+= '</b></font>'; this.innerHTML = this.innerHTML +str; } }); // техна var techn = 0; var max_techn = 0; var load; $("td:contains('Уровень технологии')").next().each(function() { str = this.innerHTML; techn = parseInt( str ); $('#calcTopTehImp').val(techn); max_techn = calcTechMax(kv); $('#calcTopTeh').html(Math.floor(max_techn)); font = 'green'; load = procVal(max_techn,techn); load = f2(Math.pow(load/100,3)*100); if (load > 100) { font = 'red'; if(load<=120) font='orange'; } if (new_interface) { var curText = $(this).text(); $(this).html($('<font color=' + font + '><b>' + curText + '</b></font>')); str = '<tr><td>Максимальная технология</td><td>' + (max_techn) + '</td></tr><tr><td>Технология для 80% нагрузки топ-1</td><td>' + calcTechMax(kv*0.8) + '</td></tr><tr><td>Технология для 120% нагрузки топ-1</td><td>' + calcTechMax(kv*1.2) + '</td></tr>'; $(this).parent().after($(str)); } else { str = ' <br>(<font color=' + font +'>Максимальная технология: <b>' + (max_techn) + '</b></font>)<br>(Технология для 80% нагрузки топ-1: <b>' + calcTechMax(kv*0.8) + '</b>)<br>(Технология для 120% нагрузки топ-1: <b>' + calcTechMax(kv*1.2) + '</b>)'; this.innerHTML = this.innerHTML + str; } }); // Количество работников var nofp=getPersonal(type); var emp_count = 0; // топ-1 var kvp = 0; $("td:contains('Уровень квалификации')").next().each(function() { str = this.innerHTML; kvp = parseFloat( str ); $('#calcTopKvRab').val(kvp); emp_count = calcPersonalTop1(kv, kvp, type); $('#calcTopRabMax').html(emp_count); $('#calcTopKolRab').val(cur_pers); emp_count_next = calcPersonalTop1(kv+1, kvp, type); var maxq=f2(calcQualTop1(kv, cur_pers, type)); $('#calcTopRab').html(maxq); if(maxq<kvp) font='red'; else font='green'; // процент загрузки по топ-1 //console.log("emp_count=" + emp_count + ", nofp=" + nofp); var num = procVal(emp_count, nofp); if(num>100){ font='red'; if(num<=144) font='#DF3A01'; if(num<=120) font='orange'; } else font='green'; if (type == 'workshop' || type == 'mill' || type == 'mine' || type == 'fishingbase' || type == 'sawmill' || type == 'animalfarm' || type == 'orchard' || type == 'farm' || type == 'power') { num = load; if(num>100){ font='red'; if(num<=120) font='orange'; } else font='green'; } if (new_interface) { // передвинуть уровень загрузки производства туда, где ему и место if ($("td:contains('Уровень загрузки производства')").length) { $($(this).parent().next().next()).insertBefore($(this).parent().prev().prev()); } //Выделяем цветом текущую квалификацию var curQual = $(this).text().match(/\d[.\s\d]*(?=)/g)['0']; var trebQual = $('td:contains("Требуется по технологии")').eq(0).next().text(); var curText = $(this).text().substr($(this).text().indexOf(' (')); if (type == 'shop') { trebQual = $('td:contains("требуется")').eq(1).text().match(/\d[.\s\d]*(?=)/g)['1']; } if (type == 'office') { if ($("td:contains('Уровень квалификации')").next().length == 2) { curQual = $("td:contains('Уровень квалификации')").next().eq(1).text().match(/\d[.\s\d]*(?=)/g)['0']; trebQual = $('td:contains("требуется")').eq(0).text().match(/\d[.\s\d]*(?=)/g)['1']; } else { curQual = $("td:contains('Уровень квалификации')").next().eq(0).text().match(/\d[.\s\d]*(?=)/g)['0']; trebQual = $('td:contains("требуется")').eq(0).text().match(/\d[.\s\d]*(?=)/g)['1']; } } var fontQual = (+curQual > +trebQual) ? font:'red'; fontQual = (+curQual == +trebQual) ? '#00cc00':fontQual; if ($(this).text().indexOf(' (') != -1) { $(this).html($('<font color=' + fontQual + '><b>' + curQual +'</b></font>' + '<font color = "orange">' + curText + '</font>')); } else { $(this).html($('<font color=' + fontQual + '><b>' + curQual + '</b></font>')); } var beforeString = ''; /*var cityName = $("div.officePlace").clone().children().remove().end().text(); var startPos = cityName.indexOf(":") + 2; cityName = cityName.substr(startPos, cityName.indexOf("|") - startPos).replace(/[\s,]+/g, ''); cityName = cityName.substr(0, cityName.length - 2);*/ //console.log("city=" + cityName); //var avgSalaryStr = localStorage.getItem(cityName + ":" + type); var avgSalaryStr; $("td:contains('В среднем по городу')").next().each(function() { //var str = $(this).text(); //str = str.substr(0, str.indexOf(" в")).replace(/[^\d\.]/g, '') avgSalaryStr = parseFloat($(this).text().replace(/[^\d\.]/g, '')); //avgSalaryStr = parseFloat(str); }); if (avgSalaryStr !== null) { //console.log("sal = " + avgSalaryStr); var curSalary = parseFloat(leaveOnlyDigitsAndDots($(this).parent().prev().prev().children().eq(1).text())); //console.log("curSalary=" + curSalary); //$(this).parent().prev().prev().children().eq(1).append('<font color=blue> (' + (curSalary / avgSalaryStr * 100).toFixed(0) + '%)</font>'); var zzzn = (curSalary / avgSalaryStr * 100).toFixed(0); var colorn = zzzn<80?'red':'green'; var colorn = zzzn>80?'blue':colorn; //$(this).parent().prev().prev().children().eq(1).append(" (" + zzzn + "%)"); var oldHtml = $(this).parent().prev().prev().children().eq(1).html(); var colored = '<font color=' + colorn + '>' + oldHtml + '</font>'; $(this).parent().prev().prev().children().eq(1).html(colored); //console.log ("cur_pers=" + cur_pers); beforeString += '<tr><td>Расходы на зарплату</td>'; beforeString += '<td>$' + getThousandsSplitted((curSalary * cur_pers).toFixed(2)) + ' в неделю</td></tr>'; //beforeString += '<tr><td>Средняя зарплата в городе</td>'; //beforeString += '<td>$' + getThousandsSplitted(avgSalaryStr) + ' в неделю</td></tr>'; } if (isFinite(num)) { beforeString += '<tr><td>Нагрузка топ-1</td><td><font color=' + font + '><b>' + num + '%</b></font></td></tr>'; } $(this).parent().before($(beforeString)); if (type != 'workshop' && type != 'mill' && type != 'mine' && type != 'fishingbase' && type != 'sawmill' && type != 'animalfarm' && type != 'orchard' && type != 'farm' && type != 'power') { var str = '<tr><td>Квалификация 100/120/144% топ-1</td>'; str += '<td>' + maxq + '/' + f2(calcQualTop1(kv, cur_pers / 1.2, type)) + '/' + f2(calcQualTop1(kv, cur_pers / 1.44, type)) + '</td></tr>'; //str += '<tr><td><font color=gray>Квалификация для 120% топ-1</font></td>'; //str += '<td><font color=gray>' + f2(calcQualTop1(kv, cur_pers / 1.2, type)) + '</font></td></tr>'; str += '<tr><td>Макс. количество с квалой ' + kvp + '</td>'; str += '<td>' + emp_count + '</td></tr>'; str += '<tr><td><font color=gray>120% максимального количества</font></td>'; str += '<td><font color=gray>' + Math.floor(emp_count / 100 * 120) + '</font></td></tr>'; str += '<tr><td><font color=gray>Макс. на следующем уровне квалы</font></td>'; str += '<td><font color=gray>' + emp_count_next + '</font></td></tr>'; $('#calcTopRab_Max').html(Math.floor(emp_count/100*120)); $(this).parent().next().after($(str)); } } else { //Выделяем цветом текущую квалификацию var curQual = $(this).text().match(/\d+\.\d+/g)['0']; var trebQual = $(this).text().match(/\d+\.\d+/g)['2']; var curText = $(this)['0'].innerText; curText = curText.substr(curText.indexOf(' (')); var fontQual = (+curQual > +trebQual) ? font:'red'; fontQual = (+curQual == +trebQual) ? '#00cc00':fontQual; $(this)['0'].innerHTML = '<b><font color = ' + fontQual + '>' + curQual + '</font></b>' + curText; //Добавляем рассчитываемые значения if (type != 'workshop' && type != 'mill' && type != 'mine' && type != 'fishingbase' && type != 'sawmill' && type != 'animalfarm' && type != 'orchard' && type != 'farm' && type != 'power') { this.innerHTML = this.innerHTML + '<br><font color=gray>Квалификация 100/120/144% топ-1: <b>' + maxq + '/' + f2(calcQualTop1(kv, cur_pers / 1.2, type)) + '/' + f2(calcQualTop1(kv, cur_pers / 1.44, type)) + '</b></font>'; this.innerHTML = this.innerHTML + '<br>(<font color='+font+'>Максимальное количество рабов: <b>' + (emp_count) + '</b></font>) '; this.innerHTML = this.innerHTML + '<br>(<font color='+font+'>120% количества рабов: <b>' + Math.floor(emp_count/100*120) + '</b></font>)'; $('#calcTopRab_Max').html(Math.floor(emp_count/100*120)); } // процент загрузки по топ-1 /*var num = procVal(emp_count, nofp); if(num>100){ if(num<=120) font='orange'; else font='red'; } else font='green';*/ this.innerHTML = this.innerHTML + '<br><font color=' + font + '>Нагрузка по топ-1: <b>' + num + '%</b></font>'; /////////// /*this.innerHTML = this.innerHTML + '<br>(<font color=gray>На квале ' + (kv+1) + ' (следующий уровень): <b>' + (emp_count_next) + '</b></font>)';*/ //Выделяем цветом зарплату $("td:contains('Зарплата')").next().each(function() { str = this.innerHTML; zarp = str.match(/\d[.\s\d]*/g); zzz = (zarp[0].replace(/[^\d\.]/g,'')/zarp[1].replace(/[^\d\.]/g,'')*100).toFixed(0); color = zzz<80?'red':'green'; color = zzz>80?'blue':color; this.innerHTML = '<font color=' + color +'>' + str + ' --> ' + zzz + '%</font>'; }); /*if(mode=='Crocuta'){ var p5=Math.floor(pers/5); var k5=calcQualTop1(kv,p5,type); var e5=calcEqQualMax(k5); this.innerHTML = this.innerHTML + '<br>(<font color=olive>Special 05: <b>5 *' + p5 + '--' + f2(k5) + '('+e5+')'+'</b></font>)'; p5=Math.floor(pers/10); k5=calcQualTop1(kv,p5,type); e5=calcEqQualMax(k5); this.innerHTML = this.innerHTML + '<br>(<font color=olive>Special 10: <b>10*' + p5 + '--' + f2(k5) + '('+e5+')'+'</b></font>)'; }*/ } }); //оборудование var eq; var max_eq = 0; $("td:contains('Качество '):first").next().each(function() { str = this.innerHTML; eq= parseFloat( str ); max_eq = calcEqQualMax(kvp); $('#calcTopOb').html(max_eq); if (eq > max_eq) font = 'red'; else font = 'green'; if (new_interface) { var required = parseFloat($(this).parent().next().children().eq(1).text()); if (eq < required) { font = 'red'; } // выделить цветом качество var curText = $(this).text(); $(this).html($('<font color=' + font + '><b>' + curText + '</b></font>')); //if (eq < required) { // $(this).parent().next().children().eq(1).html($('<font color=' + font + '><b>' + required + '</b></font>')); //} str = '<tr><td>Максимальное по персоналу</td><td>' + (max_eq) + '</td></tr>'; $(this).parent().next().after($(str)); } else { str = ' <br>(<font color=' + font +'>Макс.качество по персоналу: <b>' + (max_eq) + '</b></font>)'; if ($("td:contains('Качество '):first").next("td:contains('требуется по технологии')").length != 0) { var required = $(this)['0'].innerHTML.match(/\d+\.\d+/g)['1']; if (isNaN(required)) { required = $(this)['0'].innerHTML.match(/\d+\.\d+/g)['0']; } font = ((eq < required) || (eq > max_eq)) ? 'red':'green'; /*if (eq < required) { font = 'red'; }*/ // выделить цветом качество //var curText = $(this)['0'].innerHTML.match(/\d+\.\d+/g)['0']; if (isNaN(eq)) { eq = 'Не изв.'; } $(this).html($('<font color=' + font + '><b>' + eq + '</b></font><span> (требуется по технологии ' + required +')</span>')); } else { font = (eq > max_eq) ? 'red':'green'; $(this).html($('<font color=' + font + '><b>' + eq + '</b></font>')); } this.innerHTML = this.innerHTML + str; } // Вызов калькулятора, чтоб посчтитал calcTopGet(); }); if (type == 'office' && new_interface) { $("td:contains('Качество ')").eq(2).next().each(function() { str = this.innerHTML; eq= parseFloat( str ); max_eq = calcEqQualMax(kvp); $('#calcTopOb').html(max_eq); if (eq > max_eq) font = 'red'; else font = 'green'; var required = parseFloat($(this).parent().next().children().eq(1).text()); if (eq < required) { font = 'red'; } // выделить цветом качество var curText = $(this).text(); $(this).html($('<font color=' + font + '><b>' + curText + '</b></font>')); //if (eq < required) { // $(this).parent().next().children().eq(1).html($('<font color=' + font + '><b>' + required + '</b></font>')); //} str = '<tr><td>Максимальное по персоналу</td><td>' + (max_eq) + '</td></tr>'; $(this).parent().next().after($(str)); // Вызов калькулятора, чтоб посчтитал calcTopGet(); }); } var d = 1; var ob, per; // максмальное количество поситетилей по персоналу if(type == 'restaurant' || type == 'service_light' || type == 'medicine' || type == 'repair' || type == 'educational') $("td.title:contains('Количество посетителей')").next().each(function() { var str = this.innerHTML; per = str.match(/\d[.\s\d]*(?=)/g); per = [per[0].replace(/[^\d\.]/g,''), per[1].replace(/[^\d\.]/g,'')]; var pos = per[0]; ob = $("td:contains('Количество оборудования')").next().text().replace(' ',''); ob = ob.match(/\d[.\s\d]*(?=)/g); ob = [ob[0].replace(/[^\d\.]/g,''), ob[1].replace(/[^\d\.]/g,'')]; var posMax = per[1]; perMax = ob[1]; var spec = $("td.title:contains('Специализация')").next().text(); switch(spec) { case('Фитнес'): case('Йога'): case('Бодибилдинг'): case('Группы здоровья'): case('Профессиональный спорт'): case('Скалолазание'): d = 5; break; case('Танцы'): d = 5; break; case('Прачечная'): case('Химчистка'): case('Прачечная самообслуживания'): d = 10; break; case('Косметический салон'): case('Парикмахерская'): case('Центр народной медицины'): case('Стоматологическая клиника'): case('Диагностический центр'): case('Поликлиника'): case('Больница'): case('Кардиологическая клиника'): case('Группы подготовки к школе'): case('Детский сад'): case('Ясли'): case('Студия детского творчества'): default: d = 1; } perMax = perMax/d; var persKol = parseInt( $("td:contains('Количество сотрудников')").next().text().replace(/\s/g,'') ); var maxPer = persKol*(posMax/perMax); var s = '<br>Макс. по персоналу: ' + maxPer; s += '<br>Посещаемость: ' + ( procVal(maxPer, pos) ) + '%'; this.innerHTML = str + s; }); /////////////////////////////////////////////////////////////////////////// //function getThousandsSplitted(val) //возвращает аргумент с разделением пробелами тысяч ///////////////////////////////////////////////////////////////////////////// function getThousandsSplitted(val) { return val.toString().replace(/\B(?=(\d{3})+(?!\d))/g, " "); }//end getThousandsSplitted() /////////////////////////////////////////////////////////////////////////// //function leaveDigitsAndDot(val) //удаляет из строки все символы, кроме цифр и точек ///////////////////////////////////////////////////////////////////////////// function leaveOnlyDigitsAndDots(str) { return str.replace(/[^\d\.]/g,''); }//end leaveDigitsAndDot() /////////////////////////////////////////////////////////////////////////// //function f2(val) //возвращает аргумент округлённым до 2-го знака ///////////////////////////////////////////////////////////////////////////// function f2(val){ return Math.floor(100*val)/100; }//end f2() /////////////////////////////////////////////////////////////////////////// //function getPlayerQual() //возвращает квалификацию игрока ///////////////////////////////////////////////////////////////////////////// function getPlayerQual(){ return parseInt($('a:contains("Квалификация игрока")').parent().next().text()); }//end getPlayerQual() /////////////////////////////////////////////////////////////////////////// //function calcPersonalTop3(q, type) // q - квалификация игрока // //вычисляет максимальное кол-во работающих на предприятиях отрасли для заданной квалификации игрока (топ-3) ///////////////////////////////////////////////////////////////////////////// function calcPersonalTop3( q, type){ return ((2*q*q + 6*q)*getK3(type)); }//end calcPersonalTop3() /////////////////////////////////////////////////////////////////////////// //function calcPersonalTop1(q, qp,type) // q - квалификация игрока // qp - квалификация персонала //вычисляет максимальное кол-во работающих с заданной квалификацией на предприятии для заданной квалификации игрока (топ-1) ///////////////////////////////////////////////////////////////////////////// function calcPersonalTop1(q, qp,type){ if((mode=='Crocuta')&&(type=='office')){return Math.floor(14*q*q/Math.pow(1.4, qp)/4.15);} return Math.floor(0.2*getK1(type)*14*q*q/Math.pow(1.4, qp)); }//end calcPersonalTop1() /////////////////////////////////////////////////////////////////////////// //function calcQualTop1(q, p, type) // q - квалификация игрока // p - численность персонала //вычисляет максимальное квалификацию работающих при заданных их численности и квалификации игрока (обратна calcPersonalTop1()) ///////////////////////////////////////////////////////////////////////////// function calcQualTop1(q, p, type){ if(p==0) return 0.00; if((mode=='Crocuta')&&(type=='office')){return Math.log(14/4.15*q*q/p)/Math.log(1.4);} return Math.log(0.2*14*getK1(type)*q*q/p)/Math.log(1.4); }//end calcQualTop1() /////////////////////////////////////////////////////////////////////////// //function calcTechMax(q) // q - квалификация игрока // //вычисляет максимальный уровень технологии для заданной квалификации игрока ///////////////////////////////////////////////////////////////////////////// function calcTechMax(q){ return Math.floor(10*Math.pow(q/0.0064, 1/3))/10 ; }//end calcTechMax() /////////////////////////////////////////////////////////////////////////// //function calcEqQualMax(q) // qp - квалификация игрока // //вычисляет максимальное качество оборудования/животных для заданной квалификации персонала ///////////////////////////////////////////////////////////////////////////// function calcEqQualMax( qp ){ return Math.floor(100*Math.pow(qp, 1.5))/100 ; }//end calcEqQualMax /////////////////////////////////////////////////////////////////////////// //function getPersonalTotal() //возвращает суммарное кол-во работающих в отрасли (топ-3) ///////////////////////////////////////////////////////////////////////////// function getPersonalTotal(){ if (new_interface) { return parseInt($("#all_staff").text().replace(/\s+/g, '')); } else { return parseInt($('td.title:contains("Суммарное")').next().text().replace(/\s/g,'')); } }//end getPersonalTotal() /////////////////////////////////////////////////////////////////////////// //function getType() //возвращает тип в виде строки (по скрипту, выводящему изображение) ///////////////////////////////////////////////////////////////////////////// function getType(){ let type = $("div.title script").text().split('\n')[3]; type = type.substring(type.indexOf('bgunit-')+'bgunit-'.length, type.length-5); return type; }//end getType() /////////////////////////////////////////////////////////////////////////// //getK1(type) //возвращает к для расчётов нагрузки по типу для топ-1 /////////////////////////////////////////////////////////////////////////// function getK1(type) { switch(type) { case('shop'): case('restaurant'): case('lab'): return 5; break; case('workshop'): if (/anna/.test(window.location.href)) { return 100; break; } else { return 50; break; } case('mill'): return 5; break; case('sawmill'): return 12.5; break; case('animalfarm'): return 7.5; break; case('medicine'): case('fishingbase'): return 12.5; break; case('farm'): return 20; break; case('orchard'): return 15; break; case('mine'): if (/anna/.test(window.location.href)) { return 50; break; } else { return 100; break; } case('office'): //if(mode=='Crocuta') return return 1; break; case('service_light'): return 1.5; break; case('power'): return 75.0; break; case('repair'): return 2.5; break; case('fuel'): return 2.5; break; case('educational'): return 1.5; break; case('it'): return 1; break; case('villa'): case('warehouse'): case('unknown'): default: return 0; }//end switch }//end getType() /////////////////////////////////////////////////////////////////////////// //getK(3type) //возвращает к для расчётов нагрузки по типу для топ-3 /////////////////////////////////////////////////////////////////////////// function getK3(type) { switch(type) { case('shop'): case('restaurant'): case('lab'): return 5; break; case('workshop'): if (/anna/.test(window.location.href)) { return 100; break; } else { return 50; break; } case('mill'): if (/anna/.test(window.location.href)) { return 100; break; } return 50; break; case('sawmill'): if (/anna/.test(window.location.href)) { return 100; break; } return 50; break; case('animalfarm'): return 7.5; break; case('medicine'): case('fishingbase'): return 12.5; break; case('farm'): return 20; break; case('orchard'): return 15; break; case('mine'): if (/anna/.test(window.location.href)) { return 50; break; } else { return 100; break; } case('office'): //if(mode=='Crocuta') return return 1; break; case('service_light'): return 1.5; break; case('power'): return 75.0; break; case('repair'): return 2.5; break; case('fuel'): return 2.5; break; case('educational'): return 1.5; break; case('it'): return 1; break; case('villa'): case('warehouse'): case('unknown'): default: return 0; }//end switch }//end getType() /////////////////////////////////////////////////////////////////////////// //getPersonal(type) //возвращает кол-во работников на предприятии (по типу) /////////////////////////////////////////////////////////////////////////// function getPersonal(type) { var temp = getPersonal_1(type); if(temp=='' || temp== -1) return (-1); //error return parseInt($('td:contains(' + temp + ')').next().html().replace(/\s+/g, '')); }//end getPersonal() function getPersonal_1(type) { var temp; switch(type) { case('lab'): temp='Количество учёных'; break; case('workshop'): case('mill'): case('mine'): case('fishingbase'): case('sawmill'): temp='Количество рабочих'; break; case('animalfarm'): temp='Количество раб'; break; case('orchard'): temp='Количество раб'; break; case('farm'): temp='Количество раб'; break; case('medicine'): case('office'): case('shop'): case('restaurant'): case('service_light'): temp='Количество сотрудников'; break; case('power'): temp='Количество рабочих'; break; case('repair'): temp='Количество сотрудников'; break; case('fuel'): temp='Количество сотрудников'; break; case('educational'): temp='Количество сотрудников'; break; case('it'): temp='Количество сотрудников'; break; case('villa'): case('warehouse'): case('unknown'): default: temp=''; break; }//end switch if(temp=='') return (-1); //error return temp; }//end getPersonal_1() /////////////////////////////////////////////////////////////////////////// //function procVal(num, val) //возвращает процент от val по отношению к nun ///////////////////////////////////////////////////////////////////////////// function procVal(num, val){ return Math.round(val/(num/100)*100)/100; }//end procVal() /////////////////////////////////////////////////////////////////////////// //function saveAverageCityInfo() //сохраняет среднегородские данные в локальное хранилище ///////////////////////////////////////////////////////////////////////////// function saveAverageCityInfo() { //if (!$("td:contains('средняя зарплата в городе')").length || // typeof(localStorage) === "undefined") return; //var cityName = $("abbr").text().replace(/\s+/g, ''); var avgSalary; $("td:contains('В среднем по городу')").next().each(function() { var str = $(this).text(); str = str.substr(0, str.indexOf(" в")).replace(/[^\d\.]/g, ''); //avgSalary = parseFloat($(this).text().replace(/[^\d\.]/g, '')); avgSalary = parseFloat(str); }); //var avgQual; //$("span:contains('в среднем по городу')").each(function() { // var str = $(this).text(); // str = str.substr(0, str.indexOf(",")).replace(/[^\d\.]/g, ''); // avgQual = parseFloat(str); //}); //console.log("city=" + cityName + ", sal=" + avgSalary + ", qual=" + avgQual); //localStorage.setItem("q" + cityName, avgQual.toString()); //var type = $("div.headerContainer").children().eq(0).prop('src'); //var lastSlashPos = type.lastIndexOf("/"); //type = type.substr(lastSlashPos + 1, type.length - lastSlashPos - 1); //type = type.substr(0, type.indexOf(".")); //console.log("type = " + type); //localStorage.setItem(cityName + ":" + type, avgSalary.toString()); //console.log("city=" + cityName + ", salary saved=" + localStorage.getItem(cityName)); }//end saveAverageCityInfol() /*********************************************************************************/ })(window); if(window.top == window) { var style = document.createElement("style"); style.textContent = '.scriptIks_imp { border: 2px solid #708090; border-radius: 5px; background: #e1e1e1; text-align: right; }' +'\n.scriptIks_cur { cursor: pointer; }' +'\n.scriptIks_exitDiv { position: absolute; margin: 0; padding: 0; right: 0; top: 0; }' +'\n.scriptIks_crug { position: absolute; right: 0; top: 0; width: 14px; height: 14px; border: 4px solid gray; border-radius: 50%; padding: 0; }' +'\n.scriptIks_crug1 { position: absolute; right: 0; top: 0; width: 14px; height: 14px; border: 4px solid gray; border-radius: 0 50% 0 50%; padding: 0; background:white; }' +'\n.scriptIks_exit { position: absolute; margin: 0; padding: 0; right: 5px; top: 1px; font-size: 18px; color: darkred; }' +'\n.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); }'; document.documentElement.appendChild(style); }