您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Laat op het profiel van een speler of op het eiland scherm zien welke steden wel/geen trip hebben
当前为
// ==UserScript== // @name Grepolis tripjes detector // @version 2025-01-23 // @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== ///////////////////////////////////////////////////////////// // MAP ENHANCER VEREIST ///////////////////////////////////////////////////////////// (function() { 'use strict'; // vul hier de allianties in // alleen deze allianties krijgen een trip tag op het eiland informatie scherm var allianties = [ { "naam":"Bruin Café", "id": 11 }, { "naam":"De Librije", "id": 181 }, { "naam":"Passionele Nachten", "id": 307 }, { "naam":"Engnekken", "id": 255 }, { "naam":"Brain Drain", "id": 82 }, ] // kies hier of je wil dat de trip tags automatisch verschijnen, of dat je het handmatig wil aanklikken. // auto = true : als je een eiland informatie scherm opent, staat er automatisch bij iedere stad een trip tag. // auto = false : als je een eiland informatie scherm opent, moet je zelf op de knop klikken voordat de trip tags verschijnen. var auto = true // timer om te checken of de knop moet worden geplaatst // er kan maar maximaal 1 profiel tegelijk open staan 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 tags op de kaart moeten worden geupdate setTimeout(function checkTagsOpKaart() { generateTripjesOpKaart() setTimeout(checkTagsOpKaart, 1000); }, 5000); // timer om te checken of de knop moet worden geplaatst // er kunnen meerdere eilanden vensters tegelijk open staan setTimeout(function checkEilandWindowOpen() { if (document.getElementsByClassName("island_info_wrapper") != null) { // verkrijg alle openstaande eiland vensters var vensters = getAllOpenEilandVensters() for(let i=0;i<vensters.length;i++){ var venster = vensters[i] // check of dit eiland venster al een knop heeft if (venster.querySelector("#tripknopEiland") == null){ addTripKnop('eiland',venster) } } } setTimeout(checkEilandWindowOpen, 500); }, 500); function addTripKnop(knop_type,venster) { 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'; button.style.marginLeft = '15px'; if (knop_type == '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 (knop_type == 'eiland'){ button.addEventListener('click', function(){ generateTripjesOpEiland(venster); }, false); button.setAttribute('id', `tripknopEiland`); button.style.backgroundColor = 'blue'; var eiland_controls = venster.querySelector("#island_towns_controls") eiland_controls.appendChild(button) if (auto == true){ button.click() } } 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 stad_id = trip_info.current_town_id //var trip_stad_herkomst = trip_info.home_town_name var row = {"stad_naam":stad_naam,"stad_speler":stad_speler,"stad_id":stad_id} 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(venster){ // verkrijg stedenlijst dom element van een eiland var eiland_steden = venster.querySelector("#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 getAlliantieFromKaart(stad_obj){ if (stad_obj.querySelector('.alliance_name') != null){ return stad_obj.querySelector('.alliance_name').innerHTML } else { return "" } } function getAllOpenEilandVensters(){ var vensters = document.getElementsByClassName("island_info_wrapper") return vensters } function generateTripjesOpEiland(venster){ // indien van toepassing, verwijder de oude tags op het eiland informatie scherm venster.querySelector("#island_info_towns_left_sorted_by_name").querySelectorAll('.tripTag').forEach(e => e.remove()); // verkrijg stedenlijst op het eiland var steden = getStedenLijstOpEiland(venster) // verkrijg de triplijst 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_dom = stad_obj.querySelector(".gp_player_link") var stad_eigenaar = "Spookstad" if (stad_eigenaar_dom != null){ stad_eigenaar = stad_eigenaar_dom.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.findIndex( e => e.id == stad_alliantie) > -1) ){ var tag = document.createElement('div'); 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 de triplijst var triplijst = getTripLijst() // verkrijg stedenlijst op het profiel var steden = getStedenLijstOpProfiel() // 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) } } function generateTripjesOpKaart(){ // verkrijg de triplijst var triplijst = getTripLijst() // verkrijg de steden op de kaart var steden_kaart = document.getElementById("map_towns") var steden_op_kaart = steden_kaart.querySelectorAll('a[id^="town_"]'); for (let i=0; i<steden_op_kaart.length;i++) { var stad = steden_op_kaart[i] var stad_alliantie = -1//getAlliantieFromKaart(stad).trim() if (allianties.findIndex( e=> e.naam == stad_alliantie) == -1){ // check of er al een tag staat if (stad.querySelector(".tripTag") == null){ var stad_id = stad.id.substring(5) // tag var tag = document.createElement('div'); tag.style.zIndex = 1000; tag.style.cursor = 'pointer'; tag.setAttribute('class','tripTag') tag.style.fontWeight = 'bold'; tag.style.width = '15px'; tag.style.height = '15px'; tag.style.borderRadius = '50%' tag.style.position = 'relative'; tag.style.top = "60%"; tag.style.left = "70%"; tag.style.border = '2px solid black' // kijk of er een trip in de stad ligt var j = triplijst.findIndex( e => (e.stad_id == stad_id) ) if (j>-1){ tag.style.backgroundColor = 'green' } else { tag.style.backgroundColor = 'red' } stad.appendChild(tag) } } } } })();