- javascript:
- {
- var Data = {
- cache: true,
- cacheTime: 30,
- removedPlayers: "",
- firstLineTroops: "Wioska,pik,miecz,topór,itp...,",
- showFirstLineTroops: false,
- showNicknamesTroops: false,
- firstLineDeff: "Wioska,miejsce,pik,miecz,topór,itp...,",
- showFirstLineDeff: false,
- showNicknamesDeff: false,
- };
- function process() {
- const params = new URLSearchParams(location.search);
- if (
- params.get("screen") !== "ally" ||
- (params.get("mode") !== "members_defense" &&
- params.get("mode") !== "members_troops")
- ) {
- UI.ErrorMessage("Przejdz do Plemie -> Czlonkowie -> Wojska/Obrona", "2e3");
- } else {
- const cacheTime = Data.cacheTime * 60 * 1000;
- let output = "";
- let lackAccessPlayers = "";
- let players = [];
- let scriptName;
- let firstLine;
- let showFirstLine;
- let showNicknames;
- let mode;
- if (params.get("mode") === "members_troops") {
- scriptName = "Zbiorka Wojska";
- firstLine = Data.firstLineTroops;
- showFirstLine = Data.showFirstLineTroops;
- showNicknames = Data.showNicknamesTroops;
- mode = "troops";
- } else {
- scriptName = "Zbiorka Deffa";
- firstLine = Data.firstLineDeff;
- showFirstLine = Data.showFirstLineDeff;
- showNicknames = Data.showNicknamesDeff;
- mode = "defence";
- }
- // Adds players from current html to get array with players nicknames and ids
- const AllPlayersList = () => {
- Array.from(
- document.querySelector("#ally_content .input-nicer").options
- ).forEach((option_element, index) => {
- if (index !== 0) {
- players.push({
- id: option_element.value,
- nick: option_element.text.trim(),
- disabled: option_element.disabled,
- });
- }
- });
- };
- // Uses some methods to get all stuff from table with units from current html player page
- const AddPlayerPageToOutput = (playerPageDocument, playerNick, useNick) => {
- const tableRows = playerPageDocument.querySelectorAll(
- ".table-responsive .vis tr"
- );
- let noAccess = false;
- let playerOutputTroops = "";
- let coord = "";
- tableRows.forEach((oneVillageNode, rowIndex) => {
- if (rowIndex === 0) {
- return;
- }
- if (output !== "" || playerOutputTroops !== "") {
- playerOutputTroops += "\r\n";
- }
- if (useNick) {
- playerOutputTroops += playerNick + ",";
- }
- let unitRow = oneVillageNode.querySelectorAll("td");
- unitRow.forEach((col, colIndex) => {
- let value = String(col.innerHTML).trim();
- if (value === "?") {
- noAccess = true;
- }
- if (colIndex === 0) {
- if (value.includes("|")) {
- value = value.split("").reverse().join("");
- const coordIndex1 = value.search("[)]");
- const coordIndex2 = value.search("[(]");
- value = value.slice(coordIndex1 + 1, coordIndex2);
- value = value.split("").reverse().join("");
- coord = value;
- } else {
- playerOutputTroops += coord + ",";
- }
- }
- playerOutputTroops += value + ",";
- });
- });
- if (noAccess) {
- lackAccessPlayers += `<p style="margin:0">${playerNick}</p>`;
- } else {
- output += playerOutputTroops;
- }
- };
- // To add player_id to current path
- const GetURL = (id) => {
- const params = new URLSearchParams(window.location.search);
- params.set("player_id", id);
- return ""
- .concat(window.location.origin)
- .concat(window.location.pathname, "?")
- .concat(params.toString());
- };
- // Used to parse string from fetch func to html
- const ConvertToHTML = (pageText) => {
- const parser = new DOMParser();
- const playerPageDocument = parser.parseFromString(pageText, "text/html");
- return playerPageDocument.body;
- };
- // 0. If cacheTime smaller than actual Time, use localStorage output.
- // 1. Use AllPlayersList to get Players.
- // 2. If no access to a player, his nick goes to lackAccess variable.
- // 3. ForLoop players with access.
- // 3.1 Fetch a player page.
- // 3.2 Add his troops to output -> AddPlayerPageToOutput.
- // 4. Add results to localStorage.
- // 5. Dialog with results.
- async function RenderPlayerTroops() {
- const removedPlayers = Data.removedPlayers.split(";");
- const today = new Date().getTime();
- const afterCacheTime = today + cacheTime;
- const storageDate = localStorage.getItem("troops-storageDate" + mode);
- let parseTime;
- if (today < storageDate && Data.cache) {
- output = localStorage.getItem("troops-output" + mode);
- lackAccessPlayers = localStorage.getItem(
- "troops-lackAccessPlayers" + mode
- );
- parseTime = new Date(
- parseInt(localStorage.getItem("troops-parseTime" + mode))
- );
- parseTime = parseTime.toLocaleTimeString();
- } else {
- parseTime = new Date(today);
- parseTime = parseTime.toLocaleTimeString();
- AllPlayersList();
- players
- .filter((player) => {
- return player.disabled === true;
- })
- .map((player) => {
- let nick = player.nick;
- const index = nick.search("[(]");
- nick = nick.slice(0, index).trim();
- lackAccessPlayers += `<p style="margin:0">${nick}</p>`;
- });
- await Promise.all(
- players
- .filter((player) => {
- return (
- player.disabled === false &&
- !removedPlayers.includes(player.nick)
- );
- })
- .map(async (player) => {
- const response = await fetch(GetURL(player.id));
- const html = await response.text();
- const playerPageDocument = ConvertToHTML(html);
- const useNick = showNicknames ? true : false;
- AddPlayerPageToOutput(playerPageDocument, player.nick, useNick);
- })
- );
- localStorage.setItem("troops-parseTime" + mode, String(today));
- localStorage.setItem("troops-storageDate" + mode, afterCacheTime);
- localStorage.setItem("troops-output" + mode, output);
- localStorage.setItem(
- "troops-lackAccessPlayers" + mode,
- lackAccessPlayers
- );
- }
- Dialog.show(
- "scriptFinalContent",
- `<h2 style="width:600px;">${scriptName}:</h2>
- ${
- Data.removedPlayers === ""
- ? ""
- : `<p>NieuwzglÄdnieni: ${Data.removedPlayers}</p>`
- }${
- lackAccessPlayers === ""
- ? ``
- : `<h4>Uwaga, czesciowy lub calkowity brak podgladu:</h4>` +
- lackAccessPlayers
- }<textarea rows="15" style="width:95%;margin-top:15px;margin-bottom:25px;">${
- showFirstLine ? firstLine + "\r\n" : ""
- }${output}</textarea>
- <p style="text-align:right"><small>Wygenerowano ${parseTime}.</small></p>`
- );
- }
- RenderPlayerTroops();
- }
- }
- process();
- }