Grepolis tripjes detector

Laat op het profiel van een speler zien welke steden geen trip hebben

目前為 2025-01-19 提交的版本,檢視 最新版本

// ==UserScript==
// @name         Grepolis tripjes detector
// @version      2025-01-19
// @description  Laat op het profiel van een speler zien welke steden geen trip hebben
// @author       archdukeDaan
// @match        https://*.grepolis.com/*
// @license      MIT
// @namespace    https://tampermonkey.net/
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // timer om te checken of er een profiel is geopend
    var profiel_knop_geplaatst = false
    setTimeout(function checkProfielWindowOpen() {
        //console.log(knop_geplaatst)
        if (document.getElementById("player_towns") != null) {
            if (profiel_knop_geplaatst == false){
                addTripKnop('profiel')
                profiel_knop_geplaatst = true
            }
        } else {
            profiel_knop_geplaatst = false
        }
        setTimeout(checkProfielWindowOpen, 500);
    }, 500);

    // timer om te checken of er een eiland window open staat
    var eiland_knop_geplaatst = false
    setTimeout(function checkEilandWindowOpen() {
        //console.log(knop_geplaatst)
        if (document.getElementById("island_info_towns_left_sorted_by_name") != null) {
            if (eiland_knop_geplaatst == false){
                addTripKnop('eiland')
                eiland_knop_geplaatst = true
            }
        } else {
            eiland_knop_geplaatst = false
        }
        setTimeout(checkEilandWindowOpen, 500);
    }, 500);

    function addTripKnop(window) {
        var button = document.createElement('span');
        button.textContent = 'Tripjes';
        button.style.zIndex = 1000;
        button.style.width = '50px'
        button.style.padding = '4px';
        button.style.marginTop = '4px'
        button.style.marginBottom = '4px'
        button.style.color = 'white';
        button.style.border = '1px solid black';
        button.style.borderRadius = '5px';
        button.style.cursor = 'pointer';

        if (window == 'profiel'){
            button.addEventListener('click', function(){
                checkTroepenBuitenWindowOpen('profiel');
            }, false);
            var profiel = document.getElementById("player_towns")
            var element = profiel.children[0].querySelector('.game_header');
            // voeg de knop als tweede element toe aan de game_header
            element.insertBefore(button,element.children[0]);

        } else if (window == 'eiland'){
            button.addEventListener('click', function(){
                checkTroepenBuitenWindowOpen('eiland');
            }, false);
            var eiland_controls = document.getElementById("island_towns_controls")
            button.style.backgroundColor = 'blue';
            eiland_controls.appendChild(button)
        }
        console.log("Trip knop toegevoegd!")
    }

    function getTripLijst(){
        // verkrijg je huidige trips
        var trips = document.getElementById("outer_troops_list").children 
        var triplijst = []
        for (let i = 0; i < trips.length; i++) {
            var trip = trips[i].children[0].children
            var trip_info = [] // index 0: je eigen stad, index 1: stadsnaam, index 2: speler
            for (let j=0; j<trip.length; j++) {
                var element = trip[j]
                if (element.tagName == "A"){
                    trip_info.push(element.innerHTML)
                }
            }
            triplijst.push(trip_info)
        }
        //console.log(triplijst)
        return triplijst
    }

    function getProfileName(){
        // verkrijg speler naam
        var profiel = document.getElementById("player_info").children
        var naam = ""
        for(let i=0;i<profiel.length;i++){
            var el = profiel[i]
            if (el.tagName == "H3"){
                naam = el.innerHTML
                break
            }
        }
        return naam
    }

    function getStedenLijstOpProfiel(){
        // verkrijg stedenlijst dom element van een speler zn profiel
        var profiel_steden = document.getElementById("player_towns").children[0].children
        var steden = false
        for(let i=0;i<profiel_steden.length;i++){
            var el2 = profiel_steden[i]
            if (el2.tagName == "UL"){
                steden = el2.children
                break
            }
        }
        //console.log(steden)
        return steden
    }

    function getStedenLijstOpEiland(){
        // verkrijg stedenlijst dom element van een eiland
        var eiland_steden = document.getElementById("island_info_towns_left_sorted_by_name").children
        //console.log(steden)
        return eiland_steden
    }

    function generateTripjesOpEiland(){
        // verkrijg stedenlijst op het eiland
        var steden = getStedenLijstOpEiland()
        
        // verkrijg lijst met alle tripjes
        // index 0: je eigen stad, index 1: stadsnaam, index 2: speler
        var triplijst = getTripLijst()

        // loop over de steden en voeg tag 'geen trip' toe als de stadsnaam niet in triplijst staat
        for (let k=0; k < steden.length; k++){
            var stad_obj = steden[k]
            var stad_naam = stad_obj.querySelector(".gp_town_link").innerHTML
            var stad_eigenaar = stad_obj.querySelector(".player_name").children[1].innerHTML
            console.log(stad_eigenaar)
            console.log(stad_naam)

            var tag = document.createElement('span');
            tag.style.zIndex = 1000;
            tag.style.cursor = 'pointer';
            // kijk of er een trip in de stad ligt
            var j = triplijst.findIndex( e => (e[1] == stad_naam) & (e[2] ==stad_eigenaar) )
            if (j>-1){
                tag.textContent = "Wel trip";
                tag.style.color = 'green'
            } else {
                tag.textContent = "Geen trip";
                tag.style.color = 'red'
            }
            // voeg de tag toe aan de DOM
            steden[k].appendChild(tag);
        }
    }

    function generateTripjesOpProfiel(){
        // verkrijg naam op het profiel
        var naam = getProfileName()

        // verkrijg stedenlijst op het profiel
        var steden = getStedenLijstOpProfiel()
        
        // verkrijg lijst met alle tripjes
        // index 0: je eigen stad, index 1: stadsnaam, index 2: speler
        var triplijst = getTripLijst()

        // loop over de steden en voeg tag 'geen trip' toe als de stadsnaam niet in triplijst staat
        for (let k=0; k < steden.length; k++){
            var stad = steden[k].children[1]
            var stad_naam = stad.innerHTML

            // kijk of de stad behoort tot de speler van dit profiel
            var i = triplijst.findIndex(e => e[2] == naam );
            if (i > -1){
                               
                var tag = document.createElement('span');
                tag.style.zIndex = 1000;
                tag.style.cursor = 'pointer';
                // kijk of er een trip in de stad ligt
                var j = triplijst.findIndex( e => e[1] == stad_naam )
                if (j>-1){
                    tag.textContent = "Wel trip";
                    tag.style.color = 'green'
                } else {
                    tag.textContent = "Geen trip";
                    tag.style.color = 'red'
                }
                // voeg de tag toe aan de DOM
                steden[k].appendChild(tag)
            }
        }
    }

    function checkTroepenBuitenWindowOpen(window){
        // kijk of het scherm met 'troepen buiten' open staat
        const troepen_buiten = document.getElementById("outer_troops_list")
        if (troepen_buiten != null){
            if(window == 'profiel'){
                generateTripjesOpProfiel()
            } else if (window == 'eiland'){
                generateTripjesOpEiland()
            }
        } else {
            alert("Open eerst het 'troepen buiten' scherm!")
        }
    }
})();