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)
}
}
}
}
})();