- // ==UserScript==
- // @name Auto-Etykieta
- // @version 2.1.7.1
- // @description Tags new incomings
- // @author FunnyPocketBook
- // @match https://*/game.php?*mode=incomings*
- // @grant none
- // @namespace https://greasyfork.org/users/151096
- // ==/UserScript==
- let attack = "Atak"; // Change this to your language
- let support = "Wsparcie"; // Change this to your language
- let noble = "Szlachcic" // Change this to your language
- const wait = 2000; // How often the script checks for new attacks in milliseconds
- const domain = document.domain;
- if(domain.includes("tribalwars.com.pt") || domain.includes("tribalwars.com.br")) {
- attack = "ataque";
- support = "apoio";
- noble = "nobre";
- }
- attack = attack.toLowerCase();
- support = support.toLowerCase();
- noble = noble.toLowerCase();
- const incRow = document.querySelector("#incomings_table").rows.length;
- const timeout = Math.max(60000, incRow * 31);
- setTimeout(function() {
- "use strict";
- tagger();
- }, wait);
- setTimeout(function() {
- window.location.reload();
- }, timeout);
- function tagger() {
- "use strict";
- let attackingVillage = []; // Store all attacking villages
- let villNr = []; // Store number of attacks per attacking village, same index as attackingVillage
- let index;
- for (let i = 2; i < incRow; i++) {
- index = attackingVillage.indexOf($("#incomings_table > tbody > tr:nth-child(" + i + ") > td:nth-child(3) > a").text()); // See if the attacking village is already in the array
- if(index === -1) { // If attacking village is not in array, push it into array
- attackingVillage.push($("#incomings_table > tbody > tr:nth-child(" + i + ") > td:nth-child(3) > a").text());
- villNr.push(1);
- } else { // If attacking village is in array, increase attack number
- villNr[index]++;
- }
- let incName = document.querySelector("#incomings_table > tbody > tr:nth-child(" + i + ") > td:nth-child(1) > span > span > a:nth-child(1) > span.quickedit-label").innerHTML;
- let nobleIcon = "";
- // If icon exist, save it in nobleIcon
- if (document.querySelector("#incomings_table > tbody > tr:nth-child(" + i + ") > td:nth-child(1) > span > span > a:nth-child(1) > span:nth-child(2) > img")) {
- nobleIcon = document.querySelector("#incomings_table > tbody > tr:nth-child(" + i + ") > td:nth-child(1) > span > span > a:nth-child(1) > span:nth-child(2) > img").getAttribute("src");
- }
- incName = incName.trim().toLowerCase();
- // If the attack has the noble icon and is not already tagged as noble, tag it as noble
- if (nobleIcon.includes("snob.png") && !incName.includes(noble)) {
- document.querySelector("#incomings_table > tbody > tr:nth-child(" + i + ") > td:nth-child(1) > span > span > a.rename-icon").click();
- document.querySelector('#incomings_table > tbody > tr:nth-child(' + i + ') > td:nth-child(1) > span > span.quickedit-edit > input[type="text"]:nth-child(1)').value = noble;
- document.querySelector("#incomings_table > tbody > tr:nth-child(" + i + ") > td:nth-child(1) > span > span.quickedit-edit > input.btn").click();
- }
- // If the attack is labelled with attack or support, click the checkbox so the system automatically tags the inc
- else if (incName.includes(attack) || incName.includes(support)) {
- document.querySelector('#incomings_table > tbody > tr:nth-child(' + i + ') > td:nth-child(1) > input[type="checkbox"]:nth-child(2)').click();
- }
- }
- // Tag the attacks with the number of attacks per attacking village
- let j = 2;
- let tagInterval = setInterval(function() { // Interval instead of for-loop to control the server requests
- let incName = document.querySelector("#incomings_table > tbody > tr:nth-child(" + j + ") > td:nth-child(1) > span > span > a:nth-child(1) > span.quickedit-label").innerHTML; // Get inc name
- incName = incName.replace(/(\r\n|\n|\r)/gm,"").replace(/ /g,"").toLowerCase(); // Remove all whitespace from attack name and make it lowercase
- const attVill = attackingVillage.indexOf($("#incomings_table > tbody > tr:nth-child(" + j + ") > td:nth-child(3) > a").text());
- if(!incName.includes(attack) && incName.slice(-1) != villNr[attVill]) { // If the last character in the inc name is not a number and the incName does not include "attack", append the number
- index = attackingVillage.indexOf($("#incomings_table > tbody > tr:nth-child(" + j + ") > td:nth-child(3) > a").text()); // See which index the attack has
- document.querySelector("tr.nowrap:nth-child(" + j + ") > td:nth-child(1) > span:nth-child(3) > span:nth-child(1) > a:nth-child(2)").click();
- const incLabel = document.querySelector('#incomings_table > tbody > tr:nth-child(' + j + ') > td:nth-child(1) > span > span.quickedit-edit > input[type="text"]:nth-child(1)');
- if(Number.isInteger(parseInt(incName.slice(-1)))) {
- incLabel.value = incLabel.value.slice(0, -1);
- }
- document.querySelector("tr.nowrap:nth-child(" + j + ") > td:nth-child(1) > span:nth-child(3) > span:nth-child(2) > input:nth-child(1)").value += " " + villNr[index];
- document.querySelector("tr.nowrap:nth-child(" + j + ") > td:nth-child(1) > span:nth-child(3) > span:nth-child(2) > input:nth-child(2)").click();
- }
- j++;
- if(j >= incRow) { // Stop interval, just like the for-loop condition
- clearInterval(tagInterval);
- document.querySelector("[name=label]").click();
- }
- }, 40);
- }