Greasy Fork is available in English.
В протоколе передач добавляет цену за бой, общую сумму дивидендов за акции предприятий. В протоколе кузнецов в шапке показывает время завершения текущего ремонта
// ==UserScript==// @name HWH Price per battle in transfers// @namespace Zeleax// @description В протоколе передач добавляет цену за бой, общую сумму дивидендов за акции предприятий. В протоколе кузнецов в шапке показывает время завершения текущего ремонта// @include /https?:\/\/(www.heroeswm.ru|178.248.235.15|www.lordswm.com|my.lordswm.com)\/(pl_transfers.php\?id=.*)/// @version 1.6// @grant none// @license MIT// ==/UserScript==var body = document.body.innerHTML;var regx = /\d{2}-\d{2}-\d{2} \d{2}:\d{2}:/g; // времяvar pos=[]; // начало каждой строкиvar res, s, sfind, ttime;var finishRepairTime;var foundFirstRepair=false;var curHWMdate=GetHWMDate();var dividend_flag=0;var dividendLastRowId=-1;while(res = regx.exec(body)) pos.push(res.index);var arrbody=[]; // строкиvar dividend_sum=0;for(var i=0; i<pos.length; i++){s =(i<pos.length) ? body.substring(pos[i], pos[i+1]) : body.substring(pos[i]);res = /на (\d+) боев .+ за (\d+) Золото/.exec(s);if(res && res[1]>1) {sfind='за '+res[2]+' Золото';s=s.replace(sfind, sfind+' ('+Math.round(res[2] / res[1] *10)/10+'/бой)');}if (!foundFirstRepair){res = /Получено за ремонт: (\d+) \((\d+)%\)/.exec(s.toString()); // личный ремонтif(res) {var startDate= ParseHWMLogDate(s);var repairTimeMinutes=parseInt(res[1],10)*1.5/(parseInt(res[2],10));finishRepairTime=AddMinutes(startDate, repairTimeMinutes);foundFirstRepair=true;}else{res = /до (.+)\. Заработано/.exec(s.toString()); // клановый ремонтif(res) {finishRepairTime=ParseHWMLogDate2(res[1]);foundFirstRepair=true;}}if(foundFirstRepair){s=s.replace('<a ', '<a id="foundFirstRepair" ');}}arrbody.push(s);var res_dividend = /Получено (\d+) золота .+Империя.+дивиденды/.exec(s);if(res_dividend && res_dividend[1]>1) {dividend_flag=1;dividend_sum+=parseInt(res_dividend[1]);if(i==pos.length-1) {dividendLastRowId=i;}}else if(dividend_flag==1){dividend_flag=0;dividendLastRowId= i-1;}if(dividendLastRowId>=0){var brPos = arrbody[dividendLastRowId].indexOf('<br>');if(brPos>0) arrbody[dividendLastRowId]=arrbody[dividendLastRowId].slice(0, brPos) +'. ИТОГО дивидендов: '+dividend_sum+arrbody[dividendLastRowId].slice(brPos);dividend_sum=0;dividendLastRowId=-1;}}document.body.innerHTML=body.substring(0,pos[0]) + arrbody.join('');if(foundFirstRepair && curHWMdate<finishRepairTime) // идет ремонт{var el=getE('//div[contains(text(),"Протокол передач")]');if(el){var sp=document.createElement('span');sp.id='finishRepairTimeStr';sp.style="color:red;";sp.textContent=' '+DateToHWMString(finishRepairTime);sp.title="Время окончания текущего ремонта";el.appendChild(sp);}el = document.getElementById('foundFirstRepair');el.style="color: red;";}// "23-01-22 19:44 Текст" -> Datefunction ParseHWMLogDate(s){return new Date(parseInt(s.substring(6,8),10)+2000, parseInt(s.substring(3,5),10)-1, parseInt(s.substring(0,2),10), parseInt(s.substring(9,11),10), parseInt(s.substring(12,14),10));}// "2022.01.23 05:14 Текст" -> Datefunction ParseHWMLogDate2(s){return new Date(parseInt(s.substring(0,4),10), parseInt(s.substring(5,7),10)-1, parseInt(s.substring(8,10),10), parseInt(s.substring(11,13),10), parseInt(s.substring(14,16),10));}// Date + Minutesfunction AddMinutes(dt, minutes) {return new Date(dt.getTime() + minutes*60000);}// Date -> для текущей даты "05:14", для другой даты "23.01 05:14", для другого года "2022.01.23 05:14"function DateToHWMString(d){var dt=GetHWMDate();var res;if(dt.getYear()!=d.getYear()) res=DateToHWMString2(d);else {res=('0'+(d.getHours())).slice(-2)+':'+('0'+(d.getMinutes())).slice(-2); // HH:MMif(dt.getDate()!=d.getDate()) res = ('0'+d.getDate()).slice(-2)+'.'+('0'+(d.getMonth()+1)).slice(-2)+' '+ res; // dd.mm HH:MM}return res;}// Date -> "2022.01.23 05:14"function DateToHWMString2(d){return d.getFullYear()+'.'+('0'+(d.getMonth()+1)).slice(-2)+'.'+('0'+d.getDate()).slice(-2)+' '+('0'+(d.getHours())).slice(-2)+':'+('0'+(d.getMinutes())).slice(-2);}// возвращает Date для HWM (берет из часов возле значка радио)function GetHWMDate(){var r###lt;var el=getE('//td[a[contains(@href,"player.html")]]');if (el){var res = /(\d{1,2}):(\d{1,2})/.exec(el.innerText); // 22:54, 5043 onlineif(res) {var hours = parseInt(res[1],10);var timestamp=(new Date()).setHours(hours);r###lt = new Date(timestamp);var localHour=(new Date()).getHours(); // корректируем с учетом разницы часовых поясовvar diffHours=localHour-hours;if(Math.abs(diffHours)>15){if(diffHours>0) r###lt++;else r###lt--;}}}return r###lt;}function getE(xpath,el,docObj){return (docObj?docObj:document).evaluate(xpath,(el?el:(docObj?docObj.body:document.body)),null, XPathR###lt.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;}