Greasy Fork is available in English.
Counts the wonders score for each alliance by additionning the level of each wonders.
当前为
// ==UserScript==
// @name Wonders Score Counters
// @namespace http://tampermonkey.net/
// @version 0.2
// @description Counts the wonders score for each alliance by additionning the level of each wonders.
// @author Draub
// @match https://*.grepolis.com/game/*
// @run-at document-end
// @icon https://www.prod.antoinebouard.com/wondersscorecounters/wonders.png
// @grant none
// ==/UserScript==
(function() {
'use strict';
function countWondersScore() {
// Tableau des points par niveau de merveilles
const levelWondersScore = new Array(0,1,3,6,10,15,21,28,36,45,55);
// Selection de l'écran des merveilles
const wonderdiv = document.getElementsByClassName("world_wonders_info");
// Sélection du tableau
const table = wonderdiv[0].querySelector('table');
/// Sélection de l'entête du tableau
const headerRow = table.querySelector('thead tr');
// Création d'une nouvelle cellule d'entête pour la colonne "Score"
const scoreHeader = document.createElement('th');
scoreHeader.textContent = 'Score';
// Ajout de la classe "header_data" à la nouvelle cellule d'entête
scoreHeader.classList.add('header_data');
// Ajout de la nouvelle cellule d'entête à la fin de l'entête
headerRow.appendChild(scoreHeader);
// Sélection de toutes les lignes du tableau, sauf la première (entête)
const rows = table.querySelectorAll('tbody tr');
// Boucle sur chaque ligne du tableau
rows.forEach(row => {
// Récupération de la valeur de data-rank pour chaque ligne
const rank = parseInt(row.getAttribute('data-rank'));
// Sélection de toutes les colonnes de la ligne ayant l'attribut data-level
const columnsWithDataLevel = row.querySelectorAll('td[data-level]');
// Initialisation de la somme à 0
let sum = 0;
// Boucle sur chaque colonne avec data-level pour additionner leur valeur
columnsWithDataLevel.forEach(column => {
// Récupération de la valeur de data-level et conversion en entier
const level = parseInt(column.getAttribute('data-level'));
// Ajout de la valeur de data-level à la somme
sum += levelWondersScore[level];
});
// Création d'une nouvelle colonne pour afficher le score
const scoreColumn = document.createElement('td');
scoreColumn.textContent = sum; // Ajout du score calculé dans la colonne
// Ajout de la classe "score" à la nouvelle colonne
scoreColumn.classList.add('score');
// Ajout de la nouvelle colonne à la fin de la ligne actuelle
row.appendChild(scoreColumn);
});
}
function waitForKeyElements (
selectorTxt, /* Required: The jQuery selector string that
specifies the desired element(s).
*/
actionFunction, /* Required: The code to run when elements are
found. It is passed a jNode to the matched
element.
*/
bWaitOnce, /* Optional: If false, will continue to scan for
new elements even after the first match is
found.
*/
iframeSelector /* Optional: If set, identifies the iframe to
search.
*/
) {
var targetNodes, btargetsFound;
if (typeof iframeSelector == "undefined")
targetNodes = $(selectorTxt);
else
targetNodes = $(iframeSelector).contents ()
.find (selectorTxt);
if (targetNodes && targetNodes.length > 0) {
btargetsFound = true;
/*--- Found target node(s). Go through each and act if they
are new.
*/
targetNodes.each ( function () {
var jThis = $(this);
var alreadyFound = jThis.data ('alreadyFound') || false;
if (!alreadyFound) {
//--- Call the payload function.
var cancelFound = actionFunction (jThis);
if (cancelFound)
btargetsFound = false;
else
jThis.data ('alreadyFound', true);
}
} );
}
else {
btargetsFound = false;
}
//--- Get the timer-control variable for this selector.
var controlObj = waitForKeyElements.controlObj || {};
var controlKey = selectorTxt.replace (/[^\w]/g, "_");
var timeControl = controlObj [controlKey];
//--- Now set or clear the timer as appropriate.
if (btargetsFound && bWaitOnce && timeControl) {
//--- The only condition where we need to clear the timer.
clearInterval (timeControl);
delete controlObj [controlKey]
}
else {
//--- Set a timer, if needed.
if ( ! timeControl) {
timeControl = setInterval ( function () {
waitForKeyElements ( selectorTxt,
actionFunction,
bWaitOnce,
iframeSelector
);
},
300
);
controlObj [controlKey] = timeControl;
}
}
waitForKeyElements.controlObj = controlObj;
}
waitForKeyElements (
".world_wonders_info",
countWondersScore
);
})();