Facebook
From Rafsaf, 3 Years ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 42
  1. javascript:
  2. {
  3. var Data = {
  4.   cache: true,
  5.   cacheTime: 30,
  6.   removedPlayers: "",
  7.   firstLineTroops: "Wioska,pik,miecz,topór,itp...,",
  8.   showFirstLineTroops: false,
  9.   showNicknamesTroops: false,
  10.   firstLineDeff: "Wioska,miejsce,pik,miecz,topór,itp...,",
  11.   showFirstLineDeff: false,
  12.   showNicknamesDeff: false,
  13. };
  14. function process() {
  15.   const params = new URLSearchParams(location.search);
  16.  
  17.   if (
  18.     params.get("screen") !== "ally" ||
  19.     (params.get("mode") !== "members_defense" &&
  20.       params.get("mode") !== "members_troops")
  21.   ) {
  22.     UI.ErrorMessage("Przejdz do Plemie -> Czlonkowie -> Wojska/Obrona", "2e3");
  23.   } else {
  24.     const cacheTime = Data.cacheTime * 60 * 1000;
  25.     let output = "";
  26.     let lackAccessPlayers = "";
  27.     let players = [];
  28.     let scriptName;
  29.     let firstLine;
  30.     let showFirstLine;
  31.     let showNicknames;
  32.     let mode;
  33.     if (params.get("mode") === "members_troops") {
  34.       scriptName = "Zbiorka Wojska";
  35.       firstLine = Data.firstLineTroops;
  36.       showFirstLine = Data.showFirstLineTroops;
  37.       showNicknames = Data.showNicknamesTroops;
  38.       mode = "troops";
  39.     } else {
  40.       scriptName = "Zbiorka Deffa";
  41.       firstLine = Data.firstLineDeff;
  42.       showFirstLine = Data.showFirstLineDeff;
  43.       showNicknames = Data.showNicknamesDeff;
  44.       mode = "defence";
  45.     }
  46.  
  47.     // Adds players from current html to get array with players nicknames and ids
  48.     const AllPlayersList = () => {
  49.       Array.from(
  50.         document.querySelector("#ally_content .input-nicer").options
  51.       ).forEach((option_element, index) => {
  52.         if (index !== 0) {
  53.           players.push({
  54.             id: option_element.value,
  55.             nick: option_element.text.trim(),
  56.             disabled: option_element.disabled,
  57.           });
  58.         }
  59.       });
  60.     };
  61.  
  62.     // Uses some methods to get all stuff from table with units from current html player page
  63.     const AddPlayerPageToOutput = (playerPageDocument, playerNick, useNick) => {
  64.       const tableRows = playerPageDocument.querySelectorAll(
  65.         ".table-responsive .vis tr"
  66.       );
  67.       let noAccess = false;
  68.       let playerOutputTroops = "";
  69.       let coord = "";
  70.       tableRows.forEach((oneVillageNode, rowIndex) => {
  71.         if (rowIndex === 0) {
  72.           return;
  73.         }
  74.         if (output !== "" || playerOutputTroops !== "") {
  75.           playerOutputTroops += "\r\n";
  76.         }
  77.         if (useNick) {
  78.           playerOutputTroops += playerNick + ",";
  79.         }
  80.         let unitRow = oneVillageNode.querySelectorAll("td");
  81.         unitRow.forEach((col, colIndex) => {
  82.           let value = String(col.innerHTML).trim();
  83.           if (value === "?") {
  84.             noAccess = true;
  85.           }
  86.           if (colIndex === 0) {
  87.             if (value.includes("|")) {
  88.               value = value.split("").reverse().join("");
  89.               const coordIndex1 = value.search("[)]");
  90.               const coordIndex2 = value.search("[(]");
  91.               value = value.slice(coordIndex1 + 1, coordIndex2);
  92.               value = value.split("").reverse().join("");
  93.               coord = value;
  94.             } else {
  95.               playerOutputTroops += coord + ",";
  96.             }
  97.           }
  98.           playerOutputTroops += value + ",";
  99.         });
  100.       });
  101.       if (noAccess) {
  102.         lackAccessPlayers += `<p style="margin:0">${playerNick}</p>`;
  103.       } else {
  104.         output += playerOutputTroops;
  105.       }
  106.     };
  107.     // To add player_id to current path
  108.     const GetURL = (id) => {
  109.       const params = new URLSearchParams(window.location.search);
  110.       params.set("player_id", id);
  111.       return ""
  112.         .concat(window.location.origin)
  113.         .concat(window.location.pathname, "?")
  114.         .concat(params.toString());
  115.     };
  116.     // Used to parse string from fetch func to html
  117.     const ConvertToHTML = (pageText) => {
  118.       const parser = new DOMParser();
  119.       const playerPageDocument = parser.parseFromString(pageText, "text/html");
  120.       return playerPageDocument.body;
  121.     };
  122.  
  123.     // 0. If cacheTime smaller than actual Time, use localStorage output.
  124.     // 1. Use AllPlayersList to get Players.
  125.     // 2. If no access to a player, his nick goes to lackAccess variable.
  126.     // 3. ForLoop players with access.
  127.     // 3.1 Fetch a player page.
  128.     // 3.2 Add his troops to output -> AddPlayerPageToOutput.
  129.     // 4. Add results to localStorage.
  130.     // 5. Dialog with results.
  131.  
  132.     async function RenderPlayerTroops() {
  133.       const removedPlayers = Data.removedPlayers.split(";");
  134.       const today = new Date().getTime();
  135.       const afterCacheTime = today + cacheTime;
  136.       const storageDate = localStorage.getItem("troops-storageDate" + mode);
  137.       let parseTime;
  138.  
  139.       if (today < storageDate && Data.cache) {
  140.         output = localStorage.getItem("troops-output" + mode);
  141.         lackAccessPlayers = localStorage.getItem(
  142.           "troops-lackAccessPlayers" + mode
  143.         );
  144.         parseTime = new Date(
  145.           parseInt(localStorage.getItem("troops-parseTime" + mode))
  146.         );
  147.         parseTime = parseTime.toLocaleTimeString();
  148.       } else {
  149.         parseTime = new Date(today);
  150.         parseTime = parseTime.toLocaleTimeString();
  151.         AllPlayersList();
  152.         players
  153.           .filter((player) => {
  154.             return player.disabled === true;
  155.           })
  156.           .map((player) => {
  157.             let nick = player.nick;
  158.             const index = nick.search("[(]");
  159.             nick = nick.slice(0, index).trim();
  160.             lackAccessPlayers += `<p style="margin:0">${nick}</p>`;
  161.           });
  162.  
  163.         await Promise.all(
  164.           players
  165.             .filter((player) => {
  166.               return (
  167.                 player.disabled === false &&
  168.                 !removedPlayers.includes(player.nick)
  169.               );
  170.             })
  171.             .map(async (player) => {
  172.               const response = await fetch(GetURL(player.id));
  173.               const html = await response.text();
  174.               const playerPageDocument = ConvertToHTML(html);
  175.               const useNick = showNicknames ? true : false;
  176.               AddPlayerPageToOutput(playerPageDocument, player.nick, useNick);
  177.             })
  178.         );
  179.         localStorage.setItem("troops-parseTime" + mode, String(today));
  180.         localStorage.setItem("troops-storageDate" + mode, afterCacheTime);
  181.         localStorage.setItem("troops-output" + mode, output);
  182.         localStorage.setItem(
  183.           "troops-lackAccessPlayers" + mode,
  184.           lackAccessPlayers
  185.         );
  186.       }
  187.       Dialog.show(
  188.         "scriptFinalContent",
  189.         `<h2 style="width:600px;">${scriptName}:</h2>
  190.             ${
  191.               Data.removedPlayers === ""
  192.                 ? ""
  193.                 : `<p>Nieuwzględnieni: ${Data.removedPlayers}</p>`
  194.             }${
  195.           lackAccessPlayers === ""
  196.             ? ``
  197.             : `<h4>Uwaga, czesciowy lub calkowity brak podgladu:</h4>` +
  198.               lackAccessPlayers
  199.         }<textarea rows="15" style="width:95%;margin-top:15px;margin-bottom:25px;">${
  200.           showFirstLine ? firstLine + "\r\n" : ""
  201.         }${output}</textarea>
  202.                 <p style="text-align:right"><small>Wygenerowano ${parseTime}.</small></p>`
  203.       );
  204.     }
  205.  
  206.     RenderPlayerTroops();
  207.   }
  208. }
  209. process();
  210. }