try to take over the world!
当前为
// ==UserScript==
// @name ClanEventHelper
// @namespace http://tampermonkey.net/
// @version 0.1.5
// @description try to take over the world!
// @author You
// @include /^https{0,1}:\/\/((www|qrator)\.heroeswm\.ru|178\.248\.235\.15)\/clan_info.+/
// @grant unsafeWindow
// ==/UserScript==
(function (window, undefined) {
let w;
if (typeof unsafeWindow !== undefined) {
w = unsafeWindow;
} else {
w = window;
}
if (w.self !== w.top) {
return;
}
let isInCW = document.querySelector("body > center > table > tbody > tr > td > table:nth-child(2) > tbody > tr:nth-child(1) > td:nth-child(2) > img") == null;
let tds = document.querySelector("body > center > table:nth-child(2) > tbody > tr > td > table:nth-child(2) > tbody > tr:nth-child(1)").querySelectorAll("td").length;
if (isInCW && tds === 5 || tds === 6){
setJS();
setPolzynok();
setStyle();
}
function setJS() {
let script = document.createElement('script');
script.type = 'text/javascript';
script.innerHTML = `
class ClanMember {
constructor(id, nick, cl, eventPoints) {
this.id = id;
this.nick = nick;
this.cl = cl;
this.eventPoints = eventPoints;
}
}
let eventMaxWave = 50;
let tempEventMaxWave = JSON.parse(JSON.stringify(eventMaxWave));
let clanMembers = [];
let clanMembersByCL = new Map();
fillClanMembers();
setEventMaxWave();
fillClanMembersByCl();
addContainerToDOM();
addTableToDOM();
function updateTable() {
let rng = document.getElementById('bestInput'); //rng - это Input
let p = document.getElementById('one'); // p - абзац
tempEventMaxWave = rng.value;
p.innerHTML = "До волны: " + rng.value;
removeElement("members-table");
addTableToDOM();
}
function addContainerToDOM() {
let s = \`<center><div id="members-container" style="width:80%; background: white; border: 1px black solid"></div></center>\`;
document.querySelector("body > center > table > tbody > tr > td > table:nth-child(1)").insertAdjacentHTML('afterend', s)
}
function addTableToDOM() {
let s = \`<table id="members-table" cellpadding="5" class="ololo">\`;
s += \`<thead class="bestP">
<td><div style="">БУ</div></td>
<td><div style="">Топ рез у</div></td>
<td><div style="">% от всех на БУ</div></td>
<td><div style="">Тянущие клан на дно</div></td>
</thead>\`;
for (let [key, value] of clanMembersByCL.entries()) {
let membersWithMaxWave = getAllWithMaxWave(value);
let membersWithNoMaxWave = getAllWithNoMaxWave(value);
let percetageWithMaxWave = (membersWithMaxWave / value.length) * 100;
s += \`<tr>
<td>\` + key + \`[\` + value.length + \`шт.]</td>
<td>\` + membersWithMaxWave + \` человеков </td>
<td>\` + percetageWithMaxWave.toFixed(2) + \`% </td>
<td>\` + arrayToString(membersWithNoMaxWave) + \` </td>
</tr>\`
}
let membersWithMaxWave = getAllWithMaxWave(clanMembers);
let lost = getAllWithNoMaxWaveLost(clanMembers);
let percetageWithMaxWave = (membersWithMaxWave / clanMembers.length) * 100;
s += \`<tr>
<td>Всего:</td>
<td>\` + membersWithMaxWave + \` человеков</td>
<td>\` + percetageWithMaxWave.toFixed(2) + \`% </td>
<td>Из-за <b>?#A*&%!</b> клан потерял <b style='color: red'>\` + lost + \`</b> очков</td>
</tr>\`;
s += \`</table>\`;
document.getElementById("members-container").insertAdjacentHTML('beforeend', s)
}
function fillClanMembers() {
let trs = document.querySelector("body > center > table > tbody > tr > td > table:nth-child(2) > tbody").querySelectorAll("tr");
for (let i = 0; i < trs.length; i++) {
clanMembers.push(createClanMember(trs[i]))
}
}
function setEventMaxWave() {
let max = clanMembers[0].eventPoints;
for (let i = 1; i < clanMembers.length; i++) {
if (max < clanMembers[i].eventPoints) {
max = clanMembers[i].eventPoints
}
}
eventMaxWave = max;
}
function fillClanMembersByCl() {
for (let i = 5; i < 24; i++) {
let tempClanMembersByCL = getClanMembersByCL(i);
if (tempClanMembersByCL.length !== 0) {
clanMembersByCL.set(i, tempClanMembersByCL);
}
}
}
function createClanMember(tr) {
let clanMember = new ClanMember();
let isInCW = document.querySelector("body > center > table > tbody > tr > td > table:nth-child(2) > tbody > tr:nth-child(1) > td:nth-child(2) > img") == null;
let startTd = 3;
if (isInCW) {
startTd = 2
}
clanMember.id = tr.querySelector("td:nth-child("+ startTd +") > a").getAttribute("href");
clanMember.nick = tr.querySelector("a.pi").innerText;
clanMember.cl = parseInt(tr.querySelector("td:nth-child("+ (startTd+1)+")").innerText);
clanMember.eventPoints = parseInt(tr.querySelector("td:nth-child("+(startTd+3) +")").innerText.trim());
clanMember.eventPoints = isNaN(clanMember.eventPoints) ? 0 : clanMember.eventPoints;
return clanMember;
}
function getClanMembersByCL(cl) {
let members = [];
for (let i = 0; i < clanMembers.length; i++) {
if (clanMembers[i].cl === cl) {
members.push(clanMembers[i])
}
}
return members;
}
function getAllWithMaxWave(members) {
let count = 0;
for (let i = 0; i < members.length; i++) {
if (members[i].eventPoints >= tempEventMaxWave) {
count++
}
}
return count;
}
function getAllWithNoMaxWave(members) {
members.sort((a, b) => (a.eventPoints > b.eventPoints) ? 1 : ((b.eventPoints > a.eventPoints) ? -1 : 0));
let membersTemp = [];
for (let i = 0; i < members.length; i++) {
if (members[i].eventPoints < tempEventMaxWave) {
membersTemp.push("<a style='text-decoration: none;' href=\\""+members[i].id + "\\"><b>"+members[i].nick + "</b></a> : <b style='color: red'>" + members[i].eventPoints + "</b>")
}
}
return membersTemp;
}
function getAllWithNoMaxWaveLost(members) {
members.sort((a, b) => (a.eventPoints > b.eventPoints) ? 1 : ((b.eventPoints > a.eventPoints) ? -1 : 0));
let lost = 0;
for (let i = 0; i < members.length; i++) {
if (members[i].eventPoints < tempEventMaxWave) {
lost += eventMaxWave - members[i].eventPoints;
}
}
return lost;
}
function arrayToString(array) {
if (array.length === 0) {
return "Таких нет, все красавчики."
}
let str = "";
for (let i = 0; i < array.length; i++) {
str += array[i];
if (i < array.length - 1) {
str += "; "
}
}
return str;
}
function removeElement(id) {
let elem = document.getElementById(id);
return elem.parentNode.removeChild(elem);
}
`;
document.getElementsByTagName('head')[0].appendChild(script);
}
function setPolzynok() {
console.log("eventMaxWave",tempEventMaxWave);
let myDiv = `
<input id="bestInput" class ="myPolzynok" type="range" min="1" max="${eventMaxWave}" step="1" value="${eventMaxWave}" oninput="updateTable()">
</br>
<p class="bestP" id="one">До волны: ${tempEventMaxWave}</p>
`;
document.getElementById("members-container").insertAdjacentHTML("afterbegin",
myDiv);
}
function setStyle() {
let style = document.createElement('style');
style.type = 'text/css';
style.innerHTML = `
.myPolzynok {
-webkit-appearance: none;
margin: 18px 0;
width: 40%;
}
table.ololo td {
text-align: center;
}
table.ololo {
border-collapse: collapse;
}
table.ololo td {
border: 2px solid #c0deff;
}
table.ololo tr:first-child td {
border-top: 0;
}
table.ololo tr td:first-child {
border-left: 0;
}
table.ololo tr:last-child td {
border-bottom: 0;
}
table.ololo tr td:last-child {
border-right: 0;
}
.myPolzynok:focus {
outline: none;
}
.myPolzynok:focus {
outline: none;
}
.myPolzynok::-webkit-slider-runnable-track {
width: 100%;
height: 8.4px;
cursor: pointer;
animate: 0.2s;
box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
background: #3071a9;
border-radius: 1.3px;
border: 0.2px solid #010101;
}
.myPolzynok::-webkit-slider-thumb {
box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
border: 1px solid #000000;
height: 36px;
width: 16px;
border-radius: 3px;
background: #ffffff;
cursor: pointer;
-webkit-appearance: none;
margin-top: -14px;
}
.myPolzynok:focus::-webkit-slider-runnable-track {
background: #367ebd;
}
.myPolzynok::-moz-range-track {
width: 100%;
height: 8.4px;
cursor: pointer;
animate: 0.2s;
box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
background: #3071a9;
border-radius: 1.3px;
border: 0.2px solid #010101;
}
.myPolzynok::-moz-range-thumb {
box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
border: 1px solid #000000;
height: 36px;
width: 16px;
border-radius: 3px;
background: #ffffff;
cursor: pointer;
}
.myPolzynok::-ms-track {
width: 100%;
height: 8.4px;
cursor: pointer;
animate: 0.2s;
background: transparent;
border-color: transparent;
border-width: 16px 0;
color: transparent;
}
.myPolzynok::-ms-fill-lower {
background: #2a6495;
border: 0.2px solid #010101;
border-radius: 2.6px;
box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
}
.myPolzynok::-ms-fill-upper {
background: #3071a9;
border: 0.2px solid #010101;
border-radius: 2.6px;
box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
}
.myPolzynok::-ms-thumb {
box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
border: 1px solid #000000;
height: 36px;
width: 16px;
border-radius: 3px;
background: #ffffff;
cursor: pointer;
}
.myPolzynok:focus::-ms-fill-lower {
background: #3071a9;
}
.myPolzynok:focus::-ms-fill-upper {
background: #367ebd;
}
.bestP {
color: red;
font-size: 20px !important;
text-shadow: 1px 0 0 #000, 0 -1px 0 #000, 0 1px 0 #000, -1px 0 0 #000;
}
thead.bestP td {
color: red;
border-bottom:1px solid black !important;
border-top:1px solid black !important;
font-size: 20px !important;
text-shadow: 1px 0 0 #000, 0 -1px 0 #000, 0 1px 0 #000, -1px 0 0 #000;
}
`;
document.getElementsByTagName('head')[0].appendChild(style);
}
})(window);