Greasy Fork

Greasy Fork is available in English.

Grepolis tripjes detector

Laat op het profiel van een speler of op het eiland scherm zien welke steden wel/geen trip hebben

当前为 2025-01-20 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

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

(function() {
    'use strict';

    // vul hier de allianties ID in
    // alleen deze allianties krijgen een trip tag op het eiland informatie scherm
    var allianties = ['181','11','307','255','82']

    // timer om te checken of de knop moet worden geplaatst
    setTimeout(function checkProfielWindowOpen() {
        if (document.getElementById("player_towns") != null) {
            if (document.getElementById("tripknopProfiel") == null){
                addTripKnop('profiel')
            }
        }
        setTimeout(checkProfielWindowOpen, 500);
    }, 500);

    // timer om te checken of de knop moet worden geplaatst
    setTimeout(function checkEilandWindowOpen() {
        if (document.getElementById("island_info_towns_left_sorted_by_name") != null) {
            if (document.getElementById("tripknopEiland") == null){
                addTripKnop('eiland')
            }
        }
        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(){
                generateTripjesOpProfiel();
            }, false);
            button.setAttribute('id', 'tripknopProfiel');

            // voeg de knop als tweede element toe aan de game_header van de stedenlijst op het profiel
            var profiel = document.getElementById("player_towns")
            var element = profiel.children[0].querySelector('.game_header');
            element.insertBefore(button,element.children[0]);

        } else if (window == 'eiland'){
            button.addEventListener('click', function(){
                generateTripjesOpEiland();
            }, false);
            button.setAttribute('id', 'tripknopEiland');
            button.style.backgroundColor = 'blue';

            var eiland_controls = document.getElementById("island_towns_controls")
            eiland_controls.appendChild(button)
        }
        console.log("Trip knop toegevoegd!")
    }

    function getHuidigeSpeler(){
        var playerObj = MM.getModels().Player
        var player = Object.values(playerObj)[0].attributes;
        var huidigeSpeler = player.name
        return huidigeSpeler
    }

    function getTripLijst(){
        // verkrijg alle tripjes en stop ze in een lijst
        const steden_met_troepen_buiten = ITowns.all_supporting_units.fragments

        var triplijst = []

        Object.values(steden_met_troepen_buiten).forEach((stad) => {
            var tripjes = stad.models
            tripjes.forEach((trip) => {
                var trip_info = trip.attributes
                var stad_naam = trip_info.current_town_name
                var stad_speler = trip_info.current_town_player_name
                var trip_stad_herkomst = trip_info.home_town_name

                var row = {"stad_naam":stad_naam,"stad_speler":stad_speler,"trip_herkomst":trip_stad_herkomst}
                triplijst.push( row )
            });
        });
        //console.log(triplijst)
        return triplijst
    }

    function getProfileName(){
        // verkrijg speler naam van het huidige profiel dat open staat
        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 getAlliantieFromLink(stad_obj){
        // verkrijg de alliantie van de eigenaar van een stad vanuit de GP link DOM element
        // als speler geen alliantie heeft, return -1
        if (stad_obj.querySelector('.gp_alliance_link') != null){
            var link_as_str = stad_obj.querySelector('.gp_alliance_link').outerHTML;
            var alliantie = link_as_str.split("Layout.allianceProfile.open")[1].split(",")[1].split(")")[0]
            return alliantie
        } else {
            return -1
        }
    }

    function generateTripjesOpEiland(){
        // indien van toepassing, verwijder de oude tags op het eiland informatie scherm
        document.getElementById("island_info_towns_left_sorted_by_name").querySelectorAll('.tripTag').forEach(e => e.remove());

        // verkrijg stedenlijst op het eiland
        var steden = getStedenLijstOpEiland()
        
        // verkrijg lijst met alle tripjes
        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(".gp_player_link").innerHTML;
            var stad_alliantie = getAlliantieFromLink(stad_obj);

            // plaats geen tag als de stad van de huidige speler is
            // plaats geen tag als de alliantie van de eigenaar van de stad niet in de alliantie lijst staat
            if ( (stad_eigenaar != getHuidigeSpeler()) & (allianties.includes(stad_alliantie) == true) ){
                var tag = document.createElement('span');
                tag.style.zIndex = 1000;
                tag.style.cursor = 'pointer';
                tag.setAttribute('class','tripTag')
                tag.style.fontWeight = 'bold';
                tag.style.marginLeft = '10px';
                // kijk of er een trip in de stad ligt
                var j = triplijst.findIndex( e => (e.stad_naam == stad_naam) & (e.stad_speler == 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(){
        // indien van toepassing, verwijder de oude tags op het profiel
        document.getElementById("player_towns").querySelectorAll('.tripTag').forEach(e => e.remove());

        // verkrijg naam op het profiel
        var naam = getProfileName()

        // verkrijg stedenlijst op het profiel
        var steden = getStedenLijstOpProfiel()
        
        // verkrijg lijst met alle tripjes
        var triplijst = getTripLijst()

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

            var tag = document.createElement('span');
            tag.style.zIndex = 1000;
            tag.style.cursor = 'pointer';
            tag.setAttribute('class','tripTag')
            tag.style.fontWeight = 'bold';

            // kijk of er een trip in de stad ligt
            var j = triplijst.findIndex( e => (e.stad_naam == stad_naam) & (e.stad_speler == 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)
        }
    }
})();