2020-08-05 19:10:42 +00:00
|
|
|
import InADayParser from './libs/InADayParser';
|
2020-08-06 10:50:39 +00:00
|
|
|
import getTranslations from './i18n/inADayTribeRankingGenerator';
|
2020-08-06 10:35:49 +00:00
|
|
|
import wait from './utils/wait';
|
2020-08-05 19:10:42 +00:00
|
|
|
|
|
|
|
// ==UserScript==
|
2020-08-14 11:53:56 +00:00
|
|
|
// @name 'In A Day' tribe ranking generator
|
2020-08-05 19:10:42 +00:00
|
|
|
// @namespace https://github.com/tribalwarshelp/scripts
|
|
|
|
// @updateURL https://raw.githubusercontent.com/tribalwarshelp/scripts/master/dist/inADayTribeRankingGenerator.js
|
|
|
|
// @downloadURL https://raw.githubusercontent.com/tribalwarshelp/scripts/master/dist/inADayTribeRankingGenerator.js
|
2021-01-01 17:03:36 +00:00
|
|
|
// @version 0.2.1
|
2020-08-14 11:53:56 +00:00
|
|
|
// @description 'In A Day' tribe ranking generator
|
2021-01-01 17:03:36 +00:00
|
|
|
// @author Kichiyaki https://dawid-wysokinski.pl/
|
2020-08-06 10:35:49 +00:00
|
|
|
// @match *://*/game.php*screen=ranking*mode=in_a_day*
|
2020-08-05 19:10:42 +00:00
|
|
|
// @grant none
|
|
|
|
// @run-at document-end
|
|
|
|
// ==/UserScript==
|
|
|
|
|
|
|
|
const TRIBE_CONTAINER_ID = 'iad_tribes';
|
|
|
|
const LIMIT_INPUT_ID = 'iad_limit';
|
2020-08-06 10:50:39 +00:00
|
|
|
const translations = getTranslations();
|
2020-08-05 19:10:42 +00:00
|
|
|
|
|
|
|
const addTribe = () => {
|
|
|
|
const container = document.querySelector('#' + TRIBE_CONTAINER_ID);
|
|
|
|
const div = document.createElement('div');
|
|
|
|
div.innerHTML = `
|
2020-08-06 10:50:39 +00:00
|
|
|
<label>${translations.tribe}: </label>
|
2020-08-05 19:10:42 +00:00
|
|
|
<input type="text" required />
|
2020-08-06 10:50:39 +00:00
|
|
|
<button type="button">${translations.delete}</button>
|
2020-08-05 19:10:42 +00:00
|
|
|
`;
|
|
|
|
div.querySelector('button').addEventListener('click', () => {
|
|
|
|
if (container.children.length > 1) {
|
|
|
|
div.remove();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
container.appendChild(div);
|
|
|
|
};
|
|
|
|
|
|
|
|
const handleFormSubmit = async (e) => {
|
|
|
|
e.preventDefault();
|
|
|
|
const limit = parseInt(document.querySelector('#' + LIMIT_INPUT_ID).value);
|
|
|
|
const tribes = [];
|
|
|
|
const type =
|
|
|
|
new URLSearchParams(window.location.search).get('type') || 'kill_att';
|
|
|
|
document
|
|
|
|
.querySelectorAll('#' + TRIBE_CONTAINER_ID + ' input')
|
|
|
|
.forEach((el) => {
|
|
|
|
if (el.value) tribes.push(el.value.trim());
|
|
|
|
});
|
|
|
|
|
|
|
|
let players = [];
|
|
|
|
let page = 0;
|
|
|
|
while (players.length < limit) {
|
|
|
|
Dialog.show(
|
|
|
|
'iad_loading',
|
2020-08-06 10:50:39 +00:00
|
|
|
`${translations.loaded}: <strong>${players.length}/${limit}</strong>`
|
2020-08-05 19:10:42 +00:00
|
|
|
);
|
|
|
|
try {
|
|
|
|
const response = await fetch(
|
|
|
|
TribalWars.buildURL('', {
|
|
|
|
screen: 'ranking',
|
|
|
|
mode: 'in_a_day',
|
|
|
|
type,
|
|
|
|
offset: page * 25,
|
|
|
|
})
|
|
|
|
);
|
|
|
|
const html = await response.text();
|
|
|
|
const parser = new InADayParser(html, {
|
|
|
|
tribes,
|
|
|
|
});
|
|
|
|
if (parser.trs.length !== 26) break;
|
|
|
|
players = [...players, ...parser.parse()];
|
|
|
|
page++;
|
2020-08-06 10:35:49 +00:00
|
|
|
await wait(200);
|
2020-08-05 19:10:42 +00:00
|
|
|
} catch (error) {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-08-06 10:50:39 +00:00
|
|
|
if (players.length > limit) {
|
|
|
|
players = players.slice(0, limit);
|
|
|
|
}
|
|
|
|
|
2020-08-05 19:10:42 +00:00
|
|
|
Dialog.show(
|
|
|
|
'iad_result',
|
|
|
|
`
|
|
|
|
<textarea cols=30 rows=8 readonly>[table]
|
2020-08-06 10:50:39 +00:00
|
|
|
[**][||]${translations.player}[||]${translations.tribe}[||]${
|
|
|
|
translations.rank
|
|
|
|
}[||]${translations.score}[||]${translations.date}[/**]
|
2020-08-05 19:10:42 +00:00
|
|
|
${players
|
|
|
|
.map((player, index) => {
|
2020-08-06 10:35:49 +00:00
|
|
|
return `[*]${index + 1}.[|][player]${player.name}[/player][|][ally]${
|
2020-08-05 19:10:42 +00:00
|
|
|
player.tribe
|
|
|
|
}[/ally][|]${player.rank}[|]${player.score.toLocaleString()}[|]${
|
|
|
|
player.date
|
|
|
|
}`;
|
|
|
|
})
|
|
|
|
.join('\n')}
|
|
|
|
[/table]</textarea>
|
|
|
|
`
|
|
|
|
);
|
|
|
|
};
|
|
|
|
|
|
|
|
const renderUI = () => {
|
|
|
|
const addButtonID = 'iad_add';
|
|
|
|
|
|
|
|
const div = document.createElement('div');
|
|
|
|
const html = `
|
|
|
|
<form>
|
|
|
|
<div id="${TRIBE_CONTAINER_ID}">
|
|
|
|
</div>
|
|
|
|
<div>
|
|
|
|
<label>Limit: </label>
|
|
|
|
<input id="${LIMIT_INPUT_ID}" type="number" min="1" value="10" required />
|
|
|
|
</div>
|
2020-08-06 10:50:39 +00:00
|
|
|
<button type="submit">${translations.generate}</button>
|
|
|
|
<button id="${addButtonID}" type="button">${translations.addTribe}</button>
|
2020-08-05 19:10:42 +00:00
|
|
|
</form>
|
|
|
|
`;
|
|
|
|
div.innerHTML = html;
|
|
|
|
document
|
|
|
|
.querySelector('#content_value > table > tbody > tr > td:nth-child(2)')
|
|
|
|
.prepend(div);
|
|
|
|
|
|
|
|
div.querySelector('form').addEventListener('submit', handleFormSubmit);
|
|
|
|
div.querySelector('#' + addButtonID).addEventListener('click', addTribe);
|
|
|
|
|
|
|
|
addTribe();
|
|
|
|
};
|
|
|
|
|
|
|
|
(function () {
|
|
|
|
try {
|
|
|
|
renderUI();
|
|
|
|
} catch (error) {
|
|
|
|
console.log(`'In A Day' Tribe Ranking Generator`, error);
|
|
|
|
}
|
|
|
|
})();
|