您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
В протоколе передач добавляет цену за бой, общую сумму дивидендов за акции предприятий. В протоколе кузнецов в шапке показывает время завершения текущего ремонта
// ==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 Текст" -> Date function 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 Текст" -> Date function 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 + Minutes function 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:MM if(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 result; 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 online if(res) { var hours = parseInt(res[1],10); var timestamp=(new Date()).setHours(hours); result = new Date(timestamp); var localHour=(new Date()).getHours(); // корректируем с учетом разницы часовых поясов var diffHours=localHour-hours; if(Math.abs(diffHours)>15){ if(diffHours>0) result++; else result--; } } } return result; } function getE(xpath,el,docObj){return (docObj?docObj:document).evaluate(xpath,(el?el:(docObj?docObj.body:document.body)),null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;}