Greasy Fork is available in English.
Outils d'aide au jeu
// ==UserScript==// @name GobZilla// @namespace Gobland// @description Outils d'aide au jeu// @include http://games.gobland.fr/jeuC.html// @include http://games.gobland.fr/act.php// @include http://games.gobland.fr/Vue.php// @include http://games.gobland.fr/Menu.php// @include http://games.gobland.fr/Meute.php// @include http://games.gobland.fr/ProfilPerso.php// @include http://games.gobland.fr/SmallEquipement.php// @include http://games.gobland.fr/fo_equipement.php*// @include http://games.gobland.fr/Equipement.php// @include http://games.gobland.fr/fo_orders.php*// @include http://games.gobland.fr/amelioration.php// @include http://games.gobland.fr/Follower.php*// @include http://games.gobland.fr/Followers.php**// @include http://games.gobland.fr/Options.php// @include http://games.gobland.fr/activDLA.php// @include http://games.gobland.fr/actions.php// @include http://games.gobland.fr/playActions.php// @include http://games.gobland.fr/goodies.php*// @include http://games.gobland.fr/stock.php?*// @include http://games.gobland.fr/membresClan.php// @include http://games.gobland.fr/Quetes.php// @include http://games.gobland.fr/depot.php*// @match http://games.gobland.fr/index.php*// @match https://games.gobland.fr/index.php*// @match http://games.gobland.fr/playActions.php?todo=52// @require https://cdnjs.cloudflare.com/ajax/libs/raphael/2.3.0/raphael.js// @require https://greasemonkey.github.io/gm4-polyfill/gm4-polyfill.js// @require https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js// @copyright Lordslair, Seishin, Glak (393) et Death Métal (330)// @author DeathMétal 330 - Glak 393// @license https://creativecommons.org/licenses/by-sa/4.0/// @version 2.0.4.9// @icon https://i.ibb.co/HB9XztJ/gobzilla.jpg// ==/UserScript==//==================================================================/// Anaglobiseur (calculateur d'évolutiuon) (page amélioration)//=================================================================if ($(location).attr('href').match(/http:\/\/(.*\.)?gobland\.fr\/amelioration\.php/i)) {// Fonction pour créer les boutons + et -function createButtons(row, currentValue, costValue, price, updateValueFunc, improvements, specialty, characteristic ) {const buttonPlus = document.createElement('button');buttonPlus.textContent = '+';const buttonMinus = document.createElement('button');buttonMinus.textContent = '-';row.appendChild(buttonMinus);row.appendChild(buttonPlus);buttonPlus.addEventListener('click', () => {const characteristicName = row.children[0].innerText.split('(')[0].trim();if (characteristicName === 'Durée du Tour') {let upgradesDuration = parseInt(row.children[2].innerText);upgradesDuration--;row.children[2].innerText = upgradesDuration;updateDuration(row, upgradesDuration);costValue += price;row.children[3].innerText = costValue;improvements.innerText = parseInt(improvements.innerText) + 1; // Augmente Nb Améliorationsrow.children[2].innerText = parseInt(improvements.innerText) + 1} else if (characteristicName === 'Points de Vie Maximum') {currentValue += 10;costValue += price;row.children[1].innerText = currentValue;row.children[3].innerText = costValue;improvements.innerText = parseInt(improvements.innerText) + 1; // Modifier cette ligne} else {currentValue = updateValueFunc(currentValue, 1); // Augmenter la valeurcostValue += price; // Mettre à jour le coûtimprovements.innerText = parseInt(improvements.innerText) + 1; // Mettre à jour Nb Améliorationsrow.children[1].innerText = currentValue; // Mettre à jour la colonne "Valeur Actuelle"row.children[3].innerText = costValue; // Mettre à jour la colonne "Coût Amélioration Suivante"}updateTotalCost();updateDisplayedValues();calculateLevel();adjustPricesBasedOnSpecialty(specialiteJoueur);getPriceForSpecialty(specialty, characteristic);});buttonMinus.addEventListener('click', () => {const characteristicName = row.children[0].innerText.split('(')[0].trim();if (characteristicName === 'Durée du Tour') {let upgradesDuration = parseInt(row.children[2].innerText);upgradesDuration++;row.children[2].innerText = upgradesDuration;updateDuration(row, upgradesDuration);costValue -= price;row.children[3].innerText = costValue;improvements.innerText = parseInt(improvements.innerText) - 1; // Augmente Nb Améliorationsrow.children[2].innerText = parseInt(improvements.innerText) - 1;} else if (characteristicName === 'Points de Vie Maximum') {currentValue -= 10;costValue -= price;row.children[1].innerText = currentValue;row.children[3].innerText = costValue;improvements.innerText = parseInt(improvements.innerText) -1; // Modifier cette ligne} else {currentValue = updateValueFunc(currentValue, -1); // Augmenter la valeurcostValue -= price; // Mettre à jour le coûtimprovements.innerText = parseInt(improvements.innerText) + -1; // Mettre à jour Nb Améliorationsrow.children[1].innerText = currentValue; // Mettre à jour la colonne "Valeur Actuelle"row.children[3].innerText = costValue; // Mettre à jour la colonne "Coût Amélioration Suivante"}updateTotalCost();updateDisplayedValues();calculateLevel();});}// Fonction pour mettre à jour la colonne Nb Améliorationsfunction updateImprovements(row, change) {let currentImprovements = parseInt(row.children[2].innerText);currentImprovements += change;row.children[2].innerText = currentImprovements;}// Gestion durée du tour (marche mal)// Fonction pour mettre à jour la durée du tour en heures et minutesfunction updateDuration(row, upgrades) {let newDurationInMinutes = 30 - (upgrades * 3);let currentDurationText = row.children[1].innerText;let currentDurationParts = currentDurationText.split(' ');let currentHours = parseInt(currentDurationParts[0]);let currentMinutes = parseInt(currentDurationParts[3]);let currentDurationInMinutes = currentHours * 60 + currentMinutes;let updatedDuration = currentDurationInMinutes + newDurationInMinutes;let updatedHours = Math.floor(updatedDuration / 60);let remainingMinutes = updatedDuration % 60;row.children[1].innerText = updatedHours + ' heures et ' + remainingMinutes + ' minutes';}// Fonction pour mettre à jour une valeur en fonction de l'incrément/decrementfunction updateValue(value, change) {return value + change;}// Sélection des caractéristiques et initialisation des valeursconst characteristics = [document.querySelectorAll('tr.pair')[1], // Durée du tourdocument.querySelectorAll('tr.pair')[2], // PV maxdocument.querySelectorAll('tr.pair')[3], // Perceptiondocument.querySelectorAll('tr.pair')[4], // Attaquedocument.querySelectorAll('tr.pair')[5], // Esquivedocument.querySelectorAll('tr.pair')[6], // Dégâtsdocument.querySelectorAll('tr.pair')[7] // Régénération];// Ajout d'une Ligne Total// Sélection de la ligne "Dés de Régénération (+1D3)"const regenerationRow = document.querySelectorAll('tr.pair')[7]; // Modifier le sélecteur si nécessaire// Création de la ligne "Total"const totalRow = document.createElement('tr');// Colonne 1 (caractéristique)const totalCell1 = document.createElement('td');totalCell1.textContent = 'Total';totalRow.appendChild(totalCell1);// Colonne 2 (total des valeurs actuelles)const totalCell2 = document.createElement('td');totalRow.appendChild(totalCell2);// Colonne 3 (vide pour laisser la colonne Nb Améliorations)const totalCell3 = document.createElement('td');totalRow.appendChild(totalCell3);// Colonne 4 (total des coûts)const totalCostValue = Array.from(document.querySelectorAll('tr.pair td:nth-child(4)')).slice(1) // Ignorer la première ligne (en-tête).reduce((acc, cell) => acc + parseInt(cell.innerText), 0);const totalCell4 = document.createElement('td');totalCell4.textContent = totalCostValue;totalCell4.title = "total cumulatif des PI dépensés. Basé sur prix 16 sauf regen 30 et spécilité 12";totalRow.appendChild(totalCell4);// Insérer la ligne "Total" après la ligne "Dés de Régénération (+1D3)"regenerationRow.parentNode.insertBefore(totalRow, regenerationRow.nextSibling);//Gestion des Dons// Récupération des éléments pour chaque donconst donsRows = [document.querySelector('tr.pair:nth-child(13)'),document.querySelector('tr.pair:nth-child(14)'),document.querySelector('tr.pair:nth-child(15)'),document.querySelector('tr.pair:nth-child(16)'),document.querySelector('tr.pair:nth-child(17)')];// Tableau des coûts pour chaque donconst donsCosts = [10, 20, 10, 10, 10];// Tableau des améliorations pour chaque donconst donsImprovements = donsRows.map(row => row ? parseImprovements(row) - 1 : /* Valeur par défaut */ 0);// Tableau des coûts totaux pour chaque donconst donsTotalCosts = donsCosts.map((cost, index) => {if (donsRows[index]) {return calculateTotalCost(cost, donsImprovements[index]);}// Si le don n'est pas trouvé, attribuer une valeur par défaut (par exemple, 0)return /* Valeur par défaut */ 100;});// Calcul du coût total de tous les donsconst totalDonCostValue = donsTotalCosts.reduce((acc, curr) => acc + curr, 0);localStorage.setItem('totalDonCostValue', totalDonCostValue);// Création de la ligne "Total" pour les donsconst totalDonRow = document.createElement('tr');totalDonRow.innerHTML = '<td>Total</td><td></td><td></td><td></td>';const totalDonCostCell = totalDonRow.querySelector('td:last-child');totalDonCostCell.textContent = totalDonCostValue;totalDonCostCell.title = "Il s'agit du total cumulatif dépensé, en tenant compte des dons qui n'apparaissent pas ici (ceux améliorés à fond)";// Insérer la ligne "Total" après la dernière ligne de donsconst lastDonRow = document.querySelector('tr.pair:last-child');lastDonRow.parentNode.appendChild(totalDonRow);// Fonction pour extraire le coût d'un don à partir de sa lignefunction parseDonCost(row) {if (row) {const costText = row.querySelector('td:nth-child(4)').innerText;return parseInt(costText);}return 0;}// Fonction pour extraire le nombre d'améliorations d'un don à partir de sa lignefunction parseImprovements(row) {if (row) {const improvementsText = row.querySelector('td:nth-child(3)').innerText.split(' ')[0];return parseInt(improvementsText);}return 0;}// Fonction pour calculer le coût total d'un don en fonction de son coût de base et du nombre d'améliorationsfunction calculateTotalCost(baseCost, improvements) {let totalCostDon = 0;for (let i = 1; i <= improvements; i++) {totalCostDon += baseCost * i;}return totalCostDon;}function getPriceForSpecialty(specialty, characteristic) {return specialtyPrices[specialty]?.[characteristic] || defaultPrices[characteristic];}function adjustPricesBasedOnSpecialty(specialty) {// Réinitialisation des prix par défautdefaultPrices = {'Durée du Tour': 16,'Points de Vie Maximum': 16,'Perception': 16,'Dés d\'Attaque': 16,'Dés d\'Esquive': 16,'Dés de Dégats': 16,'Dés de Régénération': 30// Ajoutez d'autres caractéristiques avec leurs prix correspondants};// Réinitialisation des prix spécifiques à la spécialitéspecialtyPrices = {'Points de Vie': { 'Points de Vie Maximum': 12 },'Perception': { 'Perception': 12 },'Attaque': { 'Dés d\'Attaque': 12 },'Esquive': { 'Dés d\'Esquive': 12 },'Dégats': { 'Dés de Dégats': 12 },'Régénération': { 'Dés de Régénération': 12 }};// Mettre à jour les prix en fonction de la nouvelle spécialitéObject.keys(defaultPrices).forEach(key => {const price = getPriceForSpecialty(specialty, key);defaultPrices[key] = price;console.log('const price', price);});localStorage.setItem('specialiteJoueur', specialty);localStorage.setItem('prix par défaut', JSON.stringify(defaultPrices));localStorage.setItem('prix spécialité', JSON.stringify(specialtyPrices));console.log('prix spécialité', specialtyPrices);console.log('prix par défaut', defaultPrices);console.log('Spécialité enregistrée', specialty);updateTotalCost(); // Mettre à jour le coût totalupdateDisplayedValues(); // Mettre à jour les valeurs affichéescalculateLevel(); // Mettre à jour le niveau}let specialiteJoueur = localStorage.getItem('specialiteJoueur');if (specialiteJoueur) {adjustPricesBasedOnSpecialty(specialiteJoueur);console.log('Spécialité enregistrée :', specialiteJoueur);} else {console.log('Aucune spécialité enregistrée.');alert('Sélectionnez une spécialité pour faire des projections sur votre gobelin!');}console.log('Spécialité enregistrée :', specialiteJoueur);const targetElement = document.querySelector('.gfmm > table:nth-child(1) > tbody:nth-child(1) > tr:nth-child(2) > td:nth-child(1)');console.log("Élément cible trouvé :", targetElement);const specialtySelect = document.createElement('select');specialtySelect.id = 'specialtySelect';specialtySelect.title = 'Bienvenue sur AnaGlobiliseur. Choisir votre spécialité pour calculer (a peu pres) les PI nécessaires et le niveau projeté en fonction des caractéristiques que vous voulez monter'const defaultOption = document.createElement('option');defaultOption.value = '';specialtySelect.appendChild(defaultOption);const specialties = ['Points de Vie', 'Attaque', 'Esquive', 'Dégats', 'Régénération', 'Perception'];specialties.forEach(specialty => {const option = document.createElement('option');option.value = specialty;option.textContent = specialty;specialtySelect.appendChild(option);});if (specialiteJoueur) {specialtySelect.value = specialiteJoueur;}specialtySelect.addEventListener('change', () => {specialiteJoueur = specialtySelect.value;adjustPricesBasedOnSpecialty(specialiteJoueur);localStorage.setItem('specialiteJoueur', specialiteJoueur); // Mise à jour dans le stockage locallocation.reload();location.reload();});targetElement.appendChild(specialtySelect);console.log("Liste déroulante insérée dans l'élément cible.");characteristics.forEach(row => {const currentValue = parseInt(row.children[1].innerText);const improvements = row.children[2];const costValue = parseInt(row.children[3].innerText);const characteristicName = row.children[0].innerText.match(/(.*) \(.*/)[1];const price = getPriceForSpecialty(localStorage.getItem('specialiteJoueur'), characteristicName);createButtons(row, currentValue, costValue, price, updateValue, improvements);});function updateTotalCost() {const specialiteJoueur = localStorage.getItem('specialiteJoueur'); // Récupérer la spécialité choisie depuis le localStorageconst totalCost = characteristics.reduce((acc, row) => {const characteristicName = row.children[0].innerText.split('(')[0].trim(); // Récupération du nom sans les parenthèsesconst improvements = parseInt(row.children[2].innerText); // Nombre d'améliorationsconst price = getPriceForSpecialty(specialiteJoueur, characteristicName); // Utilisation de la fonction pour récupérer le prixlet cumulativeCost = 0;for (let i = 1; i <= improvements; i++) {cumulativeCost += price * i;}// Affichage du détail pour chaque ligne dans la consoleconsole.log(`Ligne: ${characteristicName} - Prix unitaire: ${price} - Améliorations: ${improvements} - Coût total: ${cumulativeCost}`);return acc + cumulativeCost;}, 0);console.log('Total:', totalCost); // Affichage du total dans la console// Enregistrement du total dans le localStoragelocalStorage.setItem('totalCost', totalCost);// Mise à jour de l'affichage du total dans l'interface HTMLconst totalCell = document.querySelector('.gfmm > table:nth-child(1) > tbody:nth-child(1) > tr:nth-child(11) > td:nth-child(4)');totalCell.textContent = totalCost;}/// Pour calculer le niveau en fonction du total de PIfunction calculateLevel() {const nbPIActuels = window.localStorage.getItem('nbPIActuelsValue');const levels = [{ requiredPI: 0, level: 1 },{ requiredPI: 10, level: 2 },{ requiredPI: 30, level: 3 },{ requiredPI: 60, level: 4 },{ requiredPI: 100, level: 5 },{ requiredPI: 150, level: 6 },{ requiredPI: 210, level: 7 },{ requiredPI: 280, level: 8 },{ requiredPI: 360, level: 9 },{ requiredPI: 450, level: 10 },{ requiredPI: 550, level: 11 },{ requiredPI: 660, level: 12 },{ requiredPI: 780, level: 13 },{ requiredPI: 910, level: 14 },{ requiredPI: 1050, level: 15 },{ requiredPI: 1200, level: 16 },{ requiredPI: 1360, level: 17 },{ requiredPI: 1530, level: 18 },{ requiredPI: 1710, level: 19 },{ requiredPI: 1900, level: 20 },{ requiredPI: 2100, level: 21 },{ requiredPI: 2310, level: 22 },{ requiredPI: 2530, level: 23 },{ requiredPI: 2760, level: 24 },{ requiredPI: 3000, level: 25 },{ requiredPI: 3250, level: 26 },{ requiredPI: 3510, level: 27 },{ requiredPI: 3780, level: 28 },{ requiredPI: 4060, level: 29 },{ requiredPI: 4350, level: 30 },{ requiredPI: 4650, level: 31 },{ requiredPI: 4960, level: 32 },{ requiredPI: 5280, level: 33 },{ requiredPI: 5610, level: 34 },{ requiredPI: 5950, level: 35 },{ requiredPI: 6300, level: 36 },{ requiredPI: 6660, level: 37 },{ requiredPI: 7030, level: 38 },{ requiredPI: 7410, level: 39 },{ requiredPI: 7800, level: 40 },{ requiredPI: 8200, level: 41 },{ requiredPI: 8610, level: 42 },{ requiredPI: 9030, level: 43 },{ requiredPI: 9460, level: 44 },{ requiredPI: 9900, level: 45 },{ requiredPI: 10350, level: 46 },{ requiredPI: 10810, level: 47 },{ requiredPI: 11280, level: 48 },{ requiredPI: 11760, level: 49 },{ requiredPI: 12250, level: 50 },{ requiredPI: 12750, level: 51 },{ requiredPI: 13260, level: 52 },{ requiredPI: 13780, level: 53 },{ requiredPI: 14310, level: 54 },{ requiredPI: 14850, level: 55 },{ requiredPI: 15400, level: 56 },{ requiredPI: 15960, level: 57 },{ requiredPI: 16530, level: 58 },{ requiredPI: 17110, level: 59 },{ requiredPI: 17700, level: 60 },{ requiredPI: 18300, level: 61 },{ requiredPI: 18910, level: 62 },{ requiredPI: 19530, level: 63 },{ requiredPI: 20170, level: 64 },{ requiredPI: 20820, level: 65 },{ requiredPI: 21480, level: 66 },{ requiredPI: 22150, level: 67 },{ requiredPI: 22830, level: 68 },{ requiredPI: 23520, level: 69 },{ requiredPI: 24220, level: 70 },{ requiredPI: 24930, level: 71 },{ requiredPI: 25650, level: 72 },{ requiredPI: 26380, level: 73 },{ requiredPI: 27120, level: 74 },{ requiredPI: 27870, level: 75 },{ requiredPI: 28630, level: 76 },{ requiredPI: 29400, level: 77 },{ requiredPI: 30180, level: 78 },{ requiredPI: 30970, level: 79 },{ requiredPI: 31770, level: 80 },{ requiredPI: 32580, level: 81 },{ requiredPI: 33400, level: 82 },{ requiredPI: 34230, level: 83 },{ requiredPI: 35070, level: 84 },{ requiredPI: 35920, level: 85 },{ requiredPI: 36780, level: 86 },{ requiredPI: 37650, level: 87 },{ requiredPI: 38530, level: 88 },{ requiredPI: 39420, level: 89 },{ requiredPI: 40320, level: 90 },{ requiredPI: 41230, level: 91 },{ requiredPI: 42150, level: 92 },{ requiredPI: 43080, level: 93 },{ requiredPI: 44020, level: 94 },{ requiredPI: 44970, level: 95 },{ requiredPI: 45930, level: 96 },{ requiredPI: 46900, level: 97 },{ requiredPI: 47880, level: 98 },{ requiredPI: 48870, level: 99 },{ requiredPI: 49870, level: 100 }];let currentLevel = 1;for (const { requiredPI, level } of levels) {if (nbPIActuels >= requiredPI) {currentLevel = level;} else {break;}}console.log('niveau', currentLevel);return currentLevel;}const PX = window.localStorage.getItem('PX');const PXPerso = window.localStorage.getItem('PXPerso');const PI = window.localStorage.getItem('PI');console.log('PX', PX);const totalCost = window.localStorage.getItem('totalCost');const nbPIActuels = window.localStorage.getItem('nbPIActuels');const PIapprentissagesText = `PI investis dans les apprentissages :`;const PIapprentissagesValue = nbPIActuels - totalDonCostValue - totalCost - PI - PXPerso;localStorage.setItem('PIapprentissagesText', PIapprentissagesText);localStorage.setItem('PIapprentissagesValue', PIapprentissagesValue);function updateDisplayedValues() {// Récupérer les valeurs du local storageconst niveau = window.localStorage.getItem('niveau');const PX = window.localStorage.getItem('PX');const PXperso = window.localStorage.getItem('PXperso');const PI = window.localStorage.getItem('PI');const totalCost = window.localStorage.getItem('totalCost');const PIapprentissagesText = window.localStorage.getItem('PIapprentissagesText');const PIapprentissagesValue = window.localStorage.getItem('PIapprentissagesValue');// Trouver l'élément contenant le texte "Vous pouvez vous améliorer à concurrence de ...."const targetElement = document.querySelector('tr.pair:nth-child(1) > td:nth-child(1)');// Créer des éléments pour afficher les valeurs mises à jourconst niveauText = `Niveau actuel : ${niveau}`;const nbPIActuelsText = `Total PI simulés :`;const nbActualText = `Vous avez actuellement :`;const nbPIActuels = window.localStorage.getItem('nbPIActuels');const nbPIActuelsValue = Math.floor(+totalCost + +totalDonCostValue + +PIapprentissagesValue + +PI);localStorage.setItem('nbPIActuelsValue', nbPIActuelsValue);// Calculer le niveau en fonction de nbPIActuelsconst currentLevel = calculateLevel(parseInt(nbPIActuelsValue));const currentLevelText = `Niveau atteint : ${currentLevel}`;const PICompText = 'PI investis dans les caractéristiques : 'const PICompValue = totalCost;// Pour calculer le nombre de PX par jour depuis la créationconst diffpx = nbPIActuelsValue - nbPIActuels;console.log(diffpx);let dateCreationGobelin = localStorage.getItem('DateCrea');let dateCrea = new Date(dateCreationGobelin);let dateActuelle = new Date();let differenceEnMs = dateActuelle - dateCrea;let differenceEnJours = Math.floor(differenceEnMs / (1000 * 60 * 60 * 24));if (!localStorage.getItem('xpParJourfiged')) {// Calcul de xpParJourfigedconst xpParJour = nbPIActuelsValue !== 0 ? nbPIActuelsValue / differenceEnJours : 0;const xpParJourArrondi = xpParJour.toFixed(2);localStorage.setItem('xpParJourfiged', xpParJourArrondi);}const xpParJourfiged = localStorage.getItem('xpParJourfiged');const nbdejourneeded = diffpx/xpParJourfiged;const nbdejourneededArrondi = nbdejourneeded.toFixed(2);const daytoyear = nbdejourneededArrondi/365;const daytoyearround = daytoyear.toFixed(1);const newContent = `<div>${nbActualText + "<strong>" + nbPIActuels + " PI" + "</strong>"}</div><div>${PIapprentissagesText + "<strong>" + +PIapprentissagesValue + "</strong>"}</div><div>${PICompText + "<strong>" + PICompValue + "</strong>"}</div><div>${niveauText}</div><div>${nbPIActuelsText + "<strong>" + nbPIActuelsValue + "</strong>"}</div><div>${currentLevelText}</div><div>${"<strong>" + differenceEnJours + "</strong>" + " jours sont passés depuis votre naissance, vous avez gagné " + "<strong>" + xpParJourfiged + " px/jour" + "</strong>"}</div><div>${"Pour atteindre les valeurs simulées au rythme actuel il vous faudra " + "<strong>" + nbdejourneededArrondi + " jours" + "</strong>" + " (" + "<strong>" + daytoyearround + " années" + "</strong>" + ")"}</div>`;// Création d'un nouvel élément div pour contenir le nouveau contenuconst newElement = document.createElement('div');newElement.innerHTML = newContent;// Remplacement du contenu existant par le contenu nouvellement créétargetElement.innerHTML = ''; // Vide d'abord le contenu existanttargetElement.appendChild(newElement);}updateDisplayedValues();calculateLevel();}//==============================================================================/// calculateur des DLA (page mon profil et menu.php)//==============================================================================/// récup des variable dans mon profilif (window.location.href === 'http://games.gobland.fr/ProfilPerso.php') {// Fonction pour actualiser les variables et rafraîchir la page// Récupération de l'élément contenant les datesconst dateContainer = document.querySelector('#content div#identite table.gf tbody tr:nth-child(2) td:nth-child(2)');// Vérification si l'élément est récupéréif (dateContainer) {// Récupération de tous les éléments <span> dans dateContainerconst spans = dateContainer.querySelectorAll('span.dla');// Vérification si les éléments <span> sont trouvésif (spans.length >= 3) {const DLA1 = spans[0].nextSibling.textContent.trim();const DLA2 = spans[1].nextSibling.textContent.trim();const DLA3 = spans[2].nextSibling.textContent.trim();// Stockage dans le local storagelocalStorage.setItem('DLA1', DLA1);localStorage.setItem('DLA2', DLA2);localStorage.setItem('DLA3', DLA3);} else {console.error('Erreur récup DLAs . Pas assez de balises <span> trouvées.');}// Recherche de l'élément XPath spécifiqueconst xpath = '/html/body/div[3]/div/table/tbody/tr[2]/td[2]/table/tbody/tr[2]/td/br[3]';const xpathR###lt = document.evaluate(xpath, document, null, XPathR###lt.ANY_TYPE, null);// Récupération du nœud correspondant à l'élément XPathconst node = xpathR###lt.iterateNext();if (node) {// Récupération du texte suivant l'élément XPathconst valeurPAText = node.nextSibling.textContent;// Expression régulière pour extraire le nombreconst regex = /(\d+)/;const match = valeurPAText.match(regex);if (match && match[1]) {valeurPA = parseInt(match[1], 10);console.log('Valeur de PA:', valeurPA);localStorage.setItem('valeurPA', valeurPA);} else {console.error('Aucune correspondance trouvée pour la valeur de PA.');}} else {console.error('Élément XPath pour la valeur de PA non trouvé.');}}else {console.error('Conteneur de dates non trouvé.');}// Récupération de l'heure actuelle de Parisconst now = new Date();console.log('now', now);const options = { timeZone: 'Europe/Paris', hour24: false };const currentDateTime = now.toLocaleString('fr-FR', options);// Conversion des dates en objets Dateconst DLA1 = localStorage.getItem('DLA1');const DLA2 = localStorage.getItem('DLA2');const DLA3 = localStorage.getItem('DLA3');const dateDLA1 = new Date(DLA1);const dateDLA2 = new Date(DLA2);const dateDLA3 = new Date(DLA3);localStorage.setItem('dateDLA1', dateDLA1);localStorage.setItem('dateDLA2', dateDLA2);localStorage.setItem('dateDLA3', dateDLA3);console.log('Date pour DLA1:', dateDLA1);console.log('Date pour DLA2:', dateDLA2);console.log('Date pour DLA3:', dateDLA3);// Calcul de la différence en millisecondesconst diffDLA1 = dateDLA1 - now;const diffDLA2 = dateDLA2 - now;const diffDLA3 = dateDLA3 - now;localStorage.setItem('diffDLA1', diffDLA1);localStorage.setItem('diffDLA2', diffDLA2);localStorage.setItem('diffDLA3', diffDLA3);// Calcul de la différence en minutesconst diffMinutesDLA1 = Math.round(Math.abs(diffDLA1 / (1000 * 60)));const diffMinutesDLA2 = Math.round(Math.abs(diffDLA2 / (1000 * 60)));const diffMinutesDLA3 = Math.round(Math.abs(diffDLA3 / (1000 * 60)));localStorage.setItem('diffMinutesDLA1', diffMinutesDLA1);localStorage.setItem('diffMinutesDLA2', diffMinutesDLA2);localStorage.setItem('diffMinutesDLA3', diffMinutesDLA3);console.log('Différence DLA1 en minutes:', diffMinutesDLA1, 'minutes');console.log('Différence DLA2 en minutes:', diffMinutesDLA2, 'minutes');console.log('Différence DLA3 en minutes:', diffMinutesDLA3, 'minutes');// Enregistrement de l'heure de réactualisation des variables dans le localStorageconst lastRefreshTime = new Date().toLocaleString('fr-FR', { timeZone: 'Europe/Paris' });localStorage.setItem('lastRefreshTime', lastRefreshTime);}/// affichage des variables dans le menu left (j'ai galéré on doit pvr faire mieux^^)if ($(location).attr('href').match(/http:\/\/(.*\.)?gobland\.fr\/Menu\.php/i)) {// Récupération de l'élément cibléconst DLA1 = localStorage.getItem('DLA1');const DLA2 = localStorage.getItem('DLA2');const DLA3 = localStorage.getItem('DLA3');const diffMinutesDLA1 = localStorage.getItem('diffMinutesDLA1');const diffMinutesDLA2 = localStorage.getItem('diffMinutesDLA2');const diffMinutesDLA3 = localStorage.getItem('diffMinutesDLA3');const dateDLA1 = new Date(localStorage.getItem('dateDLA1'));const dateDLA2 = new Date(localStorage.getItem('dateDLA2'));const dateDLA3 = new Date(localStorage.getItem('dateDLA3'));const valeurPA = localStorage.getItem('valeurPA');const now = new Date();const targetElement = document.getElementById('dim');let textToInsert = '';// Obtenez le jour de la semaine (0 pour dimanche, 1 pour lundi, ... , 6 pour samedi)const dayOfWeek = now.getDay();// Vérifiez si c'est le week-end (samedi ou dimanche)const isWeekend = dayOfWeek === 0 || dayOfWeek === 6;// Conditions pour déterminer le texte à insérer//speedXekk endif (isWeekend) {if (now > dateDLA3) {textToInsert = `<span style="color: red" title="Décalez de ${diffMinutesDLA3} minutes pour ne pas perdre votre trimul">Trimul dépassé!</span>`;} else if (now > dateDLA2) {textToInsert = `<span style="color: blue" title="Trimul dans ${diffMinutesDLA3} minutes">Cumul jouable</span>`;} else if (now > dateDLA1) {if (valeurPA === '0') {textToInsert = `<span style="color: green" title="Vous pouvez activer. Cumul dans ${diffMinutesDLA2} minutes">DLA dépassée</span>`;} else {textToInsert = `<span style="color: red" title="Décalez de ${diffMinutesDLA1} minutes pour ne pas perdre vos ${valeurPA} PA">DLA dépassée</span>`;}} else if (now < dateDLA1) {textToInsert = `<span style="color: green" title="Il vous reste ${valeurPA} PA">DLA dans ${diffMinutesDLA1} minutes</span>`;}}//pas speed week endif (!isWeekend) {if (now > dateDLA3) {textToInsert = `<span style="color: red" title="Décalez de ${diffMinutesDLA3} minutes pour ne pas perdre de DLA">DLA dépassée</span>`;} else if (now > dateDLA2) {textToInsert = `<span style="color: red" title="Décalez de ${diffMinutesDLA2} minutes pour jouer un cumul">DLA dépassée</span>`;} else if (now > dateDLA1) {if (valeurPA === '0') {textToInsert = `<span style="color: green" title="Vous pouvez activer. Cumul dans ${diffMinutesDLA2} minutes">DLA dépassée</span>`;} else {textToInsert = `<span style="color: red" title="Décalez de ${diffMinutesDLA1} minutes pour ne pas perdre vos ${valeurPA} PA">DLA dépassée</span>`;}} else if (now < dateDLA1) {textToInsert = `<span style="color: green" title="Il vous reste ${valeurPA} PA">DLA dans ${diffMinutesDLA1} minutes</span>`;}}targetElement.insertAdjacentHTML('afterend', `<br>${textToInsert}`);// Ajout du texte sur la date du dernier resfresh// Récupération de l'élément cibléconst targetElement2 = document.querySelector('.dla > span:nth-child(7)');if (targetElement) {const lastRefreshTime = localStorage.getItem('lastRefreshTime');if (lastRefreshTime) {const smallText = document.createElement('small');smallText.textContent = `(${lastRefreshTime})`;smallText.style.fontSize = 'smaller'; // Réduit la taille de la policesmallText.title = 'Date du dernier refresh. Pour rafraichir le calcul, allez sur votre page profil et actualisez la page'targetElement2.appendChild(document.createElement('br')); // Saut de lignetargetElement2.appendChild(smallText); // Ajout du texte entre parenthèses après le 7e span}}}//==========================================================================================================================================================================================================================///affichage de l'icone Gobzilla avec version au survol dans le menu left//==========================================================================================================================================================================================================================(function() {'use strict';var iconUrl = 'https://i.ibb.co/s1MG4Dt/g-OBZILLAICON-removebg.png';var scriptVersion = GM_info.script.version;// URL de redirection au clic sur l'icônevar redirectionUrl = 'http://games.gobland.fr/goodies.php';var icon = document.createElement('img');icon.src = iconUrl;icon.style.position = 'absolute';icon.style.top = '-145px'; //icon.style.left = '80px';icon.style.zIndex = '9999';icon.style.width = '80px';icon.style.height = '50px';icon.style.opacity = '0.7';icon.title = 'Version du script: ' + scriptVersion;// Ajout du gestionnaire d'événements pour le clic sur l'icôneicon.addEventListener('click', function() {window.open(redirectionUrl, '_blank', 'width=500,height=500'); // Ouvre l'URL dans une nouvelle fenêtre flottante});// Sélectionnez l'endroit où vous souhaitez ajouter l'icônevar targetElement = document.querySelector('.presentation'); // Remplacez par la classe ou l'ID de l'élément où vous voulez ajouter l'icône// Ajoutez l'icône à l'emplacement sélectionnéif (targetElement) {targetElement.appendChild(icon);}})();//==========================================================================================================================================================================================================================// Page suivants - Ajout de la vue sur la page "ordre", ajout de boutons de racourcis vers des ordres et mise en couleur de la position sur le profil//==========================================================================================================================================================================================================================// Vérification si la variable a déjà été définieif (!window.localStorage.getItem('followersnumbers')) {// Sélection de l'élément contenant les informations des Suivantslet followersTable = document.querySelector('td[style="text-align:left;vertical-align:top;"] table');// Vérification si l'élément existeif (followersTable) {let followersnumbers = []; // Tableau pour stocker les numéroslet followersnames = []; // Tableau pour stocker les textes restants// Récupération de tous les éléments <a> dans la tablelet followerLinks = followersTable.querySelectorAll('a');// Parcours des liens pour extraire les informationsfollowerLinks.forEach(link => {let text = link.textContent; // Récupération du texte du lien// Vérification du motif "[numéro] texte restant"let regex = /\[(\d+)\]\s(.+)/;let match = text.match(regex);if (match) {let numero = match[1]; // Numéro entre crochetlet resteTexte = match[2]; // Texte restant// Stockage dans les tableauxfollowersnumbers.push(numero);followersnames.push(resteTexte);}});// Enregistrement dans le stockage locallocalStorage.setItem('followersnumbers', JSON.stringify(followersnumbers));localStorage.setItem('followersnames', JSON.stringify(followersnames));}}//mise en couleur de la position de la CM dans Profilif ($(location).attr('href').match(/http:\/\/(.*\.)?gobland\.fr\/Follower\.php\?IdFO=\d+/i)) {(function() {// Sélectionne tous les éléments 'td' contenant le texte des positionsconst positionElements = document.querySelectorAll('td[style="text-align:left;"]');// Parcours des éléments pour trouver celui contenant les informations de positionpositionElements.forEach((element) => {const text = element.textContent.trim();if (text.startsWith('X =') && text.includes('Y =') && text.includes('N =')) {const positionInfo = text.match(/X = (-?\d+) \| Y = (-?\d+) \| N = (-?\d+)/);if (positionInfo && positionInfo.length === 4) {const posX = positionInfo[1];const posY = positionInfo[2];const posN = positionInfo[3];// Créer des éléments <strong> pour mettre en gras le texte et le colorer en rougeconst posXElement = document.createElement('strong');posXElement.textContent = `X = ${posX}`;posXElement.style.color = 'red'; // Changer la couleur en rougeconst posYElement = document.createElement('strong');posYElement.textContent = `Y = ${posY}`;posYElement.style.color = 'red'; // Changer la couleur en rougeconst posNElement = document.createElement('strong');posNElement.textContent = `N = ${posN} `;posNElement.style.color = 'red'; // Changer la couleur en rouge// Créer un élément pour le reste du texteconst restOfText = document.createElement('span');restOfText.textContent = text.slice(text.indexOf('Perception'));// Remplacer le contenu de l'élément avec les éléments <strong> colorés et le reste du texteelement.innerHTML = '';element.appendChild(posXElement);element.appendChild(document.createTextNode(' | '));element.appendChild(posYElement);element.appendChild(document.createTextNode(' | '));element.appendChild(posNElement);element.appendChild(document.createElement('br'));element.appendChild(restOfText);}}});})();}if ($(location).attr('href').match(/http:\/\/(.*\.)?gobland\.fr\/fo_equipement\.php\?IdFO=\d+/i)) {// Sélection de l'élément spécifié dans la pagevar elements = document.querySelectorAll('html body div#content div#identite table.gf tbody tr td.gfmm table tbody tr td.left table tbody tr.pair td');// Vérification si des éléments sont trouvésif (elements.length > 0) {// Création d'un tableau pour stocker les contenus des élémentsvar contents = [];// Boucle à travers les éléments trouvés pour récupérer leur contenuelements.forEach(function(element) {var content = element.textContent.trim();contents.push(content);});// Stockage des contenus dans le stockage locallocalStorage.setItem('contenus_elements', JSON.stringify(contents));// Affichage des contenus dans la console (pour vérification)console.log('Contenus des éléments :', contents);} else {console.log('Aucun élément correspondant trouvé.');}}// ajout de la vue (trèsors) direct dans la page Ordre, si on clique sur une ID ça ajoute l'odre, ya aussi des boutons de raccourcisif ($(location).attr('href').match(/http:\/\/(.*\.)?gobland\.fr\/fo_orders\.php\?IdFO=\d+/i)) {window.addEventListener('load', function() {// Récupération des données de trésors depuis localStorageconst tresorsData = localStorage.getItem('tresorsData');if (!tresorsData) {const errorMessage = document.createElement('div');errorMessage.textContent = 'Aucune donnée, allez sur votre page de vue avant';errorMessage.style.color = 'red'; // Style facultatif pour le texte// Insérer le message d'erreur dans le corps de la page ou un élément spécifiquedocument.body.appendChild(errorMessage);} else {const tresors = JSON.parse(tresorsData);// Création d'un élément de tableauconst nouveauTableau = document.createElement('table');nouveauTableau.style.border = '1px solid black'; // Style du tableau// Création de l'en-tête du tableauconst enTete = nouveauTableau.createTHead();const enTeteLigne = enTete.insertRow();['Distance', 'Réf.', 'Nom', 'X', 'Y', 'N'].forEach((enteteColonne) => {const cellule = enTeteLigne.insertCell();cellule.textContent = enteteColonne;cellule.style.fontWeight = 'bold'; // Style pour l'en-têtecellule.style.border = '1px solid black'; // Style des cellules});// Ajout des données de trésors dans le tableauconst corps = nouveauTableau.createTBody();tresors.forEach((tresor) => {const ligne = corps.insertRow();['distance', 'reference', 'nom', 'x', 'y', 'n'].forEach((colonne, index) => {const cellule = ligne.insertCell();cellule.textContent = tresor[colonne];cellule.style.border = '1px solid black'; // Style des cellules});});// Trouver l'élément spécifique où insérer le tableau des trésorsconst elementSpecifique = document.evaluate('/html/body/div[3]/div/table/tbody/tr[2]/td[2]/form/table/tbody/tr[6]', document, null, XPathR###lt.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;if (elementSpecifique) {// Insérer le tableau des trésors après l'élément spécifiqueelementSpecifique.insertAdjacentElement('afterend', nouveauTableau);console.log('Tableau inséré avec succès');} else {console.log('Élément spécifique non trouvé');}}});window.addEventListener('load', function() {const tresorsData = localStorage.getItem('tresorsData');if (tresorsData) {const tresors = JSON.parse(tresorsData);const selectedNumbers = [];const positions = [];let moveCommand = '';let pickCommand = '';// Créer un élément pour le message contextuelconst tooltip = document.createElement('div');tooltip.style.position = 'absolute';tooltip.style.backgroundColor = '#f7f12e';tooltip.style.border = '1px solid #d3d3d3';tooltip.style.padding = '5px';tooltip.style.borderRadius = '5px';tooltip.style.boxShadow = '0px 0px 10px rgba(0,0,0,0.2)';tooltip.style.display = 'none'; // Masquer par défauttooltip.textContent = 'Ordre ajouté';document.body.appendChild(tooltip);// Créer un tableau pour suivre les cellules cliquéesconst clickedRefCells = new Set(); // Pour les cellules de la colonne Réf.const clickedPosCells = new Set(); // Pour les cellules de position// Gérer les cellules de la colonne "Réf."const references = [];const xpathRef = '/html/body/div[3]/div/table/tbody/tr[2]/td[2]/form/table/tbody/table/tbody/tr/td[2]';const refElements = document.evaluate(xpathRef, document, null, XPathR###lt.ORDERED_NODE_SNAPSHOT_TYPE, null);for (let i = 0; i < refElements.snapshotLength; i++) {references.push(refElements.snapshotItem(i));}references.forEach((reference) => {reference.style.cursor = 'crosshair';reference.title = 'Cliquez pour ramasser';reference.addEventListener('click', function(event) {event.preventDefault(); // Empêche les actions par défaut// Appliquer le style à la cellule cliquéethis.style.border = '4px solid red'; // Bordure pour la cellule cliquéeconst referenceText = this.textContent.trim();const referenceValue = parseInt(referenceText);if (!isNaN(referenceValue)) {selectedNumbers.push(referenceValue);if (selectedNumbers.length === 1) {pickCommand = `pick(OBJECT, ${selectedNumbers[0]});`;} else {const formattedNumbers = selectedNumbers.join(', ');pickCommand = `foreach(objects() as o):if(in(id(o), array(${formattedNumbers}))):pick(OBJECT, id(o));endif;endforeach;`;}updateTextarea();}// Afficher le message contextuel à côté du curseurtooltip.style.left = `${event.pageX + 10}px`; // Position horizontaletooltip.style.top = `${event.pageY + 10}px`; // Position verticaletooltip.style.display = 'block'; // Afficher le message});});// Gérer les cellules de position (X, Y, N)const positionCells = [];const xpathPos = '/html/body/div[3]/div/table/tbody/tr[2]/td[2]/form/table/tbody/table/tbody/tr/td[position() >= 4]';const posElements = document.evaluate(xpathPos, document, null, XPathR###lt.ORDERED_NODE_SNAPSHOT_TYPE, null);for (let i = 0; i < posElements.snapshotLength; i++) {positionCells.push(posElements.snapshotItem(i));}positionCells.forEach((positionCell) => {positionCell.style.cursor = 'crosshair';positionCell.title = 'Cliquez pour se déplacer à cet endroit';positionCell.addEventListener('click', function(event) {event.preventDefault(); // Empêche les actions par défaut// Appliquer le style à la cellule cliquéeif (!clickedPosCells.has(this)) {this.style.backgroundColor = '#d3d3d3'; // Couleur de fond pour la cellule cliquéeclickedPosCells.add(this); // Ajouter à l'ensemble des cellules cliquées}let position = '';const positionCells = this.parentElement.querySelectorAll("td:nth-child(n+4)");positionCells.forEach((cell, index) => {position += cell.textContent.trim();if (index !== positionCells.length - 1) {position += ', ';}});moveCommand = `move(${position});`;updateTextarea();// Afficher le message contextuel à côté du curseurtooltip.style.left = `${event.pageX + 10}px`; // Position horizontaletooltip.style.top = `${event.pageY + 10}px`; // Position verticaletooltip.style.display = 'block'; // Afficher le message});});// Fonction pour réinitialiser le style des cellulesfunction resetCellStyles() {// Réinitialiser le style des cellules de position uniquementpositionCells.forEach(cell => {if (!clickedPosCells.has(cell)) {cell.style.backgroundColor = ''; // Réinitialiser la couleur de fond des cellules de position}});// Réinitialiser le style des cellules de référence uniquementreferences.forEach(cell => {if (!clickedRefCells.has(cell)) {cell.style.border = ''; // Réinitialiser la bordure des cellules de référence}});}// Fonction pour mettre à jour le contenu du textareafunction updateTextarea() {const textarea = document.querySelector("textarea[name='sc']");let output = '';if (moveCommand) {output += `${moveCommand}\n`;}if (pickCommand) {output += `${pickCommand}\n`;}textarea.value = output;}// Cacher le message contextuel lorsque la souris se déplacedocument.addEventListener('mousemove', function() {tooltip.style.display = 'none'; // Cacher le message lorsqu'on se déplace});} else {console.log('Aucune donnée de trésors trouvée dans localStorage');}// Fonction pour générer le texte à insérer dans le textarea en fonction du bouton cliquéfunction generateText(action) {let output = '';switch (action) {case 'move':output = 'move();';break;case 'toutramasser':output = 'foreach(objects() as o):pick(OBJECT, id(o));endforeach;';break;case 'toutdeposerausol':output = 'drop(OBJECT, ALL, GROUND, GROUND);';break;case 'toutdeposerauchateau':output = 'drop(OBJECT, ALL, PLACE, 45337);';break;case 'toutdeposeraumanoir':output = 'drop(OBJECT, ALL, PLACE, 46494);';break;case 'toutramassersaufcorps':output = 'foreach(objects() as o):if(bnot(eq(category(o), "Corps"))):pick(OBJECT, id(o));endif;endforeach;';break;case 'entrainer':output = 'train();';break;case 'dépot1objetcase':output = 'drop(OBJECT, ID de l objet, GROUND, GROUND);';break;case 'dépot1objetchateau':output = 'drop(OBJECT, ID de l objet, PLACE, 45337);';break;case 'dépot1objetmanoir':output = 'drop(OBJECT, ID de l objet, PLACE, 46494);';break;case 'ramasserplantes':output = 'foreach(plants() as o):pick(PLANT, id(o));endforeach;';break;case 'ramasserct':output = "foreach(objects() as o): if(eq(name(o), 'CT')): pick(OBJECT, id(o)); endif; endforeach;"break;case 'attackmonster':output = "attack(MONSTER, Id);"break;case 'attackall':output = "foreach(monsters() as o):attack(MONSTER, id(o));endforeach;"break;case 'equip':output = "equip(Id);"break;case 'unequip':output = "unequip(Id);"break;case 'scout':output = "scout();"break;case 'passtp':output = "enter(PLACE|PORTAL, Id);"break;// Ajoutez des cases pour d'autres actions ou boutonsdefault:break;}return output;}// recup du num de goblin pour l'ordre followfunction generateFollowOrder(distance) {const gobId = localStorage.getItem('gobId'); // Récupérer l'ID depuis le local storageif (!gobId) {return "Je n'ai pas votre numéro, visitez votre page profil et revenez ici !"; // Retourner le message si gobId est null}const followOrder = `follow(PLAYER, ${gobId}, ${distance});`;return followOrder;}// Création de la liste déroulante pour choisir la distance pour l'ordre followconst followDistanceSelect = document.createElement('select');followDistanceSelect.style.backgroundColor= '#64b3e4';[0, 1, 2, 3, 4, 5].forEach((value) => {const option = document.createElement('option');option.value = value;option.textContent = value + ' cases'; // Ajout de " cases" après chaque nombrefollowDistanceSelect.appendChild(option);});// Sélection du textareaconst textarea = document.querySelector("textarea[name='sc']");// Fonction pour insérer du texte dans le textareafunction insertText(text) {textarea.value += text + '\n'; // Ajout du nouveau texte à la suite du texte existant}// Création du bouton 0 "Move"const button0 = document.createElement('button');button0.textContent = 'Se déplacer';button0.style.backgroundColor= '#a8eff1'; // Définir la couleur de fondbutton0.title = 'cliquer sur une position dans le tableau en dessous pour faire déplacer votre suivant à cet endroit, ou cliquez ici et ajoutez manuellement vos coordonées';button0.addEventListener('click', function(event) {event.preventDefault(); // Empêche le rafraîchissement de la pageconst output = generateText('move');insertText(output);});// Création du premier bouton "Tout ramasser"const button1 = document.createElement('button');button1.textContent = 'Tout ramasser';button1.style.backgroundColor= '#e4ed97'; // Définir la couleur de fondbutton1.addEventListener('click', function(event) {event.preventDefault(); // Empêche le rafraîchissement de la pageconst output = generateText('toutramasser');insertText(output);});// Création du deuxième boutonconst button2 = document.createElement('button');button2.textContent = 'Tout déposer (sol)';button2.style.backgroundColor= '#e4ed97'; // Définir la couleur de fondbutton2.addEventListener('click', function(event) {event.preventDefault(); // Empêche le rafraîchissement de la pageconst output = generateText('toutdeposerausol');insertText(output);});// Création du troisième boutonconst button3 = document.createElement('button');button3.textContent = 'Tout déposer (chateau)';button3.style.backgroundColor= '#e4ed97'; // Définir la couleur de fondbutton3.addEventListener('click', function(event) {event.preventDefault(); // Empêche le rafraîchissement de la pageconst output = generateText('toutdeposerauchateau');insertText(output);});// Création du troisième boutonconst button3b = document.createElement('button');button3b.textContent = 'Tout déposer (manoir)';button3b.style.backgroundColor= '#e4ed97'; // Définir la couleur de fondbutton3b.addEventListener('click', function(event) {event.preventDefault(); // Empêche le rafraîchissement de la pageconst output = generateText('toutdeposeraumanoir');insertText(output);});// Création du 4em boutonconst button4 = document.createElement('button');button4.textContent = 'Tout ramasser (sauf corps)';button4.style.backgroundColor= '#e4ed97'; // Définir la couleur de fondbutton4.addEventListener('click', function(event) {event.preventDefault(); // Empêche le rafraîchissement de la pageconst output = generateText('toutramassersaufcorps');insertText(output);});// Création du 5em boutonconst button5 = document.createElement('button');button5.textContent = 'Entrainer';button5.style.backgroundColor= '#a8eff1';button5.addEventListener('click', function(event) {event.preventDefault(); // Empêche le rafraîchissement de la pageconst output = generateText('entrainer');insertText(output);});// Création du 6em boutonconst button6 = document.createElement('button');button6.textContent = 'Déposer un objet (sol)';button6.title = 'remplacer ID par l id de votre objet';button6.style.backgroundColor= '#e4ed97'; // Définir la couleur de fondbutton6.addEventListener('click', function(event) {event.preventDefault(); // Empêche le rafraîchissement de la pageconst output = generateText('dépot1objetcase');insertText(output);});// Création du 7em boutonconst button7 = document.createElement('button');button7.textContent = 'Déposer un objet (chateau)';button7.title = 'remplacer ID par l id de votre objet';button7.style.backgroundColor= '#e4ed97'; // Définir la couleur de fondbutton7.addEventListener('click', function(event) {event.preventDefault(); // Empêche le rafraîchissement de la pageconst output = generateText('dépot1objetchateau');insertText(output);});// Création du 7em bouton bisconst button7b = document.createElement('button');button7b.textContent = 'Déposer un objet (manoir)';button7b.title = 'remplacer ID par l id de votre objet';button7b.style.backgroundColor= '#e4ed97'; // Définir la couleur de fondbutton7b.addEventListener('click', function(event) {event.preventDefault(); // Empêche le rafraîchissement de la pageconst output = generateText('dépot1objetmanoir');insertText(output);});// Création du 8em boutonconst button8 = document.createElement('button');button8.textContent = 'Ramasser plantes';button8.style.backgroundColor= '#e4ed97'; // Définir la couleur de fondbutton8.addEventListener('click', function(event) {event.preventDefault(); // Empêche le rafraîchissement de la pageconst output = generateText('ramasserplantes');insertText(output);});// Création du 9em boutonconst button9 = document.createElement('button');button9.textContent = 'Ramasser CT';button9.style.backgroundColor= '#e4ed97'; // Définir la couleur de fondbutton9.addEventListener('click', function(event) {event.preventDefault(); // Empêche le rafraîchissement de la pageconst output = generateText('ramasserct');insertText(output);});// Création du bouton pour l'ordre followconst followButton = document.createElement('button');followButton.textContent = 'Me suivre à';followButton.style.backgroundColor= '#a8eff1';followButton.title = 'Sélectionner la distance et cliquer';followButton.addEventListener('click', function(event) {event.preventDefault(); // Empêche le rafraîchissement de la pageconst distance = followDistanceSelect.value;const followOrderText = generateFollowOrder(distance);insertText(followOrderText);});// Création du 11em boutonconst button11 = document.createElement('button');button11.textContent = 'Attaquer un monstre';button11.style.backgroundColor= '#d37d7d'button11.title = "Remplacer l'ID";button11.addEventListener('click', function(event) {event.preventDefault(); // Empêche le rafraîchissement de la pageconst output = generateText('attackmonster');insertText(output);});// Création du 12em boutonconst button12 = document.createElement('button');button12.textContent = 'Attaquer tout';button12.style.backgroundColor= '#d37d7d'button12.addEventListener('click', function(event) {event.preventDefault(); // Empêche le rafraîchissement de la pageconst output = generateText('attackall');insertText(output);});// Création du 13em boutonconst button13 = document.createElement('button');button13.textContent = 'Equiper';button13.style.backgroundColor= '#e4ed97';button13.title = "Remplacer l'ID";button13.addEventListener('click', function(event) {event.preventDefault(); // Empêche le rafraîchissement de la pageconst output = generateText('equip');insertText(output);});// Création du 14em boutonconst button14 = document.createElement('button');button14.textContent = 'Déséquiper';button14.style.backgroundColor= '#e4ed97';button14.title = "Remplacer l'ID";button14.addEventListener('click', function(event) {event.preventDefault(); // Empêche le rafraîchissement de la pageconst output = generateText('unequip');insertText(output);});// Création du 15em boutonconst button15 = document.createElement('button');button15.textContent = 'Espionner';button15.style.backgroundColor= '#a8eff1';button15.addEventListener('click', function(event) {event.preventDefault(); // Empêche le rafraîchissement de la pageconst output = generateText('scout');insertText(output);});// Création du 16em boutonconst button16 = document.createElement('button');button16.textContent = 'Prendre un TP';button16.style.backgroundColor= '#a8eff1';button16.title = "Remplacer l'ID";button16.addEventListener('click', function(event) {event.preventDefault(); // Empêche le rafraîchissement de la pageconst output = generateText('passtp');insertText(output);});function createDropdownMenu() {// Création du menu déroulant avec des optionsconst dropdown = document.createElement('select');const option1 = document.createElement('option');option1.textContent = 'Option 1';const option2 = document.createElement('option');option2.textContent = 'Option 2';// Ajout des options au menu déroulantdropdown.appendChild(option1);dropdown.appendChild(option2);// Style pour positionner le menu déroulantdropdown.style.position = 'absolute';dropdown.style.left = '150px'; // Changer la position en fonction de votre mise en pagedropdown.style.top = '50px'; // Changer la position en fonction de votre mise en page// Ajout du menu déroulant au documentdocument.body.appendChild(dropdown);return dropdown;}// Trouver les boutons "Déposer un objet (sol)" et "Déposer un objet (château)"const solButton = document.querySelector('.gfmm > form:nth-child(11) > div:nth-child(2) > div:nth-child(5) > button:nth-child(8)');const chateauButton = document.querySelector('.gfmm > form:nth-child(11) > div:nth-child(2) > div:nth-child(5) > button:nth-child(9)');// Gérer l'événement de clic sur le bouton "Déposer un objet (sol)"if (solButton) {solButton.addEventListener('click', function() {// Créer le menu déroulantconst dropdown = createDropdownMenu();// Positionner le menu à côté du bouton "Déposer un objet (sol)"dropdown.style.left = solButton.getBoundingClientRect().right + 'px';dropdown.style.top = solButton.getBoundingClientRect().top + 'px';});}// Gérer l'événement de clic sur le bouton "Déposer un objet (château)"if (chateauButton) {chateauButton.addEventListener('click', function() {// Créer le menu déroulantconst dropdown = createDropdownMenu();// Positionner le menu à côté du bouton "Déposer un objet (château)"dropdown.style.left = chateauButton.getBoundingClientRect().right + 'px';dropdown.style.top = chateauButton.getBoundingClientRect().top + 'px';});}// Création des conteneurs pour chaque catégorieconst basicActionsContainer = document.createElement('div');const equipmentContainer = document.createElement('div');const warriorsContainer = document.createElement('div');// Ajout des boutons dans les conteneurs appropriésbasicActionsContainer.appendChild(button0);basicActionsContainer.appendChild(button5); // Actions de basebasicActionsContainer.appendChild(followButton);basicActionsContainer.appendChild(followDistanceSelect);basicActionsContainer.appendChild(button15);basicActionsContainer.appendChild(button16);equipmentContainer.appendChild(button1); // ÉquipementequipmentContainer.appendChild(button4);equipmentContainer.appendChild(button8);equipmentContainer.appendChild(button9);equipmentContainer.appendChild(document.createElement('br'));equipmentContainer.appendChild(button2);equipmentContainer.appendChild(button3);equipmentContainer.appendChild(button3b);equipmentContainer.appendChild(button6);equipmentContainer.appendChild(button7);equipmentContainer.appendChild(button7b);equipmentContainer.appendChild(document.createElement('br'));equipmentContainer.appendChild(button13);equipmentContainer.appendChild(button14);warriorsContainer.appendChild(button11); // GuerrierswarriorsContainer.appendChild(button12);// Ajout du style pour masquer les catégories par défautbasicActionsContainer.style.display = 'none';equipmentContainer.style.display = 'none';warriorsContainer.style.display = 'none';// Gestionnaire d'événement pour masquer ou afficher une catégoriefunction toggleCategory(category, button) {const display = category.style.display;if (display === 'none') {category.style.display = 'block';button.textContent = button.textContent.replace('►', '▼');} else {category.style.display = 'none';button.textContent = button.textContent.replace('▼', '►');}}// Fonction pour créer un bouton de catégorie et son gestionnaire d'événementsfunction createCategoryButton(container, buttonText) {const toggleButton = document.createElement('button');toggleButton.textContent = `${buttonText} ►`;toggleButton.addEventListener('click', function(event) {event.preventDefault(); // Empêcher le rafraîchissement de la pagetoggleCategory(container, this);});return toggleButton;}// Création des boutons pour masquer ou afficher les catégoriesconst basicActionsToggle = createCategoryButton(basicActionsContainer, 'Actions de base');basicActionsToggle.title = "Cliquez pour afficher/masquer les actions de base";basicActionsToggle.style.backgroundColor= '#8de4e7';basicActionsToggle.style.fontWeight= 'bold'const equipmentToggle = createCategoryButton(equipmentContainer, 'Équipement');equipmentToggle.style.backgroundColor= '#ced688';equipmentToggle.style.fontWeight= 'bold'const warriorsToggle = createCategoryButton(warriorsContainer, 'Guerriers');warriorsToggle.style.backgroundColor= '#d37d7d';warriorsToggle.style.fontWeight= 'bold'// Trouver l'élément spécifique où insérer les boutonsconst specificElement = document.evaluate('/html/body/div[3]/div/table/tbody/tr[2]/td[2]/form/table', document, null, XPathR###lt.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;if (specificElement) {// Création d'un conteneur principal pour tous les boutons et les catégoriesconst allButtonsContainer = document.createElement('div');allButtonsContainer.appendChild(basicActionsToggle);allButtonsContainer.appendChild(basicActionsContainer);allButtonsContainer.appendChild(document.createElement('br'));allButtonsContainer.appendChild(equipmentToggle);allButtonsContainer.appendChild(equipmentContainer);allButtonsContainer.appendChild(document.createElement('br'));allButtonsContainer.appendChild(warriorsToggle);allButtonsContainer.appendChild(warriorsContainer);// Ajoutez les autres catégories de la même manière// Insérer le conteneur des boutons avant l'élément spécifiquespecificElement.parentNode.insertBefore(allButtonsContainer, specificElement);} else {console.log('Élément spécifique non trouvé');}// Sélectionner l'élément cibleconst targetElement = document.querySelector('div.titreMenu:nth-child(9)');if (targetElement) {// Créer un nouvel élément pour le texteconst newElement = document.createElement('p'); // Utilise un <p> pour le texte, ou tout autre élément appropriénewElement.textContent = 'Bienvenue sur GobZilla Script. Cliquez directement sur des coordonées dans la vue clonée pour y déplacer votre suivant. Cliquez sur une ou plusieurs ID de trésors pour les ramasser. Sinon, utilisez les boutons'; // Définir le texte du nouvel élément// Ajouter le nouvel élément sous l'élément cibletargetElement.parentNode.insertBefore(newElement, targetElement.nextSibling);} else {console.error('L\'élément spécifié n\'a pas été trouvé.');}});// Sélection de l'élément contenant le codeconst codeElement = document.querySelector('td > div > pre > code > span > span');if (codeElement) {// Récupération du texte de l'élémentconst texte = codeElement.textContent.trim();// Extraction du mot "stop"const stopIndex = texte.indexOf('stop');let stopData = '';if (stopIndex !== -1) {// Si le mot "stop" est trouvé, récupération de la partie du texte à partir de "stop"stopData = texte.substring(stopIndex, stopIndex + 4);console.log('Donnée "stop" extraite :', stopData);} else {console.log('Mot "stop" non trouvé dans le texte');}} else {console.log('Élément contenant le code non trouvé');}}//==========================================================================================================================================================================================================================// Page équipement - récuprer les BM du matos templaté et en calculer le total//==========================================================================================================================================================================================================================if ($(location).attr('href').match(/http:\/\/(.*\.)?gobland\.fr\/Equipement\.php/i)) {(function() {'use strict';let elements = document.querySelectorAll('td.blanc');elements.forEach(element => {if (element.innerText.includes("Viverne")) {let regex = /(DEG:\W\d+)/g;element.innerHTML = element.innerHTML.replace(regex, '<span style="color: #e530cf ;">$1</span>');}else if (element.innerText.includes("Centaure")) {let regex = /(ATT:\W\d+|DEG:\+\d+|PER:\W\d+)/g;element.innerHTML = element.innerHTML.replace(regex, '<span style="color: #e530cf ;">$1</span>');}else if (element.innerText.includes("Titan")) {let regex = /(ATT:\W\d+|DEG:\W\d+|ESQ:\W\d+)/g;element.innerHTML = element.innerHTML.replace(regex, '<span style="color: #e530cf ;">$1</span>');}else if (element.innerText.includes("Sphinx")) {let regex = /(ArmMag:\W\d+)/g;element.innerHTML = element.innerHTML.replace(regex, '<span style="color: #e530cf ;">$1</span>');}else if (element.innerText.includes("Lézard Géant")) {let regex = /(-30 Min)/g;element.innerHTML = element.innerHTML.replace(regex, '<span style="color: #e530cf ;">$1</span>');}else if (element.innerText.includes("Griffon")) {let regex = /(ATT:\W\d+|PER:\W\d+)/g;element.innerHTML = element.innerHTML.replace(regex, '<span style="color: #e530cf ;">$1</span>');}else if (element.innerText.includes("Minotaure")) {let regex = /(ArmMag:\W\d+|ESQ:\W\d+)/g;element.innerHTML = element.innerHTML.replace(regex, '<span style="color: #e530cf ;">$1</span>');}else if (element.innerText.includes("Oni")) {let regex = /(ATT:\W\d+|REG:\W\d+)/g;element.innerHTML = element.innerHTML.replace(regex, '<span style="color: #e530cf ;">$1</span>');}else if (element.innerText.includes("Golem")) {let regex = /(\+30 Min|ArmMag:\W\d+)/g;element.innerHTML = element.innerHTML.replace(regex, '<span style="color: #e530cf ;">$1</span>');}else if (element.innerText.includes("Galopin")) {let regex = /(ESQ:\W\d+|DEG:\W\d+)/g;element.innerHTML = element.innerHTML.replace(regex, '<span style="color: #e530cf ;">$1</span>');}else if (element.innerText.includes("Dragon")) {let regex = /(ATT:\W\d+|DEG:\W\d+|ESQ:\W\d+|ArmMag:\W\d+|RM:\W\d+%|MM\W\d+%)/g;element.innerHTML = element.innerHTML.replace(regex, '<span style="color: #e530cf ;">$1</span>');}else if (element.innerText.includes("Phoenix")) {let regex = /(DEG:\W\d+|REG:\W\d+|MS:\W\d+%)/g;element.innerHTML = element.innerHTML.replace(regex, '<span style="color: #e530cf ;">$1</span>');}else if (element.innerText.includes("Ombre")) {let regex = /(ATT:\W\d+|DEG:\W\d+|PER:\W\d+|RT\W\d+%|MT\W\d+%)/g;element.innerHTML = element.innerHTML.replace(regex, '<span style="color: #e530cf ;">$1</span>');}});})();// Fonction pour extraire et calculer les bonus magiques des objets équipésfunction calculerBonusMagiques() {// Sélection des balises contenant les informations des objets équipésconst elements = document.querySelectorAll('.blanc');let attBonus = 0;let armBonus = 0;let esqBonus = 0;let perBonus = 0;let degBonus = 0;let regBonus = 0;let tempsBonus = 0;// Parcours de chaque élément pour extraire les informationselements.forEach((element) => {const text = element.innerText.toLowerCase();if (text.includes('oni')) {attBonus += 1;regBonus += 1;}else if (text.includes('griffon')) {attBonus += 1;perBonus += 1;}else if (text.includes('viverne')) {degBonus += 1;}else if (text.includes('centaure')) {attBonus += 1;degBonus += 1;perBonus -= 1;}else if (text.includes('titan')) {attBonus += 1;degBonus += 1;esqBonus -= 1;}else if (text.includes('sphinx ')) {armBonus += 1;}else if (text.includes('lézard')) {tempsBonus -= 30;}else if (text.includes('minotaure')) {armBonus += 1;esqBonus -= 1;}else if (text.includes('golem')) {tempsBonus += 30;armBonus += 2;}else if (text.includes('galopin')) {esqBonus += 1;degBonus -= 1;}else if (text.includes('dragon')) {attBonus += 1;degBonus += 1;esqBonus -= 3;armBonus += 2;}else if (text.includes('phoenix')) {degBonus += 1;regBonus += 2;}else if (text.includes('ombre')) {attBonus += 1;degBonus += 1;perBonus -= 1;}});// Calcul du total des bonus malus magiquesconst totalBonus = `ATT${attBonus} | ESQ${esqBonus} | DEG${degBonus} | REG${regBonus} | Arm${armBonus} | PER${perBonus} | Temps${tempsBonus}`;// Sélection de l'élément où insérer les bonusconst enleverButton = document.querySelector('input[name="maction"][value="Enlever"]');// Création d'un élément pour afficher les bonusconst bonusElement = document.createElement('div');// Ajout des styles pour la couleur et le centragebonusElement.style.color = '#e530cf'; // Couleur e530cfbonusElement.style.fontWeight = 'bold' ; // grasbonusElement.style.marginTop = '20px'; // Ajout d'un espace sous l'élément// Fonction pour afficher un symbole '+' ou '-' en fonction de la valeur du bonusconst afficherSymbole = (valeur) => (valeur > 0 ? '+' : valeur < 0 ? '-' : '');// Texte pour afficher les bonuslet texteBonus = 'Total des BMM: ';// Liste des bonus individuels avec leur nom et valeurconst bonusIndividuels = [{ nom: 'ATT', valeur: attBonus },{ nom: 'ESQ', valeur: esqBonus },{ nom: 'DEG', valeur: degBonus },{ nom: 'REG', valeur: regBonus },{ nom: 'ArmMag', valeur: armBonus },{ nom: 'PER', valeur: perBonus },{ nom: 'Temps', valeur: tempsBonus },];// Boucle à travers chaque bonus individuel et les ajouter au textebonusIndividuels.forEach((bonus) => {const symbole = afficherSymbole(bonus.valeur);const valeurAbsolue = Math.abs(bonus.valeur);// Si la valeur du bonus est différente de zéro, l'ajouter au texteif (bonus.valeur !== 0) {texteBonus += `${bonus.nom}${symbole}${valeurAbsolue} | `;}});// Supprimer le dernier symbole '|' s'il est présent à la fintexteBonus = texteBonus.replace(/\s*\|\s*$/, '');// Création d'un élément avec le texte des bonusconst totalBBMElement = document.createElement('div');totalBBMElement.textContent = texteBonus;bonusElement.appendChild(totalBBMElement);// Insertion du texte des bonus après l'élément "Enlever"enleverButton.insertAdjacentElement('afterend', bonusElement);}// Appel de la fonction une fois que la page est chargéewindow.addEventListener('load', calculerBonusMagiques);}//==========================================================================================================================================================================================================================// Page Option - Description de Gobzilla quand on clique sur Goodies et Gobzilla//==========================================================================================================================================================================================================================// rename Goodiesif ($(location).attr('href').match(/http:\/\/(.*\.)?gobland\.fr\/Options\.php/i)) {(function() {'use strict';var newLinkText = "[Googies et GobZilla]";var goodiesLink = document.querySelector('a[href="goodies.php"]');if (goodiesLink) {goodiesLink.textContent = newLinkText;}})();}// ajoute un paragraphe de description de Gobzillaif ($(location).attr('href').match(/http:\/\/(.*\.)?gobland\.fr\/Goodies\.php/i)) {(function() {'use strict';var newLinkText = "[Googies et GobZilla]";var goodiesLink = document.querySelector('a[href="goodies.php"]');if (goodiesLink) {goodiesLink.textContent = newLinkText;}var newMessageLines = ["Roulé à la main sous les Aisselles par DeathMétal 330, puis grandement amélioré par Glak 393","Fonctions principales :","- GobCDM : Cliquez sur un monstre dans la page vue pour avoir sa cdm, si déja dans la base de donnée"," - Affiche une vue 2d activable ou non "," - Boutons pour les ordres des suivants "," - Décoche le vestiaire, décoche l'activation de DLA ",' - Masquer les petits monstres, masquer les arbres'," - Calcul auto de nombre d'entrainements pour passer lvl supérieur" ," - Récupération des caracs et calculs des skills au survol de la souris. "," - Calcul sur les Matériaux, page équipement et habitation"," - Modifie la Css et met en couleur les Gobelins et les gros monstres dans la vue . En rouge > 40, en orange >35, en orange clair >30","- Filtre et tri des monstres + compteur, tri des plantes","- Affiche les lieux étendus (lieux hors de vue), ainsi que les plantes étendues (plantes hors vue, activable via une coche)"," - Herboriser : Affiche en couleur verte les plantes herborisables"," - Met en évidence le Bonus/Malus de concentration sur la page Mon profil "," - Calcul des Bonus Malus Magiques de l'équipement sur la page equipement et met en évidence les bonus magiques sur chaque objet "," - Ajout d'icônes dans le profil et dans la vue "," 🥰 amis"," 👨🍳 monstre à cuisiner ","👁️👁️👁️ VLC Totale","👁️👁️ VLC Importante","👁️ VLC partielle"," Bipez moi si vous voyez des erreurs, il doit y en avoir......."];var developmentMessage = document.querySelector('font[color="RED"]');if (developmentMessage) {developmentMessage.textContent = ''; // Clear existing content// Add an imagevar imageElement = document.createElement('img');imageElement.src = 'https://i.ibb.co/cgqGVCt/g-OBZILLAICON.png'; // Replace with the URL of your imageimageElement.style.maxWidth = '60%'; // Ensure the image fits within the contentdevelopmentMessage.appendChild(imageElement);var welcomeTitle = document.createElement('div');welcomeTitle.style.fontSize = '24px'; // Larger font sizewelcomeTitle.style.fontWeight = 'bold'; // Bold stylewelcomeTitle.style.marginBottom = '10px'; // Add some space belowwelcomeTitle.textContent = 'Bienvenue sur GobZilla';developmentMessage.appendChild(welcomeTitle);newMessageLines.forEach(function(line) {var paragraph = document.createElement('p');paragraph.style.color = 'black';if (line === "Fonctions principales :") {var underline = document.createElement('u');underline.textContent = line;paragraph.appendChild(underline);} else {paragraph.textContent = line;}developmentMessage.appendChild(paragraph);});}})();}//==========================================================================================================================================================================================================================// Page Clan - Récupération des infos et affichage au survol (surrement a fusionner avec meute juste en dessous)//==========================================================================================================================================================================================================================if ($(location).attr('href').match(/http:\/\/(.*\.)?gobland\.fr\/membresClan\.php/i)) {// XPath pour la colonne des noms des goblinsconst xpathExpression = "//table[@class='tab90']/tbody/tr/th[3]";const gobelinPasswords = {'330': '30fae3bb4bf976a5cd29628102d42fd2','393': '461a9bdebd3bca149b7b07380b23c7fb','346': '0da2dc91e48d987245a1c6b1662ea41f','387': 'e49a305f7e7e0c784890f47793dd838a','386' : 'b67d6b06e728729e6a2111ca7ffcf387','388': 'c6d64737a6737cdb73a405353b3f1771','411': 'd72e3819d988118cd76f3f5105c8fc7d','407' : '8fdbd9336997cf1dab7a72cbd80733a3','385': 'd8136cab7a465e1e1e2be460c161ef7e','405' : 'e3d4c7b9250c8bde4c0a4ac7a596ecbb','458' : '1eac37ef925c635c9be62212deba8642','456' : '94238d5187351be4adbfc220e6baea4e'};const goblinIDs = ['330', '393', '346', '387' , '386', '388', '411', '407', '385', '405' , '456' , '458'];// Noms des goblinsconst goblinNames = {'330': 'DeathMétal','393': 'Glakus Batak Batak','346': 'Globulus','387': 'SeRiNy','386': 'IKI','388': 'Wose','411': 'TKeePeR','407': 'Groot','385': 'Tamarand','405': 'Catarate','456' : 'Kroc le Bo','458' : 'Shadox'};function getGoblinInfoById(id) {const goblinData = localStorage.getItem(`goblinInfo_${id}`);console.log(`Data for ID ${id}:`, goblinData); // Vérification dans la consolereturn goblinData;}// Fonction pour afficher les données dans une info bullefunction showGoblinInfoOnHover() {const playerLinks = document.querySelectorAll('td.pfmm a');playerLinks.forEach(link => {link.addEventListener('mouseover', (event) => {const playerId = link.getAttribute('href').match(/\((\d+)\)/)[1];const goblinInfo = getGoblinInfoById(playerId);const tooltip = document.createElement('div');tooltip.classList.add('tooltip');if (goblinInfo) {const lines = goblinInfo.split('\n'); // Divise les lignesconst table = document.createElement('table');table.classList.add('tooltip-table');lines.forEach((line, index) => {const rowData = line.split(',').map(data => data.replace(/^"|"$/g, '')); // Divise les données par colonne et supprime les guillemetsconst row = document.createElement('tr');rowData.forEach(cellData => {const cell = document.createElement(index === 0 ? 'th' : 'td'); // Utilisation de th pour la première lignecell.textContent = cellData;row.appendChild(cell);});table.appendChild(row);});tooltip.appendChild(table);} else {tooltip.textContent = "Aucune information disponible, mot de passe de clan manquant";}document.body.appendChild(tooltip);tooltip.style.position = 'absolute';tooltip.style.top = `${event.clientY + window.scrollY}px`;tooltip.style.left = `${event.clientX}px`;tooltip.style.backgroundColor = 'white';tooltip.style.border = '1px solid black';tooltip.style.padding = '5px';tooltip.style.zIndex = '9999';tooltip.style.backgroundColor = 'yellow'link.addEventListener('mouseout', () => {tooltip.remove();});});});}// Appel de la fonction pour afficher les infos bullesshowGoblinInfoOnHover();// Création du boutonconst refreshButton = document.createElement('input');refreshButton.type = 'button';refreshButton.value = 'Rafraîchir les données externes';refreshButton.title = 'Cliquez ici pour actualiser les données externes. NE PAS ABUSER';refreshButton.onclick = refreshData; // Assure-toi que la fonction refreshData est définie// Ajout de classe au bouton (facultatif)refreshButton.classList.add('refresh-button');// Trouver l'emplacement où tu veux insérer le boutonconst centerElement = document.querySelector('#identite .pfmm');if (centerElement) {centerElement.appendChild(refreshButton);} else {console.error('Impossible de trouver l\'emplacement pour insérer le bouton.');}// Création de l'élément de styleconst style = document.createElement('style');style.innerHTML = `.refresh-button {display: block;margin: 0 auto;text-align: center;}`;// Ajout du style au head de la pagedocument.head.appendChild(style);let lastFetchTime = performance.now();function refreshData() {goblinIDs.forEach(id => {const password = gobelinPasswords[id];const url = `http://ie.gobland.fr/IE_Profil.php?id=${id}&passwd=${password}&sep=,&`;fetch(url).then(response => response.text()).then(csvData => {localStorage.setItem(`goblinInfo_${id}`, csvData);const currentTime = performance.now();const timeElapsed = currentTime - lastFetchTime;lastFetchTime = currentTime;console.log(`Données pour l'ID ${id} rafraîchies et stockées dans le local storage.`);console.log(`Temps écoulé depuis le dernier appel pour ID ${id}: ${timeElapsed} millisecondes`);// Convertir le temps en heures et/ou minutesconst timeInMinutes = Math.floor(timeElapsed / (1000 * 60));const hours = Math.floor(timeInMinutes / 60);const minutes = timeInMinutes % 60;const formattedTime = `${hours}h ${minutes}m`;// Mettre à jour le titre du bouton avec le temps écoulérefreshButton.title = `Cliquez ici pour actualiser les données externes. NE PAS ABUSER. Dernière mise à jour il y a ${formattedTime}`;}).catch(error => {console.error(`Erreur lors de la récupération du CSV pour l'ID ${id}:`, error);});});}}//==========================================================================================================================================================================================================================// Page Meute - Récupération du niveau pour calcul des PX et récup de l'heure de DLA via ieprofil//==========================================================================================================================================================================================================================if ($(location).attr('href').match(/http:\/\/(.*\.)?gobland\.fr\/Meute\.php/i)) {var lvlmeute = $('center:contains("Niveau de la meute :")').text().match(/^(\D*)(\d+)/)[2];window.localStorage.setItem('lvlmeute', lvlmeute);} else {var lvlmeute = window.localStorage.getItem('lvlmeute');}/// recup des données sur http://ie.gobland.fr/IE_Profil.php?id=XXXif ($(location).attr('href').match(/http:\/\/(.*\.)?gobland\.fr\/Meute\.php/i)) {(function() {const gobelinPasswords = {'330': '30fae3bb4bf976a5cd29628102d42fd2','393': '461a9bdebd3bca149b7b07380b23c7fb','346': '0da2dc91e48d987245a1c6b1662ea41f','387': 'e49a305f7e7e0c784890f47793dd838a','386' : 'b67d6b06e728729e6a2111ca7ffcf387','388': 'c6d64737a6737cdb73a405353b3f1771','411': 'd72e3819d988118cd76f3f5105c8fc7d','407' : '8fdbd9336997cf1dab7a72cbd80733a3','385': 'd8136cab7a465e1e1e2be460c161ef7e','405' : 'e3d4c7b9250c8bde4c0a4ac7a596ecbb','458' : '1eac37ef925c635c9be62212deba8642','456' : '94238d5187351be4adbfc220e6baea4e'};const goblinIDs = ['330', '393', '346', '387' , '386', '388', '411', '407', '385', '405' , '456', '458'];const goblinNames = {'330': 'DeathMétal','393': 'Glakus Batak Batak','346': 'Globulus','387':'SeRiNy','386':'IKI','388': 'Wose','411':'TKeePeR','407':'Groot','385':'Tamarand','405':'Catarate','456' : 'Kroc le Bo','458' : 'Shadox'};function extractinfos(csvData) {const rows = csvData.split('\n');if (rows.length < 2) return null;const headers = rows[0].split(',');const dataIndex = headers.indexOf('DLA');if (dataIndex === -1) return null;const dataArray = rows[1].split(',');return dataArray[dataIndex];}//ici c'est un peu le bordel j'avouefunction updateTableWithDLA(infosValue, goblinName) {}// Enregistrement du dernier temps de récupération de donnéeslet lastFetchTime = performance.now();function refreshData() {goblinIDs.forEach(id => {const password = gobelinPasswords[id];const url = `http://ie.gobland.fr/IE_Profil.php?id=${id}&passwd=${password}&sep=,&`;fetch(url).then(response => response.text()).then(csvData => {localStorage.setItem(`goblinInfo_${id}`, csvData);const currentTime = performance.now();const timeElapsed = currentTime - lastFetchTime;lastFetchTime = currentTime;console.log(`Données pour l'ID ${id} rafraîchies et stockées dans le local storage.`);console.log(`Temps écoulé depuis le dernier appel pour ID ${id}: ${timeElapsed} millisecondes`);// Convertir le temps en heures et/ou minutesconst timeInMinutes = Math.floor(timeElapsed / (1000 * 60));const hours = Math.floor(timeInMinutes / 60);const minutes = timeInMinutes % 60;const formattedTime = `${hours}h ${minutes}m`;// Mettre à jour le titre du bouton avec le temps écoulérefreshButton.title = `Cliquez ici pour actualiser les données externes. NE PAS ABUSER. Dernière mise à jour il y a ${formattedTime}`;}).catch(error => {console.error(`Erreur lors de la récupération du CSV pour l'ID ${id}:`, error);});});}const refreshButton = document.createElement('input');refreshButton.type = 'button';refreshButton.value = 'Rafraîchir les données externes';refreshButton.title = 'Cliquez ici pour actualiser les données externes. NE PAS ABUSER';refreshButton.onclick = refreshData;refreshButton.classList.add('refresh-button'); // Ajout de la classe au boutonconst centerElement = document.querySelector('#identite .pfmm');if (centerElement) {centerElement.appendChild(refreshButton);} else {console.error('Impossible de trouver l\'emplacement pour insérer le bouton.');}})();// Ajout de styles CSS pour centrer le boutonconst style = document.createElement('style');style.innerHTML = `.refresh-button {display: block;margin: 0 auto;text-align: center;}`;document.head.appendChild(style);// Sélection de la colonne "Santé"const healthColumn = document.querySelector('.tab75 > tbody:nth-child(1) > tr:nth-child(2) > td:nth-child(4)');// Appliquer le style pour empêcher le texte de passer à la ligneif (healthColumn) {healthColumn.style.whiteSpace = 'nowrap';}// Fonction pour récupérer les informations du local storagefunction getGoblinInfoById(id) {const goblinData = localStorage.getItem(`goblinInfo_${id}`);console.log(`Data for ID ${id}:`, goblinData); // Vérification dans la consolereturn goblinData;}// Fonction pour afficher les infos bullesfunction showGoblinInfoOnHover() {const playerLinks = document.querySelectorAll('td.pfmm a');playerLinks.forEach(link => {link.addEventListener('mouseover', (event) => {const playerId = link.getAttribute('href').match(/\((\d+)\)/)[1];const goblinInfo = getGoblinInfoById(playerId);const tooltip = document.createElement('div');tooltip.classList.add('tooltip');if (goblinInfo) {const lines = goblinInfo.split('\n'); // Divise les lignesconst table = document.createElement('table');table.classList.add('tooltip-table');lines.forEach((line, index) => {const rowData = line.split(',').map(data => data.replace(/^"|"$/g, '')); // Divise les données par colonne et supprime les guillemetsconst row = document.createElement('tr');rowData.forEach(cellData => {const cell = document.createElement(index === 0 ? 'th' : 'td'); // Utilisation de th pour la première lignecell.textContent = cellData;row.appendChild(cell);});table.appendChild(row);});tooltip.appendChild(table);} else {tooltip.textContent = "Aucune information disponible, mot de passe de clan manquant";}document.body.appendChild(tooltip);tooltip.style.position = 'absolute';tooltip.style.top = `${event.clientY + window.scrollY}px`;tooltip.style.left = `${event.clientX}px`;tooltip.style.backgroundColor = 'white';tooltip.style.border = '1px solid black';tooltip.style.padding = '5px';tooltip.style.zIndex = '9999';tooltip.style.backgroundColor = 'yellow'link.addEventListener('mouseout', () => {tooltip.remove();});});});}// Appel de la fonction pour afficher les infos bullesshowGoblinInfoOnHover();}$(document).ready(function () {// Récupérer le message stocké dans localStorageconst criStatus = localStorage.getItem("criStatus");// Si le message n'est pas trouvé dans le localStorage, utiliser un message par défautconst messageToDisplay = criStatus || "Aucune information disponible";// Si on est sur la page "vue", afficher le message stockéif ($(location).attr('href').match(/^http:\/\/(.*\.)?gobland\.fr\/vue\.php$/i)) {// Vérifier si un message existe dans le localStorageif (criStatus) {console.log("Message récupéré : " + criStatus);} else {console.log("Aucun message trouvé, affichage par défaut.");}// Créer l'élément pour le messageconst messageElement = $("<div>").text(messageToDisplay).css({"margin-top": "14px","text-align": "center","font-weight": "bold","color": criStatus === "Vous êtes sous cri de Guerre" ? "green" : "red",});// Insérer le message sous les boutons$("input[type='button'][value='Envoyer un MP']").parent() // Cible le parent de chaque bouton.before(messageElement);}// Si on est sur la page "meute", déterminer le statut et l'enregistrer dans localStorageif ($(location).attr('href').match(/http:\/\/(.*\.)?gobland\.fr\/Meute\.php/i)) {let criActif = false; // Variable pour vérifier si un membre a un niveau 0// Parcourir chaque ligne du tableau des membres de la meute$("#content table.tab75 tbody tr").each(function () {// Extraire le niveau du membreconst levelCell = $(this).find("td:nth-child(3)").text().trim(); // Cellule avec le niveau// Recherche du niveau (le dernier nombre dans la cellule)const match = levelCell.match(/\d+$/);if (match) {const level = parseInt(match[0], 10);console.log("Niveau trouvé : " + level);// Si un niveau est égal à 0, on active le cri de guerreif (level === 0) {criActif = true;return false; // Arrêter la boucle dès qu'on trouve un niveau égal à 0}}});// Déterminer le message en fonction de l'état du crilet message;if (criActif) {message = "Vous êtes sous cri de Guerre";} else {message = "Attention, pas de cri actif actuellement";}// Enregistrer le message dans localStoragelocalStorage.setItem("criStatus", message);// Afficher le message sur la page "meute"$("<div>").text(message).css("color", criActif ? "green" : "red").css("font-weight", "bold").css("margin-top", "12px").insertAfter("#content table.tab75");}// Affichage pour confirmation dans la consoleconsole.log("Message : " + messageToDisplay);});//==========================================================================================================================================================================================================================// Page de résultat d'action - Envoi des CdM à GobZilla//==========================================================================================================================================================================================================================if ($(location).attr('href').match(/http:\/\/(.*\.)?gobland\.fr\/act\.php/i)) {// Extraction des caracs min - max d'une ligne de CdMfunction extractMinMax(intervalle) {var parse = intervalle.match(/entre (\d+) et (\d+)/);if (parse != null) {return new Array(parseInt(parse[1]), parseInt(parse[2]));} else {parse = intervalle.match(/inférieur ou égal à (\d+)/);if (parse != null) {return new Array(1, parseInt(parse[1]));} else {parse = intervalle.match(/supérieur ou égal à (\d+)/);if (parse != null) {return new Array(parseInt(parse[1]), parse[1]*1.5);} else {return null;}}}}$( document ).ready(function() {if ($("h1").text() == "Connaissance des Monstres") {// Analyse de la CdMvar conteneur = $("#identite").find("div.deborde");var rang = null;var executionLinesArr = conteneur.find("center:first").text().split("\n");$.each( executionLinesArr, function( key, value ) {if (value.indexOf("AVEZ RÉUSSI") > 0) {rang = value.substring(value.indexOf("en tant que") + 12,value.indexOf(" ("));return false;}});console.log("Rang = " + rang);// Vérification du rang : on ne traite pas les CdM des grouillotsif (rang == "Maître" || rang == "Grand Maître") {var r###ltLinesArr = conteneur.text().split("\n");var cdm = {};cdm.gob = window.localStorage.getItem('gobId');cdm.rang = rang;$.each( r###ltLinesArr, function( key, value ) {lineArr = value.split(" : ");// Construction de la CdM en parsant la pageswitch (lineArr[0]) {case "Le monstre ciblé fait partie des":cdm.nom = lineArr[1].split("(")[1].split(" - ")[0];cdm.numMob = lineArr[1].split(" - N° ")[1].split(")")[0];break;case "Niveau":cdm.niveau = lineArr[1];break;case "Points de Vie":var arrMinMax = extractMinMax(lineArr[1]);cdm.pvMin = arrMinMax[0];cdm.pvMax = arrMinMax[1];break;case "Dés d'Attaque":var arrMinMax = extractMinMax(lineArr[1]);cdm.attMin = arrMinMax[0];cdm.attMax = arrMinMax[1];break;case "Dés d'Esquive":var arrMinMax = extractMinMax(lineArr[1]);cdm.esqMin = arrMinMax[0];cdm.esqMax = arrMinMax[1];break;case "Dés de Dégât":var arrMinMax = extractMinMax(lineArr[1]);cdm.degMin = arrMinMax[0];cdm.degMax = arrMinMax[1];break;case "Dés de Régénération":var arrMinMax = extractMinMax(lineArr[1]);cdm.regMin = arrMinMax[0];cdm.regMax = arrMinMax[1];break;case "Perception":var arrMinMax = extractMinMax(lineArr[1]);cdm.perMin = arrMinMax[0];cdm.perMax = arrMinMax[1];break;case "Armure Physique":var arrMinMax = extractMinMax(lineArr[1]);cdm.armurePhyMin = arrMinMax[0];cdm.armurePhyMax = arrMinMax[1];break;case "Armure Magique":var arrMinMax = extractMinMax(lineArr[1]);cdm.armureMagMin = arrMinMax[0];cdm.armureMagMax = arrMinMax[1];break;case "Durée du tour":var arrMinMax = extractMinMax(lineArr[1]);cdm.tourMin = arrMinMax[0];cdm.tourMax = arrMinMax[1];break;case "Créature volante":cdm.vol = lineArr[1];break;case "Attaque à distance":cdm.distance = lineArr[1];break;case "Pouvoir":cdm.pouvoir = lineArr[1];break;case "Nombre d'attaques":cdm.nbAttaques = lineArr[1];break;case "Habitat":cdm.habitat = lineArr[1];break;case "Comportement":cdm.comportement = lineArr[1];break;case "Intelligence":cdm.intelligence = lineArr[1];break;case "Vitesse de déplacement":cdm.vitesse = lineArr[1];break;case "Vision du Caché":cdm.vlc = lineArr[1];break;}});// Envoi de la CdMvar url = "https://gobzilla.incaworld.fr/cdm";var r###lt = $("<center></center>");console.log(cdm);var data = JSON.stringify(cdm);console.log(data);$.ajax({type: "PUT",url: url,contentType: "application/json",data: data}).done(function() {r###lt.html("<br><b>**** CdM envoyée à GobZilla ****</b>");}).fail(function(err) {console.log(err);r###lt.html("<br><b>**** Echec de l'envoi de la CdM à GobZilla ****</b>");}).always(function() {r###lt.insertAfter(conteneur.find("center:last"));});}}});}//==========================================================================================================================================================================================================================// Page MENU (left)//==========================================================================================================================================================================================================================if ($(location).attr('href').match(/http:\/\/(.*\.)?gobland\.fr\/Menu\.php/i)) {// Enregistrement dans le stockage local de l'identité du Gobvar gobContainer = $(".presentation").find('a:first');window.localStorage.setItem('gobName', gobContainer.text());window.localStorage.setItem('gobId', gobContainer.attr('href').match(/javascript:EPV\((\d+)\)/)[1]);}//==========================================================================================================================================================================================================================// Page ACTIONS (footer) Affiche en couleur les monstres qui manquent de CDM//==========================================================================================================================================================================================================================if ($(location).attr('href').match(/http:\/\/(.*\.)?gobland\.fr\/playActions\.php/i)) {function showHideCdmNeededActions() {var displayCdmNeededChecked = window.localStorage.getItem('displayCdmNeededChecked');if(displayCdmNeededChecked == 1) {var cdmNeeded = window.localStorage.getItem('cdmNeeded');$.each(cdmNeeded.split(","), function(index, value) {$('option:contains("' + value + '")').css("background-color", "#FF99FF");});} else {$(".cdmNeeded").removeClass("cdmNeeded");}}// Après chargement de la page, lancement des enhancements$( document ).ready(function() {showHideCdmNeededActions();});}//==========================================================================================================================================================================================================================// Page VUE. Vue 2D, divers filtres/tri, modification de la CSS, lieux et plantes étendus, CDM, Compteur de créatures//==========================================================================================================================================================================================================================if ($(location).attr('href').match(/^http:\/\/(.*\.)?gobland\.fr\/vue\.php$/i)) {// Intégration de CSS pour le loader et la CDMvar myCSS = `#preFilter label {padding-left: 10px;}#preFilter {padding: 5px;margin-bottom: 5px;border: 1px solid black;text-align: center;}#btnRefresh {display: block;text-align: center;margin: auto;}#filterDiv {padding-bottom: 5px;}#filterDiv label {padding-left: 10px;}.ckbFilter {vertical-align: middle;}.cdmNeeded {background-color: #FF99FF;}.cuisine {background-color: #99FF99;}.cdmContainer {background: url(http://images.gobland.fr/v1.0/grande-fenetre/gf-centre.png);border: 2px solid #666;font-family: sans-serif;font-size: 12px;padding: 10px;display: inline-block;background-color: #ddd;position: fixed;width: 400px;left: 270px;top: 10%;}.cdmContainer .title {font-weight: bold;font-size: 14px;}.cdmContainer span {display: block;padding: 2px;}.lds-roller {display: inline-block;position: fixed;width: 80px;height: 80px;left: 415px;top: 50%;z-index: 1000;}.lds-roller div {animation: lds-roller 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite;transform-origin: 40px 40px;}.lds-roller div:after {content: " ";display: block;position: absolute;width: 7px;height: 7px;border-radius: 50%;background: #000;margin: -4px 0 0 -4px;}.lds-roller div:nth-child(1) {animation-delay: -0.036s;}.lds-roller div:nth-child(1):after {top: 63px;left: 63px;}.lds-roller div:nth-child(2) {animation-delay: -0.072s;}.lds-roller div:nth-child(2):after {top: 68px;left: 56px;}.lds-roller div:nth-child(3) {animation-delay: -0.108s;}.lds-roller div:nth-child(3):after {top: 71px;left: 48px;}.lds-roller div:nth-child(4) {animation-delay: -0.144s;}.lds-roller div:nth-child(4):after {top: 72px;left: 40px;}.lds-roller div:nth-child(5) {animation-delay: -0.18s;}.lds-roller div:nth-child(5):after {top: 71px;left: 32px;}.lds-roller div:nth-child(6) {animation-delay: -0.216s;}.lds-roller div:nth-child(6):after {top: 68px;left: 24px;}.lds-roller div:nth-child(7) {animation-delay: -0.252s;}.lds-roller div:nth-child(7):after {top: 63px;left: 17px;}.lds-roller div:nth-child(8) {animation-delay: -0.288s;}.lds-roller div:nth-child(8):after {top: 56px;left: 12px;}@keyframes lds-roller {0% {transform: rotate(0deg);}100% {transform: rotate(360deg);}}`;var myStyle = document.createElement("style");myStyle.setAttribute("type", "text/css");myStyle.appendChild(document.createTextNode(myCSS));document.body.appendChild(myStyle);// HTML pour le loadervar loader = $("<div id=\"loader\" class=\"lds-roller\"><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div></div>");$("#content").append(loader);$("#loader").hide();// HTML pour les CdMvar cdm = $("<div id=\"cdm\" class=\"cdmContainer\"></div>");$("#content").append(cdm);cdm.click(function(evt) {evt.preventDefault();$("#cdm").hide();});$("#cdm").hide();const raceGobs = ["Musculeux", "Mentalo", "Nodef", "Trad Scion", "Vis Yonnair", "Zozo Giste"];const monstreAMasquer = ["Lémure", "Sprigan", "Larbin démoniaque", "Plante Carnivore", "Abishaii Blanc", "Abishaii Bleu" , "Abishaii Noir ", "Abishaii Vert" , "Ame-en-peine" , "Pitimarmotte" , "Diablotin" ];const ArbresAMasquer = ["Arbre"];const suivants =["Créature mécanique", "Squelette", "Pierreux" , "Esprit-rôdeur" , "Zombi"];/// Coloration des gobs$.each(raceGobs, function(index, value) {$('#TCREATURES > center > table > tbody > tr > td:contains("' + value + '")').parent().css("background-color","#ccccff");});// Coloration des suivants avec condition supplémentaire$.each(suivants, function(index, value) {$('#TCREATURES > center > table > tbody > tr > td:contains("' + value + '")').each(function() {// Récupérez le texte de l'élément td contenant le lienvar texte = $(this).parent().find('td:eq(2)').text();// Utilisez une expression régulière pour extraire le nombre entre parenthèsesvar nombre = texte.match(/\((\d+)\)/);// Vérifiez si le nombre extrait existe et est supérieur à 1000if (nombre && parseInt(nombre[1]) < 1000000) {// Coloration de l'élément parent de l'élément td$(this).parent().css("background-color", "#ffadde");}});});//// Coloration des gros mobs et indication px$("#TCREATURES > center > table > tbody > tr").each( function(){var nValue = parseInt($(this).find('td').eq(8).text(), 10); // Obtenez la valeur de la colonne Nif (nValue === 0) {$(this).css({"font-style": "italic", // Appliquer le style italique à la ligne entière"color": "grey" // Changer la couleur du texte en gris});$(this).find('td a').css("color", "grey"); // Changer la couleur du lien en gris} else {$(this).css({"font-style": "normal", // Réinitialiser le style si la valeur de N n'est pas 0"color": "black" // Réinitialiser la couleur du texte});$(this).find('td a').css("color", "blue"); // Réinitialiser la couleur du lien}var race = $(this).find('td').eq(4).text();if (jQuery.inArray(race, raceGobs) < 0) {var tdlevel = $(this).find('td');var lvl = parseInt(tdlevel.eq(3).text(), 10);if (isNaN(lvl)) return;if (lvl > 39) {$(this).css("background-color","#f55442")} else if (lvl > 29) {$(this).css("background-color","#f59c42")} else if (lvl > 25) {$(this).css("background-color","#f5b342")}var id = 0;var infosMob = $(this).find('a:first').attr('href').match(/javascript:EMV\((\d+)\)/);if (infosMob != null) {id = parseInt(infosMob[1]);if (id < 9999) {// $(this).css("background-color", "#6fcf97"); // Green background for creatures with ID < 9999$(this).find('td').eq(2).css("background-color", "#c791b1"); // Apply green background to the ID cell}}/// création de tresorsData qui récup les trésors dans la vue et est utilisé dans les ordres des suivantsconst tableauTresors = document.getElementById('TOBJETS');if (tableauTresors) {// Sélection des lignes du tableauconst lignes = tableauTresors.getElementsByTagName('tr');const tresors = [];// Parcours de chaque ligne du tableaufor (let i = 1; i < lignes.length; i++) {const colonnes = lignes[i].getElementsByTagName('td');// Extraction des données de chaque colonneconst distance = colonnes[0].textContent;const reference = colonnes[1].textContent;const nom = colonnes[2].textContent;const x = colonnes[3].textContent;const y = colonnes[4].textContent;const n = colonnes[5].textContent;// Stockage des données dans un objetconst tresorObj = {distance,reference,nom,x,y,n};// Ajout de l'objet à la liste des trésorstresors.push(tresorObj);}// Stockage des trésors dans localStoragelocalStorage.setItem('tresorsData', JSON.stringify(tresors));}/// Ajout de l'affichage d'une CDM au clic sur la race$(this).find('td').eq(4).css("cursor", "pointer");$(this).find('td').eq(4).click(function(evt) {evt.preventDefault();$("#loader").show();var url = "https://gobzilla.incaworld.fr/cdm/"+race+"/"+lvl+"/"+id;$.getJSON( url, function( data ) {if (data["race"] != undefined) {$("#loader").hide();$("#cdm").html("<div class=\"title\">" + data["nom"] + (data["numMob"]?" (n° " + data["numMob"] + ")":"") + "</div>"+ "<p>Le monstre fait partie des : " + data["race"] + "</p>"+ "<span>Niveau moyen : " + data["niveau"] + "</span>"+ "<span>Points de Vie : entre " + data["pvMin"] + " à " + data["pvMax"] + "</span>"+ "<span>Dés d'Attaque : entre " + data["attMin"] + " et " + data["attMax"] + "</span>"+ "<span>Dés d'Esquive : entre " + data["esqMin"] + " et " + data["esqMax"] + "</span>"+ "<span>Dés de Dégât : entre " + data["degMin"] + " et " + data["degMax"] + "</span>"+ "<span>Dés de Régénération : entre " + data["regMin"] + " et " + data["regMax"] + "</span>"+ "<span>Perception : entre " + data["perMin"] + " et " + data["perMax"] + "</span>"+ "<span>Armure Physique : entre " + data["armurePhyMin"] + " et " + data["armurePhyMax"] + "</span>"+ "<span>Armure Magique : entre " + data["armureMagMin"] + " et " + data["armureMagMax"] + "</span>"+ "<span>Tour : entre " + data["tourMin"] + "h et " + data["tourMax"] + "h</span>"+ "<span>Pouvoir : " + data["pouvoir"] + "</span>"+ "<span>Créature volante : " + (data["vol"]?"Oui":"Non") + "</span>"+ "<span>Attaque à distance : " + (data["distance"]?"Oui":"Non") + "</span>"+ "<span>Nombre d'attaques : " + data["nbAttaques"] + "</span>"+ "<span>Comportement : " + data["comportement"] + "</span>"+ "<span>Intelligence : " + data["intelligence"] + "</span>"+ "<span>Vitesse : " + data["vitesse"] + "</span>"+ "<span>VLC : " + data["vlc"] + "</span>"+ "<span>" + data["magie"] + "</span></br>"+ "<b>Moyenne basée sur " + data["nbCdm"] + " CdM</b>");} else {$("#loader").hide();$("#cdm").html("Pas de CDM en stock !");}$("#cdm").show();});});if (lvlmeute != undefined) {var px = Math.max(0, 20+2*(lvl-lvlmeute)+lvl);tdlevel.prop('title', px + "px");} else {tdlevel.prop('title', "Merci de visiter la page meute pour charger le niveau");}}});//// fonction filtre creatures dans la vue(function() {'use strict';const table = document.querySelector('#TCREATURES table');if (table) {const headers = table.querySelectorAll('th');headers.forEach(header => {if (!header.hasAttribute('colspan')) {header.style.cursor = 'pointer';const arrowUp = document.createElement('span');arrowUp.textContent = ' ▲';arrowUp.className = 'sortIndicator';arrowUp.style.display = 'none';const arrowDown = document.createElement('span');arrowDown.textContent = ' ▼';arrowDown.className = 'sortIndicator';arrowDown.style.display = 'none';header.appendChild(arrowUp);header.appendChild(arrowDown);let ascending = false;// Utilisation de l'attribut title pour l'infobulleheader.title = "Cliquer pour classer dans l'ordre";header.addEventListener('click', () => {// reset sort indicators$(".sortIndicator").css("display", 'none');const headerIndex = Array.from(headers).indexOf(header);let rows = Array.from(table.querySelectorAll('tbody tr'));rows.sort((a, b) => {const aValue = a.cells[headerIndex].textContent.trim();const bValue = b.cells[headerIndex].textContent.trim();// La 1ère ligne est toujours en hautif (a.cells[0].textContent.trim().match("^Dist.")) return -1;let r###lt = aValue.localeCompare(bValue, undefined, { numeric: true });if (!ascending) {r###lt *= -1;}return r###lt;});ascending = !ascending;arrowUp.style.display = ascending ? 'none' : 'inline-block';arrowDown.style.display = ascending ? 'inline-block' : 'none';table.querySelector('tbody').innerHTML = '';rows.forEach(row => table.querySelector('tbody').appendChild(row));});}});}})();//// fonction filtre trésors dans la vue(function() {'use strict';const table = document.querySelector('#TOBJETS table');if (table) {const headers = table.querySelectorAll('th');headers.forEach(header => {if (!header.hasAttribute('colspan')) {header.style.cursor = 'pointer';const arrowUp = document.createElement('span');arrowUp.textContent = ' ▲';arrowUp.className = 'sortIndicator';arrowUp.style.display = 'none';const arrowDown = document.createElement('span');arrowDown.textContent = ' ▼';arrowDown.className = 'sortIndicator';arrowDown.style.display = 'none';header.appendChild(arrowUp);header.appendChild(arrowDown);let ascending = false;// Utilisation de l'attribut title pour l'infobulleheader.title = "Cliquer pour classer dans l'ordre";header.addEventListener('click', () => {// reset sort indicators$(".sortIndicator").css("display", 'none');const headerIndex = Array.from(headers).indexOf(header);let rows = Array.from(table.querySelectorAll('tbody tr'));rows.sort((a, b) => {const aValue = a.cells[headerIndex].textContent.trim();const bValue = b.cells[headerIndex].textContent.trim();// La 1ère ligne est toujours en hautif (a.cells[0].textContent.trim().match("^Dist.")) return -1;let r###lt = aValue.localeCompare(bValue, undefined, { numeric: true });if (!ascending) {r###lt *= -1;}return r###lt;});ascending = !ascending;arrowUp.style.display = ascending ? 'none' : 'inline-block';arrowDown.style.display = ascending ? 'inline-block' : 'none';table.querySelector('tbody').innerHTML = '';rows.forEach(row => table.querySelector('tbody').appendChild(row));});}});}})();//// fonction filtre plantes dans la vue(function() {'use strict';const table = document.querySelector('#TPLANTS table');if (table) {const headers = table.querySelectorAll('th');headers.forEach(header => {if (!header.hasAttribute('colspan')) {header.style.cursor = 'pointer';const arrowUp = document.createElement('span');arrowUp.textContent = ' ▲';arrowUp.className = 'sortIndicator';arrowUp.style.display = 'none';const arrowDown = document.createElement('span');arrowDown.textContent = ' ▼';arrowDown.className = 'sortIndicator';arrowDown.style.display = 'none';header.appendChild(arrowUp);header.appendChild(arrowDown);let ascending = false;header.addEventListener('click', () => {// reset sort indicators$(".sortIndicator").css("display", 'none');const headerIndex = Array.from(headers).indexOf(header);let rows = Array.from(table.querySelectorAll('tbody tr'));rows.sort((a, b) => {const aValue = a.cells[headerIndex].textContent.trim();const bValue = b.cells[headerIndex].textContent.trim();// La 1ère ligne est toujours en hautif (a.cells[0].textContent.trim().match("^Dist.")) return -1;let r###lt = aValue.localeCompare(bValue, undefined, { numeric: true });if (!ascending) {r###lt *= -1;}return r###lt;});ascending = !ascending;arrowUp.style.display = ascending ? 'none' : 'inline-block';arrowDown.style.display = ascending ? 'inline-block' : 'none';table.querySelector('tbody').innerHTML = '';rows.forEach(row => table.querySelector('tbody').appendChild(row));});}});}})();//// compteur de créatures(function() {'use strict';function updateRowCount() {var table = document.getElementById("TCREATURES");var rowCount = table.getElementsByTagName("tr").length - 1;$('a[name="CREATURES"]').next().html("Créatures (" + rowCount + " visibles)");}var observer = new MutationObserver(updateRowCount);var target = document.querySelector("#TCREATURES tbody");var config = { childList: true, subtree: true };observer.observe(target, config);updateRowCount();})();var show2DChecked = window.localStorage.getItem('show2DChecked');var displayLieuxChecked = window.localStorage.getItem('displayLieuxChecked');var displayPlantesChecked = window.localStorage.getItem('displayPlantesChecked');var displayCdmNeeded = window.localStorage.getItem('displayCdmNeededChecked');var displayCuisine = window.localStorage.getItem('displayCuisineChecked');var displayMiniMobs = window.localStorage.getItem('displayMiniMobs');var displayTrees = window.localStorage.getItem('displayTreesChecked');var displayFullWidth = window.localStorage.getItem('displayFullWidthChecked');var vue2DBuilt = false;var extendedLieuxBuilt = false;var extendedPlantesBuilt = false;var R;function showHideVue2d() {if($('#ckbDisplay2D').is(":checked")) {window.localStorage.setItem('show2DChecked', 1);if (!vue2DBuilt) build2DView();$("#vue2D").show();$("#filterDiv").show();} else {window.localStorage.setItem('show2DChecked', 0);$("#vue2D").hide();$("#filterDiv").hide();}}function showHideExtendedLieux() {if($('#ckbDisplayLieux').is(":checked")) {window.localStorage.setItem('displayLieuxChecked', 1);if (!extendedLieuxBuilt) buildExtendedLieux();$(".extendedLieu").show();} else {window.localStorage.setItem('displayLieuxChecked', 0);$(".extendedLieu").hide();}}function showHideExtendedPlantes() {if($('#ckbDisplayPlantes').is(":checked")) {window.localStorage.setItem('displayPlantesChecked', 1);if (!extendedPlantesBuilt) buildExtendedPlantes();$(".extendedPlante").show();} else {window.localStorage.setItem('displayPlantesChecked', 0);$(".extendedPlante").hide();}}function refreshCdmNeeded() {$("#loader").show();var urlCdMNeeded = "https://gobzilla.incaworld.fr/mobs/cdm/5";$.getJSON( urlCdMNeeded, function( data ) {if (data != undefined) {window.localStorage.setItem('cdmNeeded', data.monstres);window.localStorage.setItem('cdmNeededUpdate', new Date());}$("#loader").hide();});}function showHideCdmNeeded() {if($('#ckbDisplayCdmNeeded').is(":checked")) {window.localStorage.setItem('displayCdmNeededChecked', 1);var cdmNeededUpdate = new Date(window.localStorage.getItem('cdmNeededUpdate'));var delta = (new Date() - cdmNeededUpdate)/1000/60/60/24;if (delta > 5) {refreshCdmNeeded();}var cdmNeeded = window.localStorage.getItem('cdmNeeded');$.each(cdmNeeded.split(","), function(index, value) {$('#TCREATURES td:contains("' + value + '")').closest('tr').find('td:eq(5)').text("CdM manquante !");});} else {window.localStorage.setItem('displayCdmNeededChecked', 0);$(".cdmNeeded").removeClass("cdmNeeded");$('#TCREATURES td:contains("CdM manquante !")').text("");}}function refreshCuisine() {$("#loader").show();var urlCuisine = "https://gobzilla.incaworld.fr/mobs/insecte";$.getJSON( urlCuisine, function( data ) {if (data != undefined) {window.localStorage.setItem('cuisine', data.monstres);window.localStorage.setItem('cuisineUpdate', new Date());}$("#loader").hide();});}function showHideCuisine() {if($('#ckbDisplayCuisine').is(":checked")) {window.localStorage.setItem('displayCuisineChecked', 1);var cuisineUpdate = new Date(window.localStorage.getItem('cuisineUpdate'));var delta = (new Date() - cuisineUpdate)/1000/60/60/24;if (delta > 30) {refreshCuisine();}var cuisine = window.localStorage.getItem('cuisine');$.each(cuisine.split(","), function(index, value) {$('#TCREATURES td:contains("' + value + '")').parent().addClass("cuisine");});} else {window.localStorage.setItem('displayCuisineChecked', 0);$(".cuisine").removeClass("cuisine");}}function showHideMiniMobs() {if ($('#ckbDisplayMiniMobs').is(":checked")) {window.localStorage.setItem('displayMiniMobs', 1);// Suppression des mobs trop nombreux$.each(monstreAMasquer, function(index, value) {$('#TCREATURES > center > table > tbody > tr > td:contains("' + value + '")').each(function() {var chiffre = parseInt($(this).parent().find('td:first').text());if (chiffre < 2) {$(this).parent().show();} else {$(this).parent().hide();}});});} else {window.localStorage.setItem('displayMiniMobs', 0);// Affichage de tous les mobs$.each(monstreAMasquer, function(index, value) {$('#TCREATURES > center > table > tbody > tr > td:contains("' + value + '")').parent().show();});}}function showHideTrees() {if($('#ckbDisplayTrees').is(":checked")) {window.localStorage.setItem('displayTreesChecked', 1);// Suppression des arbres$.each(ArbresAMasquer, function(index, value) {$('#TLIEUX > center > table > tbody > tr > td:contains("' + value + '")').parent().hide();});} else {window.localStorage.setItem('displayTreesChecked', 0);$.each(ArbresAMasquer, function(index, value) {$('#TLIEUX > center > table > tbody > tr > td:contains("' + value + '")').parent().show();});}}function showVueFullWidth() {if($('#ckbDisplayFullWidth').is(":checked")) {window.localStorage.setItem('displayFullWidthChecked', 1);// Vue en pleine largeur} else {window.localStorage.setItem('displayFullWidthChecked', 0);// Vue normale}}function refreshListes() {refreshCuisine();showHideCuisine();refreshCdmNeeded();showHideCdmNeeded();}// Après chargement de la page, lancement des enhancements$( document ).ready(function() {// Full widthif (displayFullWidth == 1) {$('#ckbDisplayFullWidth').prop( "checked", displayFullWidth );}showVueFullWidth();// Mini mobsif (displayMiniMobs == 1) {$('#ckbDisplayMiniMobs').prop( "checked", displayMiniMobs );}showHideMiniMobs();// showhide treesif (displayTrees == 1) {$('#ckbDisplayTrees').prop( "checked", displayTrees );}showHideTrees();// Liste des lieux étendueif (displayLieuxChecked == 1) {$('#ckbDisplayLieux').prop( "checked", displayLieuxChecked );}showHideExtendedLieux();//Liste des plantes étendueif (displayPlantesChecked == 1) {$('#ckbDisplayPlantes').prop( "checked", displayPlantesChecked );}showHideExtendedPlantes();// Vue 2Dif (show2DChecked == 1) {$('#ckbDisplay2D').prop( "checked", show2DChecked );}showHideVue2d();// CdM manquantesif (displayCdmNeeded == 1) {$('#ckbDisplayCdmNeeded').prop( "checked", displayCdmNeeded );}showHideCdmNeeded();// A cuisinerif (displayCuisine == 1) {$('#ckbDisplayCuisine').prop( "checked", displayCuisine );}showHideCuisine();$('#btnRefresh').click(function(evt) {evt.preventDefault();$("#btnRefresh").val("...");refreshListes();$("#btnRefresh").val("Done !");});});var cells = {};var niveau = 0;var _X=0, _Y=0, _N=0;var div = $("<div id=\"vue2D\"></div>");div.insertBefore($("form[action*='newMail.php']"));//=======================================================================// Filters//=======================================================================var prediv = $("<div id=\"preFilter\"></div>");prediv.css({'background-color': 'gainsboro', // Couleur de fond sombre'border': '2px solid black', // Bordure noire'padding': '10px', // Espacement intérieur'margin': '10px' // Marge extérieure});var select = document.createElement('select');select.id = 'lvlherbo';select.innerHTML = `<option value="1.5">A</option><option value="2">C</option><option value="2.5">M</option><option value="3">GM</option>`;prediv.append(select);prediv.append("</br>");prediv.insertBefore(div);prediv.append($('<label />', { 'for': 'ckbDisplay2D', text: 'Vue 2D', title: 'affiche une vue 2d des éléments qui vous entoure' }));prediv.append($("<input type=\"checkbox\" id=\"ckbDisplay2D\" title=\"affiche une vue 2d des éléments qui vous entoure\" name=\"ckbDisplay2D\" class=\"ckbFilter\" >"));prediv.append($('<label />', { 'for': 'ckbDisplayLieux', text: ' Lieux étendus', title: 'affiche tous les lieux déja connus hors de votre vue' }));prediv.append($("<input type=\"checkbox\" id=\"ckbDisplayLieux\" title=\"affiche tous les lieux déja connus hors de votre vue\" name=\"ckbDisplayLieux\" class=\"ckbFilter\" >"));prediv.append($('<label />', { 'for': 'ckbDisplayPlantes', text: ' Plantes étendues', title: 'affiche toutes les plantes déja connues hors de votre vue, selectionner votre niveau herboriste, il sera enregistré' }));prediv.append($("<input type=\"checkbox\" id=\"ckbDisplayPlantes\" title=\"affiche toutes les plantes déja connues hors de votre vue\" name=\"ckbDisplayPlantes\" class=\"ckbFilter\" >"));prediv.append($('<label />', { 'for': 'ckbDisplayCdmNeeded', text: ' CdM manquantes', title: 'permet de savoir quel monstres sont manquants dans la base de données des CdM' }));prediv.append($("<input type=\"checkbox\" id=\"ckbDisplayCdmNeeded\" title=\"permet de savoir quel monstres sont manquants dans la base de données des CdM\" name=\"ckbDisplayCdmNeeded\" class=\"ckbFilter\" >"));prediv.append($('<label />', { 'for': 'ckbDisplayCuisine', text: ' Mobs à cuisiner', title: 'met en surbrillance les monstres les + efficaces pour la cuisine' }));prediv.append($("<input type=\"checkbox\" id=\"ckbDisplayCuisine\" title=\"met en surbrillance les monstres les + efficaces pour la cuisine\" name=\"ckbDisplayCuisine\" class=\"ckbFilter\" >"));prediv.append("</br>");prediv.append($('<label />', { 'for': 'ckbDisplayMiniMobs', text: ' Assainir la vue', title: 'Enlever de la vue (sauf a moins de 2 cases) tous les petits monstres qui poluent la vue' }));prediv.append($("<input type=\"checkbox\" id=\"ckbDisplayMiniMobs\" title=\"masquer les tout petits monstres (lémures, larbins ..)\" name=\"ckbDisplayMiniMobs\" class=\"ckbFilter\" >"));prediv.append($('<label />', { 'for': 'ckbDisplayTrees', text: ' Masquer Arbres.', title: 'masque les arbres' }));prediv.append($("<input type=\"checkbox\" id=\"ckbDisplayTrees\" title=\"masque les arbres\" name=\"ckbDisplayTrees\" class=\"ckbFilter\" >"));prediv.append($('<label />', { 'for': 'ckbDisplayFullWidth', text: ' Vue pleine largeur', title: 'pour les grandes vue. Permet d élargir la vue 2d pour une meilleure visualisation' }));prediv.append($("<input type=\"checkbox\" id=\"ckbDisplayFullWidth\" title=\"pour les grandes vue. Permet d'élargir la vue 2d pour une meilleure visualisation\" name=\"ckbDisplayFullWidth\" class=\"ckbFilter\" >"));prediv.append("</br>");prediv.append($('<label />', { 'for': 'monsterLevelMin', text: 'Filtrer Lvl ', title: 'Filtrer les monstres par niveau' }));var levelInputMin = $("<input type='number' id='monsterLevelMin' placeholder='Min' min='0' max='100' style='width: 60px;'>");prediv.append(levelInputMin);var levelInputMax = $("<input type='number' id='monsterLevelMax' placeholder='Max' min='0' max='100' style='width: 60px;'>");prediv.append(levelInputMax);var filterButton = $("<button id='applyFilter'>Filtrer</button>");prediv.append(filterButton);prediv.append("</br>");prediv.append("</br>");prediv.append($("<input type=\"button\" id=\"btnRefresh\" name=\"btnRefresh\" value=\"Rafraîchir les listes\">"));prediv.append("</br>");prediv.append($('<label />', { 'for': 'ckbFetchCSV', text: ' Vue DeathMetal', title: 'profitez de la vue de DeathMetal. Attention, utiliser avec parcimonie !' }));prediv.append($("<input type=\"checkbox\" id=\"ckbFetchCSV\" title=\"cliquez pour faire apparaitre la vue ici. Pour l'enlever, décocher et rafraichir la page. Attention, NE PAS ABUSER (max 1 fois par jour)\" name=\"ckbFetchCSV\" class=\"ckbFilter\" >"));// filtres de la vue 2dvar filterDiv = $("<div id=\"filterDiv\"></div>");filterDiv.insertBefore(div);filterDiv.append($('<label />', { 'for': 'ckbNiveau', text: 'Même niveau' }));filterDiv.append($("<input type=\"checkbox\" id=\"ckbNiveau\" name=\"ckbNiveau\" class=\"ckbFilter\" >"));filterDiv.append($('<label />', { 'for': 'ckbObject', text: 'Trésor' }));filterDiv.append($("<input type=\"checkbox\" id=\"ckbObject\" name=\"ckbObject\" class=\"ckbFilter\" checked=\"checked\" >"));filterDiv.append($('<label />', { 'for': 'ckbMonster', text: 'Monstre' }));filterDiv.append($("<input type=\"checkbox\" id=\"ckbMonster\" name=\"ckbMonster\" class=\"ckbFilter\" checked=\"checked\" >"));filterDiv.append($('<label />', { 'for': 'ckbPlant', text: 'Plante' }));filterDiv.append($("<input type=\"checkbox\" id=\"ckbplants\" name=\"ckbplants\" class=\"ckbFilter\" checked=\"checked\" >"));filterDiv.append($('<label />', { 'for': 'ckbPlace', text: 'Lieu' }));filterDiv.append($("<input type=\"checkbox\" id=\"ckbPlace\" name=\"ckbPlace\" class=\"ckbFilter\" checked=\"checked\" >"));filterDiv.append($('<label />', { 'for': 'ckbBigMonsters', text: 'Gros monstres', title: 'afficher que les monstres sup à 40' }));filterDiv.append($("<input type=\"checkbox\" id=\"ckbBigMonsters\" name=\"ckbBigMonsters\" class=\"ckbFilter\" >"));//=======================================================================// Filtre Herbo//=======================================================================// Cache initialement le niveau herboselect.style.display = 'none';// Fonction pour contrôler la visibilité du niveau herbofunction toggleLvlHerboVisibility() {if ($('#ckbDisplayPlantes').is(':checked')) {select.style.display = 'block';$('#lvlherbo').css('display', 'inline-block');} else {select.style.display = 'none';$('#lvlherbo').css('display', 'none');}}$('#ckbDisplayPlantes').change(function() {toggleLvlHerboVisibility();});toggleLvlHerboVisibility();//=======================================================================// Fonction pour filtrer les monstres dans le tableau et la vue 2D//=======================================================================function applyMonsterFilter(minLevel, maxLevel) {// Filtrer dans le tableau seulement si minLevel et maxLevel sont spécifiésif (!isNaN(minLevel) && !isNaN(maxLevel)) {$("#TCREATURES > center > table > tbody > tr").each(function() {var tdLevel = $(this).find('td').eq(3);var lvl = parseInt(tdLevel.text(), 10);if (!isNaN(lvl)) {if (lvl >= minLevel && lvl <= maxLevel) {$(this).show();} else {$(this).hide();}}});} else {// Si minLevel ou maxLevel n'est pas spécifié, afficher tous les élémentsshowHideMiniMobs();}// Sauvegarder les valeurs dans le localStoragelocalStorage.setItem('monsterLevelMin', minLevel);localStorage.setItem('monsterLevelMax', maxLevel);}// Charger les valeurs depuis le localStorage et appliquer le filtre au chargement de la page$(document).ready(function() {var savedMinLevel = localStorage.getItem('monsterLevelMin');var savedMaxLevel = localStorage.getItem('monsterLevelMax');if (savedMinLevel !== null && savedMaxLevel !== null) {levelInputMin.val(savedMinLevel);levelInputMax.val(savedMaxLevel);applyMonsterFilter(parseInt(savedMinLevel, 10), parseInt(savedMaxLevel, 10));}});// Gestion du clic sur le bouton de filtragefilterButton.on('click', function() {var minLevel = parseInt(levelInputMin.val(), 10);var maxLevel = parseInt(levelInputMax.val(), 10);applyMonsterFilter(minLevel, maxLevel);});//=======================================================================/// masquer via une petite fleche tout ce beau monde//=======================================================================var isPreFilterVisible = localStorage.getItem('isPreFilterVisible') === 'true'; // Lire l'état depuis localStorage// Créez un div contenant la flèche pour afficher/masquer preFiltervar toggleDiv = $("<div id=\"togglePreFilter\" style=\"cursor: pointer; font-size: 10px; color: black;\">▼ Ouvrir les Filtres</div>");// Ajoutez le div avant predivtoggleDiv.insertBefore(prediv);// Fonction pour mettre à jour l'état et le texte du divfunction updateToggleDiv() {if (isPreFilterVisible) {prediv.show(); // Afficher preFiltertoggleDiv.html('▼ Masquer les filtres'); // Affiche la flèche vers le bas (▼)} else {prediv.hide(); // Masquer preFiltertoggleDiv.html('► Ouvrir les filtres'); // Affiche la flèche de droite (→)}}// Définissez un gestionnaire d'événements pour le divtoggleDiv.on('click', function() {isPreFilterVisible = !isPreFilterVisible; // Inverse l'étatupdateToggleDiv();// Sauvegarde l'état dans localStoragelocalStorage.setItem('isPreFilterVisible', isPreFilterVisible);});// Assurez-vous que preFilter est initialement visibleupdateToggleDiv();//=======================================================================// Construction de la liste étendue des lieux sur la base d'une API externe//=======================================================================function buildExtendedLieux() {var reflieux = new Array();$("#TLIEUX > table > tbody > tr").each( function(){reflieux.push($(this).find('td').eq(1).text());});var url = "https://gobzilla.incaworld.fr/lieux/"+_X+"/"+_Y+"/"+_N;$.getJSON( url, function( data ) {// alert(JSON.stringify(data));$.each( data, function( key, val ) {if (( reflieux.indexOf(val["id"]) == -1 ) && (val["id"] !== -1)){var row = "<tr bgcolor=\"#E0E0E0\" class=\"extendedLieu\"><td>" + val["distance"] ;row += "</td><td>" + val["id"] ;row += "</td><td>" + val["nom"] ;row += "</td><td>" + val["type"] ;row += "</td><td>" + val["x"] ;row += "</td><td>" + val["y"] ;row += "</td><td>" + val["z"] ;row += "</td></tr>";$(row).insertAfter("#TLIEUX table tr:last");}});});extendedLieuxBuilt = true;}//=======================================================================// Construction de la liste étendue des plantes sur la base d'une API externe//=======================================================================var text = $("ul:contains('Ma vue peut porter')").text();var matches = text.match(/Ma vue peut porter à (\d+) cases horizontalement et (\d+) verticalement/);if (matches) {var perh = matches[1]; // PER max (X Y)var perv = matches[2]; // PER max (N)var herbomax = perh * 1.5;var herbomin = +perh +1;// Récupérez la liste déroulantevar lvlherbo = $('#lvlherbo');// Ajoutez un gestionnaire d'événements pour écouter les changements de la liste déroulantelvlherbo.on('change', function() {var xfactor = parseFloat(lvlherbo.val()); // Obtenez la valeur sélectionnée en tant que nombrevar herbomax = perh * xfactor;var herbomin = +perh + 1;window.localStorage.setItem('xfactor', xfactor);window.localStorage.setItem('herbomax', herbomax);console.log("Nouvelle valeur de herbomax : " + herbomax);console.log("Nouvelle valeur de herbomin : " + herbomin);});// Lorsque la page est chargée, vérifiez s'il y a des valeurs précédemment enregistrées et utilisez-les si elles existentvar storedXFactor = window.localStorage.getItem('xfactor');var storedHerboMax = window.localStorage.getItem('herbomax');if (storedXFactor) {lvlherbo.val(storedXFactor); // Mettez à jour la liste déroulante avec la valeur précédemment enregistrée}if (storedHerboMax) {// Utilisez la valeur précédemment enregistrée pour herbomaxherbomax = parseFloat(storedHerboMax);console.log("Utilisation de la valeur précédemment enregistrée pour herbomax : " + herbomax);}console.log("portée herboriser: " + herbomax);console.log("limite mini d'herboriser: " + herbomin);} else {console.log("Aucune correspondance trouvée.");}function buildExtendedPlantes() {var refplantes = new Array();$("#TPLANTS> table > tbody > tr").each(function() {refplantes.push($(this).find('td').eq(1).text());});var url = "https://fzffz.000webhostapp.com/plantes.json";$.ajaxSetup({async: false});$.getJSON(url, function(data) {// alert(JSON.stringify(data));$.each(data, function(key, val) {var dist = Math.max(Math.abs(val["x"] - _X),Math.abs(val["y"] - _Y),Math.abs(val["z"] - _N));if (refplantes.indexOf(val["ID"]) == -1 && val["ID"] !== -1) {var bgColor =dist >= herbomin && dist <= herbomax? 'background-color: #93d278;': 'background-color: #E0E0E0;';var row ="<tr style='" +bgColor +"' class='extendedPlante'><td>" +dist;row += "</td><td>" + val["ID"];row += "</td><td>" + val["nom"] + " (" + val["espèce"] + ")";row += "</td><td>" + val["x"];row += "</td><td>" + val["y"];row += "</td><td>" + val["z"];row += "</td></tr>";$(row).insertAfter("#TPLANTS table tr:last");}});});$.ajaxSetup({async: true});extendedPlantesBuilt = true;}//=====================================================================================================// Fonction pour récupérer la vue de deathmétal depuis les scripts publics http://ie.gobland.fr//=====================================================================================================function fetchCSV(url) {return fetch(url).then(response => response.text()).then(csvData => parseCSV(csvData));}// Fonction pour convertir les données CSV en tableaufunction parseCSV(csvData) {// Convertir les données CSV en tableauconst rows = csvData.split('\n').slice(1); // Ignorer la première ligne d'en-têtesconst table = rows.map(row => row.split(','));// Créer le tableau HTML avec les en-têtes spécifiésconst tableElement = document.createElement('table');const headerRow = document.createElement('tr');// En-têtes spécifiésconst headers = ['Catégorie' , 'Dist.', 'Id', 'Nom', 'Niveau', 'Type' , 'Clan', 'X', 'Y', 'N', 'Z'];// Ajouter les en-têtes au tableauheaders.forEach(headerText => {const th = document.createElement('th');th.textContent = headerText;headerRow.appendChild(th);});// Ajouter la ligne d'en-tête au tableautableElement.appendChild(headerRow);// Ajouter les données CSV au tableautable.forEach(row => {const tr = document.createElement('tr');row.forEach(cell => {const td = document.createElement('td');// Nettoyer les guillemets autour des motsconst cleanedCell = cell.replace(/"/g, '');td.textContent = cleanedCell;tr.appendChild(td);});tableElement.appendChild(tr);});// Trouver l'élément cible pour insérer le tableauconst targetElement = document.evaluate("/html/body/div[3]/div/table/tbody/tr[2]/td[2]/center[3]/table/tbody",document,null,XPathR###lt.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue;// Modifier le texte de l'élément cibleif (targetElement) {targetElement.textContent = "Vue Death";targetElement.style.fontSize = '24px'; // Larger font sizetargetElement.style.fontWeight = 'bold'; // Bold styletargetElement.setAttribute("onclick", "javascript:retract('VUEDEATH');return false;");} else {console.error('Élément cible non trouvé.');}// Insérer le tableau en dessous de l'élément cibleif (targetElement) {targetElement.parentNode.parentNode.appendChild(tableElement);} else {console.error('Élément cible non trouvé.');}}// Fonction pour activer ou désactiver fetchCSV en fonction de l'état de la case à cocherfunction toggleFetchCSV() {const tableElement = document.querySelector('#TPLANTS');if ($('#ckbFetchCSV').is(":checked")) {fetchCSV(csvURL);// Afficher le tableau s'il existeif (tableElement) {tableElement.style.display = 'block';}} else {// Actions à effectuer lors de la désactivation de la récupération des données CSV// Cacher le tableau s'il existe et arrêter la récupérationif (tableElement) {tableElement.style.display = 'none';}// Ajoutez ici d'autres actions pour arrêter la récupération des données CSV si nécessaire}}// Récupération de la case à cocher par son IDconst ckbFetchCSV = document.getElementById('ckbFetchCSV');// Écouteur d'événement pour détecter le changement d'état de la case à cocherckbFetchCSV.addEventListener('change', toggleFetchCSV);// Appeler toggleFetchCSV au chargement de la page pour initialiser le comportementtoggleFetchCSV();// URL du CSV à récupérerconst csvURL = 'http://ie.gobland.fr/IE_Vue.php?id=330&passwd=30fae3bb4bf976a5cd29628102d42fd2&sep=,';// Appeler la fonction fetchCSV avec l'URL//fetchCSV(csvURL);//=======================================================================// VUE 2D. Piqué à Stéphane Beauquis (Extention Chrome)// Grab the data for Vue2D//=======================================================================var _terre="", _PX=0, _PY=0;// Get the name and num of the actual goblinvar nom = $('#identite').attr("nom");var num = $('#identite').attr("num");// Get the actual position and view size$('li').each(function(){// cache jquery varvar current = $(this);var matches = current.text().match(/Ma position actuelle est : X = ([\-0-9]+), Y = ([\-0-9]+), N = ([\-0-9]+)([^\-]+)/);if (matches) {_X = parseInt(matches[1]);_Y = parseInt(matches[2]);_N = parseInt(matches[3]);niveau = _N;_terre = matches[4];}matches = current.text().match(/L'affichage est limité à (\d+) cases horizontalement et (\d+) verticalement/);if (matches) {_PX = (parseInt(matches[1])>50)?50:parseInt(matches[1]);_PY = (parseInt(matches[2])>20)?20:parseInt(matches[2]);}});if (displayFullWidth == 1) {var width = 1800, height = 1800, leftgutter = 20, bottomgutter = 30, coordOffset = 1790;var tailleTxt = "16px sans-serif";$("#content").css("width" , "2000px");$("html > body > div").css("left" , "1800x");} else {var width = 630, height = 650, leftgutter = 30, bottomgutter = 20, coordOffset = 1190;var tailleTxt = "12px sans-serif";}var offset = 40,nbCase = _PX * 2 + 1,carre = Math.floor((width-offset-5) / nbCase),txt = {"font": '10px Fontin-Sans, Arial', stroke: "none", fill: "#000"};var alllieux = {};// Compute grid limitsvar xmin = _X - _PX,ymin = _Y - _PX,ymax = _Y + _PX,Dx = xmin * -1,Dy = ymin * -1;// Initialisation de tooltipOpen comme un objetvar tooltipOpen = {};// Fonction pour attacher les gestionnaires d'événements des tooltipsfunction attachTooltipEvents(st, key) {if (st[0]) {st[0].style.cursor = "pointer";var isClicked = false;// Gestion du clicst[0].onclick = function (e) {e.stopPropagation(); // Évite la propagation de l'événement aux parentsif (tooltipOpen[key]) {closeTooltip(key);} else {openTooltip(key);isClicked = true;}};// Gestion du double-clicst[0].ondblclick = function (e) {e.stopPropagation();if (isClicked) {closeTooltip(key);isClicked = false;}};// Gestion du survolst[0].onmouseover = function () {if (!tooltipOpen[key] && !isClicked) {closeTooltips(); // Fermer toutes les tooltips ouvertesopenTooltip(key);}};st[0].onmouseout = function (e) {var target = e.relatedTarget || e.toElement;if (!isClicked && (!target || target !== st[0])) {closeTooltip(key);}};// Gestion du clic droitst[0].oncontextmenu = function (e) {e.preventDefault(); // Empêche l'ouverture du menu contextuel par défaut// Copie du contenu de la tooltip dans le presse-papiersif (tooltipOpen[key]) {var tooltipContent = compute_text(key);// Méthode alternative pour copier le textevar tempInput = document.createElement('textarea');tempInput.style.position = 'absolute';tempInput.style.left = '-9999px';tempInput.value = tooltipContent;document.body.appendChild(tempInput);tempInput.select();try {var successful = document.execCommand('copy');var msg = successful ? 'copié dans le presse-papiers' : 'Échec de la copie du contenu de la tooltip';alert(msg);} catch (err) {console.error('Erreur lors de la copie du texte : ', err);}document.body.removeChild(tempInput);} else {alert('Aucune tooltip ouverte pour copier le contenu');}};}}function initializeTooltips() {for (var key in alllieux) {(function (st, key) {attachTooltipEvents(st, key);})(alllieux[key], key);}}function openTooltip(key) {if (key in alllieux && key in cells) { // Vérification importantevar st = alllieux[key];if (st && st[0]) {var x = cells[key].x;var y = cells[key].y;var tic = "";tic += (y >= (Math.floor(nbCase / 2)) * carre) ? "bottom" : "top";tic += (x > (Math.floor(nbCase / 2)) * carre) ? "left" : "right";var s = compute_text(key);draw_tooltip(st[0], 1, s, x, y, carre, tic);tooltipOpen[key] = true; // Utilisez tooltipOpen si nécessaire}}}function closeTooltip(key) {var st = alllieux[key];if (st[0] && tooltipOpen[key]) {draw_tooltip(st[0], 0);tooltipOpen[key] = false;}}function closeTooltips() {for (var k in tooltipOpen) {if (tooltipOpen[k]) {closeTooltip(k);}}}// Gestion des changements de filtre$("input.ckbFilter").change(function () {showVueFullWidth();showHideMiniMobs();showHideTrees();showHideVue2d();showHideExtendedLieux();showHideExtendedPlantes();showHideCdmNeeded();showHideCuisine();var showBigMonsters = $('input[name=ckbBigMonsters]').is(':checked');for (var key in cells) {var x = cells[key].x;var y = cells[key].y;var mapping = "i" + getMapping(key, showBigMonsters) + ".src";if (alllieux[key]) {alllieux[key].remove();// Supprimer de cells si la cellule est vide après filtragevar mapping = getMapping(key, showBigMonsters); // Recalculer mapping après suppressionif (mapping === "0000") { // Adaptez "0000" si nécessairedelete cells[key];}}if (mapping in images) { // Vérifier si l'image existealllieux[key] = R.image(images[mapping], x, y, carre - 1, carre - 1);// Attacher les gestionnaires d'événements pour les tooltips(function (st, key) {st[0].onload = function () {attachTooltipEvents(st, key);};})(alllieux[key], key);}}});// Appeler initializeTooltips lors du chargement initial de la page$(document).ready(function() {initializeTooltips();});// Images//ancienne adresse $("<img src=\"http://images.gobland.fr/addons/GGVue2D/0001.jpg\" id=\"i0001\" style=\"display:none;\" />").insertBefore(div);$("<img src=\"https://i.ibb.co/Dz9gDV3/0001.png\" id=\"i0001\" style=\"display:none;\" />").insertBefore(div);$("<img src=\"https://i.ibb.co/8P46Rjy/0010.png\" id=\"i0010\" style=\"display:none;\" />").insertBefore(div);$("<img src=\"https://i.ibb.co/QcGCGDb/0011.png\" id=\"i0011\" style=\"display:none;\" />").insertBefore(div);$("<img src=\"https://i.ibb.co/KwzFZvN/0100.png\" id=\"i0100\" style=\"display:none;\" />").insertBefore(div);$("<img src=\"https://i.ibb.co/XZjcdh7/0101.png\" id=\"i0101\" style=\"display:none;\" />").insertBefore(div);$("<img src=\"https://i.ibb.co/S56vt5R/0110.png\" id=\"i0110\" style=\"display:none;\" />").insertBefore(div);$("<img src=\"https://i.ibb.co/s1Jtrnk/0111.png\" id=\"i0111\" style=\"display:none;\" />").insertBefore(div);$("<img src=\"https://i.ibb.co/N3WcT1f/1000.png\" id=\"i1000\" style=\"display:none;\" />").insertBefore(div);$("<img src=\"https://i.ibb.co/PNvwHwZ/1001.png\" id=\"i1001\" style=\"display:none;\" />").insertBefore(div);$("<img src=\"https://i.ibb.co/vwcwq8y/1010.png\" id=\"i1010\" style=\"display:none;\" />").insertBefore(div);$("<img src=\"https://i.ibb.co/n6L9kYJ/1011.png\" id=\"i1011\" style=\"display:none;\" />").insertBefore(div);$("<img src=\"https://i.ibb.co/yFrybj2/1100.png\" id=\"i1100\" style=\"display:none;\" />").insertBefore(div);$("<img src=\"https://i.ibb.co/44QQsYw/1101.png\" id=\"i1101\" style=\"display:none;\" />").insertBefore(div);$("<img src=\"https://i.ibb.co/58Y158g/1110.png\" id=\"i1110\" style=\"display:none;\" />").insertBefore(div);$("<img src=\"https://i.ibb.co/wzsbGdL/1111.png\" id=\"i1111\" style=\"display:none;\" />").insertBefore(div);$("<img src=\"https://i.ibb.co/hRDDnZM/1200.png\" id=\"i1200\" style=\"display:none;\" />").insertBefore(div);$("<img src=\"https://i.ibb.co/gdm3cNW/1201.png\" id=\"i1201\" style=\"display:none;\" />").insertBefore(div);$("<img src=\"https://i.ibb.co/zrwHfBK/1210.png\" id=\"i1210\" style=\"display:none;\" />").insertBefore(div);$("<img src=\"https://i.ibb.co/fC7GWvd/1211.png\" id=\"i1211\" style=\"display:none;\" />").insertBefore(div);$("<img src=\"https://i.ibb.co/LxnJvjS/0200.png\" id=\"i0200\" style=\"display:none;\" />").insertBefore(div);$("<img src=\"https://i.ibb.co/WWDrSHy/0201.png\" id=\"i0201\" style=\"display:none;\" />").insertBefore(div);$("<img src=\"https://i.ibb.co/T4FnVMk/0210.png\" id=\"i0210\" style=\"display:none;\" />").insertBefore(div);$("<img src=\"https://i.ibb.co/wgHgjjC/0211.png\" id=\"i0211\" style=\"display:none;\" />").insertBefore(div);$("<img src=\"https://i.ibb.co/9ZKxpfP/1300.png\" id=\"i1300\" style=\"display:none;\" />").insertBefore(div);$("<img src=\"https://i.ibb.co/C6KwVnJ/1301.png\" id=\"i1301\" style=\"display:none;\" />").insertBefore(div);$("<img src=\"https://i.ibb.co/NFZVP34/1310.png\" id=\"i1310\" style=\"display:none;\" />").insertBefore(div);$("<img src=\"https://i.ibb.co/Sd2KRDg/0300.png\" id=\"i0300\" style=\"display:none;\" />").insertBefore(div);$("<img src=\"https://i.ibb.co/yhmsDKs/0301.png\" id=\"i0301\" style=\"display:none;\" />").insertBefore(div);$("<img src=\"https://i.ibb.co/r5P0BPV/0310.png\" id=\"i0310\" style=\"display:none;\" />").insertBefore(div);$("<img src=\"https://i.ibb.co/3Wnk7zT/0311.png\" id=\"i0311\" style=\"display:none;\" />").insertBefore(div);$("<img src=\"https://i.ibb.co/61rWLLL/0400.png\" id=\"i0400\" style=\"display:none;\" />").insertBefore(div);$("<img src=\"https://i.ibb.co/vxCmWFw/0401.png\" id=\"i0401\" style=\"display:none;\" />").insertBefore(div);$("<img src=\"https://i.ibb.co/tczccQC/0410.png\" id=\"i0410\" style=\"display:none;\" />").insertBefore(div);$("<img src=\"https://i.ibb.co/mGq9y8f/0411.png\" id=\"i0411\" style=\"display:none;\" />").insertBefore(div);$("<img src=\"https://i.ibb.co/FnxBk2g/1410.png\" id=\"i1410\" style=\"display:none;\" />").insertBefore(div);$("<img src=\"https://i.ibb.co/ZXZQxht/1411.png\" id=\"i1411\" style=\"display:none;\" />").insertBefore(div);$("<img src=\"https://i.ibb.co/kSrPcdd/1401.png\" id=\"i1401\" style=\"display:none;\" />").insertBefore(div);$("<img src=\"https://i.ibb.co/T8y0bM2/1400.png\" id=\"i1400\" style=\"display:none;\" />").insertBefore(div);$("<img src=\"https://i.ibb.co/FnxBk2g/1410.png\" id=\"i1410\" style=\"display:none;\" />").insertBefore(div);$("<img src=\"https://i.ibb.co/tJ8jHpq/0500.png\" id=\"i0500\" style=\"display:none;\" />").insertBefore(div);$("<img src=\"https://i.ibb.co/WFWVSF5/0501.png\" id=\"i0501\" style=\"display:none;\" />").insertBefore(div);$("<img src=\"https://i.ibb.co/JtSNYrd/0510.png\" id=\"i0510\" style=\"display:none;\" />").insertBefore(div);$("<img src=\"https://i.ibb.co/gdKT4Ph/0511.png\" id=\"i0511\" style=\"display:none;\" />").insertBefore(div);$("<img src=\"https://i.ibb.co/FX99SN7/1500.png\" id=\"i1500\" style=\"display:none;\" />").insertBefore(div);$("<img src=\"https://i.ibb.co/KWSLbzc/1501.png\" id=\"i1501\" style=\"display:none;\" />").insertBefore(div);$("<img src=\"https://i.ibb.co/9212GsW/1510.png\" id=\"i1510\" style=\"display:none;\" />").insertBefore(div);$("<img src=\"https://i.ibb.co/qx85SyM/1511.png\" id=\"i1511\" style=\"display:none;\" />").insertBefore(div);$("<img src=\"https://i.ibb.co/0qyL5mX/0600.png\" id=\"i0600\" style=\"display:none;\" />").insertBefore(div);$("<img src=\"https://i.ibb.co/f9gzMtm/0601.png\" id=\"i0601\" style=\"display:none;\" />").insertBefore(div);$("<img src=\"https://i.ibb.co/FYjyxXh/0610.png\" id=\"i0610\" style=\"display:none;\" />").insertBefore(div);$("<img src=\"https://i.ibb.co/jv47Q2W/0611.png\" id=\"i0611\" style=\"display:none;\" />").insertBefore(div);$("<img src=\"https://i.ibb.co/R7Dwjxy/1600.png\" id=\"i1600\" style=\"display:none;\" />").insertBefore(div);$("<img src=\"https://i.ibb.co/Dpksj9V/1601.png\" id=\"i1601\" style=\"display:none;\" />").insertBefore(div);$("<img src=\"https://i.ibb.co/mhcfSqt/1610.png\" id=\"i1610\" style=\"display:none;\" />").insertBefore(div);$("<img src=\"https://i.ibb.co/d0rb5QW/1611.png\" id=\"i1611\" style=\"display:none;\" />").insertBefore(div);$("<img src=\"https://i.ibb.co/SXbmrNws/1701.png\" id=\"i1701\" style=\"display:none;\" />").insertBefore(div);$("<img src=\"https://i.ibb.co/5XtTZS5V/0710.png\" id=\"i1710\" style=\"display:none;\" />").insertBefore(div);$("<img src=\"https://i.ibb.co/N6c76tnC/1711.png\" id=\"i1711\" style=\"display:none;\" />").insertBefore(div);$("<img src=\"https://i.ibb.co/GQ0BvM0g/0700.png\" id=\"i0700\" style=\"display:none;\" />").insertBefore(div);$("<img src=\"https://i.ibb.co/5g3Xr5Q8/0701.png\" id=\"i0701\" style=\"display:none;\" />").insertBefore(div);$("<img src=\"https://i.ibb.co/kspdj1kv/0711.png\" id=\"i0711\" style=\"display:none;\" />").insertBefore(div);$("<img src=\"https://i.ibb.co/4Zn39Jq5/1700.png\" id=\"i1700\" style=\"display:none;\" />").insertBefore(div);$("<img src=\"https://i.ibb.co/5XtTZS5V/0710.png\" id=\"i0710\" style=\"display:none;\" />").insertBefore(div);var images = {"0001": i0001.src,"0010": i0010.src,"0011": i0011.src,"0100": i0100.src,"0101": i0101.src,"0110": i0110.src,"0111": i0111.src,"1000": i1000.src,"1001": i1001.src,"1010": i1010.src,"1011": i1011.src,"1100": i1100.src,"1101": i1101.src,"1110": i1110.src,"1111": i1111.src,"1200": i1200.src,"1201": i1201.src,"1210": i1210.src,"1211": i1211.src,"0200": i0200.src,"0201": i0201.src,"0210": i0210.src,"0211": i0211.src,"1300": i1300.src,"1301": i1301.src,"1310": i1310.src,"0300": i0300.src,"0301": i0301.src,"0310": i0310.src,"0311": i0311.src,"0400": i0400.src,"0401": i0401.src,"0410": i0410.src,"0411": i0411.src,"1400": i1400.src,"1401": i1401.src,"1410": i1410.src,"1411": i1411.src,"0500": i0500.src,"0501": i0501.src,"0510": i0510.src,"0511": i0511.src,"1500": i1500.src,"1501": i1501.src,"1510": i1510.src,"1511": i1511.src,"0600": i0600.src,"0601": i0601.src,"0610": i0610.src,"0611": i0611.src,"1600": i1600.src,"1601": i1601.src,"1610": i1610.src,"1611": i1611.src,"1700": i1700.src,"1701": i1701.src,"1710": i1710.src,"1711": i1711.src,"0700": i0700.src,"0701": i0701.src,"0710": i0701.src,"0711": i0711.src};//initialisation de la vue2d//=============================================================// D r a w//=============================================================function build2DView() {Raphael.fn.drawGrid = function (x, y, w, h, wv, hv, color) {color = color || "#000";var path = ["M", Math.round(x) + .5, Math.round(y) + .5, "L", Math.round(x + w) + .5, Math.round(y) + .5, Math.round(x + w) + .5, Math.round(y + h) + .5, Math.round(x) + .5, Math.round(y + h) + .5, Math.round(x) + .5, Math.round(y) + .5],rowHeight = h / hv,columnWidth = w / wv;for (var i = 1; i < hv; i++) {path = path.concat(["M", Math.round(x) + .5, Math.round(y + i * rowHeight) + .5, "H", Math.round(x + w) + .5]);}for (i = 1; i < wv; i++) {path = path.concat(["M", Math.round(x + i * columnWidth) + .5, Math.round(y) + .5, "V", Math.round(y + h) + .5]);}return this.path(path.join(",")).attr({stroke: color});};R = Raphael("vue2D", width, height);// Draw the gridR.drawGrid(offset, offset, nbCase*carre, nbCase*carre, nbCase, nbCase, "#000");// Draw legend for X-axis and Y-axisfor( var i = 0 ; i < nbCase ; i++ ) {// X coordinates top/bottomR.text( Math.round(offset+(i+.5)*carre), 10, (xmin+i).toString() ).attr(txt);R.text( Math.round(offset+(i+.5)*carre), coordOffset, (xmin+i).toString() ).attr(txt);// Y coordinatesR.text( 10, Math.round(offset+(i+.5)*carre), (ymax-i).toString() ).attr(txt);}// Add to the list the current Goblinx = _PX * carre + offset + 1;y = _PX * carre + offset + 1;var key = (x + Dx) + Math.abs(y + Dy) * nbCase + 1;cells[key] = { x: x, y: y, realx: _X, realy: _Y };cells[key][_N] = {gob: [nom + " (" + num + ")\n"],monster: [], violetMonster: [], redMonster: [], orangeMonster: [], yellowMonster: [],place: [], object: [], plant: [], mechanicalCreature: []};var creatures = $('#TCREATURES').find("table");$("tbody tr", creatures).each(function (index, tr) {var lines = $('td', tr).map(function (index, td) {return $(td).text();});if (typeof lines[0] != "undefined") {x = (_PX + parseInt(lines[6]) - _X) * carre + offset + 1;y = (_PX - parseInt(lines[7]) + _Y) * carre + offset + 1;var key = (x + Dx) + Math.abs(y + Dy) * nbCase + 1;var lvl = lines[8].toString();if (!(key in cells)) {cells[key] = { x: x, y: y, realx: lines[6], realy: lines[7] };cells[key][lvl] = {gob: [], monster: [], violetMonster: [], redMonster: [], orangeMonster: [],yellowMonster: [], place: [], object: [], plant: [], mechanicalCreature: []};}if (!(lvl in cells[key])) {cells[key][lvl] = {gob: [], monster: [], violetMonster: [], redMonster: [], orangeMonster: [],yellowMonster: [], place: [], object: [], plant: [], mechanicalCreature: []};}if (lines[4] === "Mentalo" || lines[4] === "Nodef" || lines[4] === "Musculeux" ||lines[4] === "Vis Yonnair" || lines[4] === "Trad Scion" || lines[4] === "Zozo Giste") {cells[key][lvl]["gob"].push(lines[2] + ' - ' + lines[3]);} else if (lines[4] === "Créature mécanique" || lines[4] === "Squelette" || lines[4] === "Pierreux" || lines[4] === "Esprit-rôdeur" || lines[4] === "Pierreux") {console.log("suivant found!", lines[2]);cells[key][lvl]["mechanicalCreature"].push(lines[2] + ' - ' + lines[3]);} else if (parseInt(lines[3]) >= 50) {cells[key][lvl]["violetMonster"].push(lines[2] + ' - ' + lines[3]);} else if (parseInt(lines[3]) >= 40) {cells[key][lvl]["redMonster"].push(lines[2] + ' - ' + lines[3]);} else if (parseInt(lines[3]) >= 30) {cells[key][lvl]["orangeMonster"].push(lines[2] + ' - ' + lines[3]);} else if (parseInt(lines[3]) >= 25) {cells[key][lvl]["yellowMonster"].push(lines[2] + ' - ' + lines[3]);} else {cells[key][lvl]["monster"].push(lines[2] + ' - ' + lines[3]);}}});var lieux = $('#TLIEUX').find("table");$("tbody tr", lieux).each(function (index, tr) {var lines = $('td', tr).map(function (index, td) {return $(td).text();});if (typeof lines[0] != "undefined") {x = (_PX + parseInt(lines[4]) - _X) * carre + offset + 1;y = (_PX - parseInt(lines[5]) + _Y) * carre + offset + 1;var key = (x + Dx) + Math.abs(y + Dy) * nbCase + 1;var lvl = lines[6].toString();if (!(key in cells)) {cells[key] = { x: x, y: y, realx: lines[4], realy: lines[5] };cells[key][lvl] = {gob: [], monster: [], violetMonster: [], redMonster: [], orangeMonster: [],yellowMonster: [], place: [], object: [], plant: [], mechanicalCreature: []};}if (!(lvl in cells[key])) {cells[key][lvl] = {gob: [], monster: [], violetMonster: [], redMonster: [], orangeMonster: [],yellowMonster: [], place: [], object: [], plant: [], mechanicalCreature: []};}cells[key][lvl]["place"].push(lines[2]);}});var tresors = $('#TOBJETS').find("table");$("tbody tr", tresors).each(function (index, tr) {var lines = $('td', tr).map(function (index, td) {return $(td).text();});if (typeof lines[0] != "undefined") {x = (_PX + parseInt(lines[3]) - _X) * carre + offset + 1;y = (_PX - parseInt(lines[4]) + _Y) * carre + offset + 1;var key = (x + Dx) + Math.abs(y + Dy) * nbCase + 1;var lvl = lines[5].toString();if (!(key in cells)) {cells[key] = { x: x, y: y, realx: lines[3], realy: lines[4] };cells[key][lvl] = {gob: [], monster: [], violetMonster: [], redMonster: [], orangeMonster: [],yellowMonster: [], place: [], object: [], plant: [], mechanicalCreature: []};}if (!(lvl in cells[key])) {cells[key][lvl] = {gob: [], monster: [], violetMonster: [], redMonster: [], orangeMonster: [],yellowMonster: [], place: [], object: [], plant: [], mechanicalCreature: []};}cells[key][lvl]["object"].push(lines[2]);}});var plantes = $('#TPLANTS').find("table");$("tbody tr", plantes).each(function (index, tr) {var lines = $('td', tr).map(function (index, td) {return $(td).text();});if (typeof lines[0] != "undefined") {x = (_PX + parseInt(lines[3]) - _X) * carre + offset + 1;y = (_PX - parseInt(lines[4]) + _Y) * carre + offset + 1;var key = (x + Dx) + Math.abs(y + Dy) * nbCase + 1;var lvl = lines[5].toString();if (!(key in cells)) {cells[key] = { x: x, y: y, realx: lines[3], realy: lines[4] };cells[key][lvl] = {gob: [], monster: [], violetMonster: [], redMonster: [], orangeMonster: [],yellowMonster: [], place: [], object: [], plant: [], mechanicalCreature: []};}if (!(lvl in cells[key])) {cells[key][lvl] = {gob: [], monster: [], violetMonster: [], redMonster: [], orangeMonster: [],yellowMonster: [], place: [], object: [], plant: [], mechanicalCreature: []};}cells[key][lvl]["plant"].push(lines[2]);}});alllieux = {};for (var key in cells) {x = cells[key].x;y = cells[key].y;mapping = getMapping(key);if (mapping in images) {alllieux[key] = R.image(images[mapping], x, y, carre - 1, carre - 1);(function (st, key) {attachTooltipEvents(st, key);})(alllieux[key], key);} else {console.error("Image not found for mapping:", mapping);}}vue2DBuilt = true;}//getmappingfunction getMapping(k, showBigMonsters) {var r###lt = "";var cptGob = 0, cptMob = 0, cptPlace = 0, cptObj = 0, cptVioletMobs = 0, cptRedMobs = 0, cptorandedMobs = 0, cptyellowedMobs = 0, cptplants = 0, cptMech = 0;if ($('input[name=ckbNiveau]').is(':checked')) {if (niveau in cells[k]) {cptGob += cells[k][niveau]["gob"].length;cptMob += cells[k][niveau]["monster"].length;cptRedMobs += cells[k][niveau]["redMonster"].length;cptVioletMobs += cells[k][niveau]["violetMonster"].length;cptPlace += cells[k][niveau]["place"].length;cptObj += cells[k][niveau]["object"].length;cptplants += cells[k][niveau]["plant"].length;cptorandedMobs += cells[k][niveau]["orangeMonster"].length;cptyellowedMobs += cells[k][niveau]["yellowMonster"].length;cptMech += cells[k][niveau]["mechanicalCreature"].length; // Créatures mécaniques}} else {for (var lvl in cells[k]) {if ((lvl != "x") && (lvl != "y") && (lvl != "realx") && (lvl != "realy")) {cptGob += cells[k][lvl]["gob"].length;cptMob += cells[k][lvl]["monster"].length;cptRedMobs += cells[k][lvl]["redMonster"].length;cptVioletMobs += cells[k][lvl]["violetMonster"].length;cptPlace += cells[k][lvl]["place"].length;cptObj += cells[k][lvl]["object"].length;cptplants += cells[k][lvl]["plant"].length;cptorandedMobs += cells[k][lvl]["orangeMonster"].length;cptyellowedMobs += cells[k][lvl]["yellowMonster"].length;cptMech += cells[k][lvl]["mechanicalCreature"].length; // Créatures mécaniques}}}r###lt += (cptGob > 0) ? "1" : "0";// Priorité aux créatures mécaniquesif ((cptMech > 0) && ($('input[name=ckbMonster]').is(':checked'))) {r###lt += "7";} else if ((cptplants > 0) && ($('input[name=ckbplants]').is(':checked'))) {r###lt += "3";} else if (showBigMonsters && $('input[name=ckbMonster]').is(':checked')) { // Simplifié pour gros monstresr###lt += (cptRedMobs > 0) ? "2" : ((cptVioletMobs > 0) ? "6" : "0");} else if ((cptRedMobs > 0) && ($('input[name=ckbMonster]').is(':checked'))) {r###lt += "2";} else if ((cptVioletMobs > 0) && ($('input[name=ckbMonster]').is(':checked'))) {r###lt += "6";} else if ((cptorandedMobs > 0) && ($('input[name=ckbMonster]').is(':checked'))) {r###lt += "4";} else if ((cptyellowedMobs > 0) && ($('input[name=ckbMonster]').is(':checked'))) {r###lt += "5";} else if ((cptMob > 0) && ($('input[name=ckbMonster]').is(':checked'))) {r###lt += "1";} else {r###lt += "0";}r###lt += (($('input[name=ckbObject]').is(':checked')) && (cptObj > 0)) ? "1" : "0";r###lt += (($('input[name=ckbPlace]').is(':checked')) && (cptPlace > 0)) ? "1" : "0";return r###lt;}//=======================================================================================// Compute the global text that must be display in the popup.//=======================================================================================function compute_text(k) {var r###lt = "X=" + cells[k].realx + ", Y=" + cells[k].realy + "\n";var n = [];if ($('input[name=ckbNiveau]').is(':checked')) {if (niveau in cells[k]) {n.push(niveau);}} else {for (var lvl in cells[k]) {if ((lvl != "x") && (lvl != "y") &&(lvl != "realx") && (lvl != "realy")) {n.push(lvl);}}}var data = "";for (var i = 0; i < n.length; i++) {var k2 = n[i];if (k2 in cells[k]) { // <-- Vérification importantedata += getString(cells[k][k2]["gob"]);data += getString(cells[k][k2]["monster"], true);data += getString(cells[k][k2]["violetMonster"], true);data += getString(cells[k][k2]["redMonster"], true);data += getString(cells[k][k2]["orangeMonster"], true);data += getString(cells[k][k2]["yellowMonster"], true);data += getString(cells[k][k2]["place"]);data += getString(cells[k][k2]["plant"]);data += getString(cells[k][k2]["mechanicalCreature"]); // <-- mechanicalCreature iciif ($('input[name=ckbObject]').is(':checked')) {data += getString(cells[k][k2]["object"], true);}if (data != "") {r###lt += " \nNiveau: " + k2 + "\n" + data;data = "";}} // Fin de la condition if (k2 in cells[k])}return r###lt;}function getString(arr, pre) {if (typeof arr === 'undefined' || !arr ) return "";var res = "";if (arr.length > 0){for (var j=0;j<arr.length;j++){res += ((pre)?" - ":"") + arr[j] + "\n";}}return res;}//=======================================================================================// Process the data array and generate the string to display in the popup// If compressed = true, the number of items are counted to be displayed as N x items//=======================================================================================function getString(data,compressed) {if(typeof(compressed)==='undefined') compressed = false;var r###lt = "";if (compressed){var tmp = {};for( var i=0; i < data.length; i++ ){n = data[i];if (!(n in tmp)){tmp[n] = 0;}tmp[n] = tmp[n] + 1;}for( var k in tmp ){r###lt += "\t" + tmp[k] + " x " + k + "\n";}}else{for( var i=0; i < data.length; i++ ){r###lt += "\t" + data[i] + "\n";}}return r###lt;}function draw_tooltip(object, show, text, x, y, carre, from) {if(show == 0) {popup.remove();popup_txt.remove();transparent_txt.remove();return;}// Center X on middle of the cell.x += Math.floor(carre/2);//draw text somewhere to get its dimensions and make it transparenttransparent_txt = R.text(10,10, text).attr({fill: "transparent",font: tailleTxt});//get text dimensions to obtain tooltip dimensionsvar txt_box = transparent_txt.getBBox();if (from=="topright") {// Move to bottom of the celly += carre;// Compute positionXtext = x+5;Ytext = y+Math.floor(txt_box.height/2)+5;//draw textpopup_txt = R.text(Xtext, Ytext, text).attr({fill: "black",font: tailleTxt,'text-anchor': 'start'});var bb = popup_txt.getBBox();// Compute path for tooltip boxpathText = // 'M'ove to the 'dent' in the bubble"M" + (x) + " " + (y) +// 'v'ertically draw a line 5 pixels more than the height of the text"v" + (bb.height+5) +// 'h'orizontally draw a line 10 more than the text's width"h" + (bb.width+10) +// 'v'ertically draw a line to the bottom of the text"v" + -bb.height +// 'h'orizontally draw a line so we're 5 pixels from the left side"h" + -(bb.width+5) +// 'Z' closes the figure"Z";} else if (from=="topleft") {// Move to bottom of the celly += carre;// Compute positionXtext = x-(txt_box.width+5);Ytext = y+Math.floor(txt_box.height/2)+5;//draw textpopup_txt = R.text(Xtext, Ytext, text).attr({fill: "black",font: tailleTxt,'text-anchor': 'start'});var bb = popup_txt.getBBox();// Compute path for tooltip boxpathText = // 'M'ove to the 'dent' in the bubble"M" + (x) + " " + (y) +// 'v'ertically draw a line 5 pixels more than the height of the text"v" + (bb.height+5) +// 'h'orizontally draw a line 10 more than the text's width"h" + -(bb.width+10) +// 'v'ertically draw a line to the bottom of the text"v" + -bb.height +// 'h'orizontally draw a line so we're 5 pixels from the left side"h" + (bb.width+5) +// 'Z' closes the figure"Z";} else if (from=="bottomleft") {// Compute positionXtext = x-(txt_box.width+5);Ytext = y-Math.floor(txt_box.height/2)-6;//draw textpopup_txt = R.text(Xtext, Ytext, text).attr({fill: "black",font: tailleTxt,'text-anchor': 'start'});var bb = popup_txt.getBBox();// Compute path for tooltip boxpathText = // 'M'ove to the 'dent' in the bubble"M" + (x) + " " + (y) +// 'v'ertically draw a line 5 pixels more than the height of the text"v" + -(bb.height+5) +// 'h'orizontally draw a line 10 more than the text's width"h" + -(bb.width+10) +// 'v'ertically draw a line to the bottom of the text"v" + bb.height +// 'h'orizontally draw a line so we're 5 pixels from the left side"h" + (bb.width+5) +// 'Z' closes the figure"Z";} else // bottom right{// Compute positionXtext = x+5;Ytext = y-Math.floor(txt_box.height/2)-6;//draw textpopup_txt = R.text(Xtext, Ytext, text).attr({fill: "black",font: tailleTxt,'text-anchor': 'start'});var bb = popup_txt.getBBox();// Compute path for tooltip boxpathText = // 'M'ove to the 'dent' in the bubble"M" + (x) + " " + (y) +// 'v'ertically draw a line 5 pixels more than the height of the text"v" + -(bb.height+5) +// 'h'orizontally draw a line 10 more than the text's width"h" + (bb.width+10) +// 'v'ertically draw a line to the bottom of the text"v" + bb.height +// 'h'orizontally draw a line so we're 5 pixels from the left side"h" + -(bb.width+5) +// 'Z' closes the figure"Z";}//draw path for tooltip boxpopup = R.path( pathText ).attr( {fill: "yellow"} );//finally put the text in frontpopup_txt.toFront();}};//----------------------///FIN DE LA VUE 2D//----------------------//==========================================================================================================================================================================================================================// Traitements spécifiques à la page PROFIL//==========================================================================================================================================================================================================================if ($(location).attr('href').match(/^http:\/\/(.*\.)?gobland\.fr\/ProfilPerso\.php$/i)) {var skills = {};//fait apparaitre comp et tech et dons en couleurs dans MonProfil$('td:contains("Connaissance des Monstres")').parent().css("background-color","cefeda");$('td:contains("Identification des Trésors")').parent().css("background-color","fec8f1");$('td:contains("Limier")').parent().css("background-color","f9ffbc");$('td:contains("Dur")').parent().css("background-color","f9ffbc");//fait apparaitre "Grand Maître" en Gras dans Mon Profil$('td:contains("(Grand Maître)")').css("font-weight", "bold");$( document ).ready(function() {displayNextLevel();buildSkillsStats();buildSkillsMagie();addToolTipsTalents();// Met en rouge le malus de concentrationif (skills.CON < -1) {$('td:contains("Bonus de concentration")').css("color","red", "font-weight", "bold");} else {$('td:contains("Bonus de concentration")').css("color","green" , "font-weight", "bold");}});/// INFO BULLES TALENTS (au survol de la souris sur une comp ou tech, fait le calcul si c'est possible)function addToolTipsTalents() {$('a:contains("Symphonie Intestinale")').prop('title','Apprenti...........ATT/ESQ/PER -' + Math.floor((skills.PV/30)) + "\n" +'Compagnon...ATT/ESQ/PER -' + Math.floor((skills.PV/25)) + "\n" +'Maître...............ATT/ESQ/PER -' + Math.floor((skills.PV/20)) + "\n" +'Grand Maître..ATT/ESQ/PER -' + Math.floor((skills.PV/15))) ;$('a:contains("Afflux Sanguin")').prop('title','Apprenti ' + Math.floor((skills.PVMax/30) ) + 'D3' + ' (' + Math.floor((skills.PVMax/30) )*2 + ')' + "\n" +'Compagnon ' + Math.floor((skills.PVMax/25) ) + 'D3' + ' (' + Math.floor((skills.PVMax/25) )*2 + ')' + "\n" +'Maître ' + Math.floor((skills.PVMax/20) ) + 'D3' + ' (' + Math.floor((skills.PVMax/20) )*2 + ')' + "\n" +'Grand Maître ' + Math.floor((skills.PVMax/15) )+ 'D3' + ' (' + Math.floor((skills.PVMax/15) )*2 + ')') ;$('a:contains("Appel des Ombres")').prop('title','Apprenti......' + ' MT +' + (skills.MTP/2)+ ' | ' + ' RT +0 ' + ' | ' + ' MP +0 ' + ' | ' + ' RT -' + (skills.RPP/2) + "\n" +'Compagnon......' + ' MT +' + (skills.MTP)+ ' | ' + ' RT +0 '+ ' | ' + ' MP +0 '+ ' | ' + ' RP -' + (skills.RPP) + "\n" +'Maître......' + ' MT +' + (skills.MTP)+ ' | ' + ' RT +' + (skills.RTP/2) + ' | ' + ' MP -' +(skills.MPP/2) + ' | ' + ' RP -' + (skills.RPP) + "\n" +'Grand Maître......' + ' MT +' + (skills.MTP)+ ' | ' + ' RT +' + (skills.RTP)+ ' | ' + ' MP -' +(skills.MPP)+ ' | ' + ' RP -' + (skills.RPP));$('a:contains("Appel de la Nature")').prop('title','Apprenti......' + ' MS +' + (skills.MSP/2)+ ' | ' + ' RS +0 ' + ' | ' + ' MC +0 ' + ' | ' + ' RC -' + (skills.RCP/2) + "\n" +'Compagnon......' + ' MS +' + (skills.MSP)+ ' | ' + ' RS +0 '+ ' | ' + ' MC +0 '+ ' | ' + ' RC -' + (skills.RCP) + "\n" +'Maître......' + ' MS +' + (skills.MSP)+ ' | ' + ' RS +' + (skills.RSP/2) + ' | ' + ' MC -' +(skills.MCP/2) + ' | ' + ' RC -' + (skills.RCP) + "\n" +'Grand Maître......' + ' MS +' + (skills.MSP)+ ' | ' + ' RS +' + (skills.RSP)+ ' | ' + ' MC -' +(skills.MCP)+ ' | ' + ' RC -' + (skills.RCP));$('a:contains("Alchimie")').prop('title','ATT ' + Math.floor(skills.ATT ) + 'D6' + skills.ATTP + ' (' + Math.floor(((+skills.ATT) )*3.5 + +skills.ATTP) + ')' + "\n" +'......DEG......' + "\n" +'Apprenti...... ' + Math.floor(skills.ATT ) + 'D6' + skills.ATTP + ' (' + Math.floor(((+skills.ATT) )*3.5 + +skills.ATTP) + ')' + "\n" +'Compagnon...... ' + Math.floor((skills.PV/25) ) + 'D3' + ' (' + Math.floor((skills.PV/25) )*3.5 + ')' + "\n" +'Maître...... ' + Math.floor((skills.PV/20) ) + 'D3' + ' (' + Math.floor((skills.PV/20) )*3.5 + ')' + "\n" +'Grand Maître...... ' + Math.floor((skills.PV/15) )+ 'D3' + ' (' + Math.floor((skills.PV/15) )*3.5 + ')') ;$('a:contains("Renforcement magique")').prop('title','Apprenti......' + ' MM +' + (skills.MMP/2)+ ' | ' + ' RM +0 ' + ' | ' + ' MR +0 ' + ' | ' + ' RR -' + (skills.RCP/2) + "\n" +'Compagnon......' + ' MM +' + (skills.MMP)+ ' | ' + ' RM +0 '+ ' | ' + ' MR +0 '+ ' | ' + ' RR -' + (skills.RCP) + "\n" +'Maître......' + ' MM +' + (skills.MMP)+ ' | ' + ' RM +' + (skills.RMP/2) + ' | ' + ' MR -' +(skills.MRP/2) + ' | ' + ' RR -' + (skills.RRP) + "\n" +'Grand Maître......' + ' MM +' + (skills.MMP)+ ' | ' + ' RM +' + (skills.RMP)+ ' | ' + ' MR -' +(skills.MRP)+ ' | ' + ' RR -' + (skills.RRP));$('a:contains("Connaissance des Monstres")').prop('title', 'portée : ' + (Math.floor((+skills.PER)+(+skills.PERM)+(+skills.PERP))));$('a:contains("Projectile")').prop('title','ATT ' + Math.floor(((skills.PER/2 + skills.ATT/2)) - Math.max(0,(2/4-0))) + 'D6 +' + Math.floor(skills.PERM/2 + skills.ATTM/2 ) + '---> ' +(Math.floor((((skills.PER/2 + skills.ATT/2)) - Math.max(0,2/4-0)))*3.5 + Math.floor(skills.PERM/2 + skills.ATTM/2 )) + "\n" +'DEG ' + Math.floor((skills.PER/2 + skills.ATT/2)) + 'D3 +' + (skills.ATTM/2 + skills.PERM/2 ) + '---> ' +((Math.floor((skills.PER/2 + skills.ATT/2)))*2 + Math.floor(skills.PERM/2 + skills.ATTM/2 )) + ' (' +((((Math.floor((skills.PER/2 + skills.ATT/2)))*2 + Math.floor(skills.PERM/2 + skills.ATTM/2 ))) + ((((Math.floor((skills.PER/2 + skills.ATT/2)))*2 + Math.floor(skills.PERM/2 + skills.ATTM/2 )))/2)) + ')' + "\n" +'Divisé par 2 si résisté' + "\n" + 'Portée : ' + getRange(skills.PER + skills.PERP + skills.PERM));//calcul de la portée du POfunction getRange() {const totalPerception = +skills.PER + +skills.PERP + +skills.PERM;window.localStorage.setItem('totalPerception', totalPerception);if (totalPerception >= 1 && totalPerception <= 4) {return '1 case';} else if (totalPerception >= 5 && totalPerception <= 9) {return '2 cases';} else if (totalPerception >= 10 && totalPerception <= 15) {return '3 cases';} else if (totalPerception >= 16 && totalPerception <= 22) {return '4 cases';} else if (totalPerception >= 23 && totalPerception <= 30) {return '5 cases';} else if (totalPerception >= 31 && totalPerception <= 39) {return '6 cases';} else if (totalPerception >= 40 && totalPerception <= 50) {return '7 cases';} else if (totalPerception >= 51 && totalPerception <= 62) {return '8 cases';} else if (totalPerception >= 62 && totalPerception <= 74) {return '9 cases';} else {return 'Out of Range';}} ;$('a:contains("Baratin")').prop('title','Apprenti......' + Math.floor((1)+((skills.PER)/5 + (skills.REG)/5))+'D6' + ' (' + Math.floor(1+((skills.PER)/5 + (skills.REG)/5)*3.5) + ')' + "\n" +'Compagnon......' + Math.floor((1)+((skills.PER)/4 + (skills.REG)/4)) +'D6' + ' (' + Math.floor(1+((skills.PER)/4 + (skills.REG)/4)*3.5) + ')' + "\n" +'Maître ......' + Math.floor((1)+((skills.PER)/3 + (skills.REG)/3))+'D6' + ' (' + Math.floor(1+((skills.PER)/3 + (skills.REG)/3)*3.5) + ')' + "\n" +'Grand Maître ......' + Math.floor((1)+((skills.PER)/2 + (skills.REG)/2))+'D6' + ' (' + Math.floor(1+((skills.PER)/2 + (skills.REG)/2)*3.5) + ')');$('a:contains("Chirurgie")').prop('title','Apprenti...... ' + Math.floor((3/2)*skills.REG) + 'D3'+ ' (' + Math.floor((3/2)*skills.REG) *2 + ')' + "\n" +'Compagnon...... ' + Math.floor((4/2)*skills.REG) + 'D3' + ' (' + Math.floor((4/2)*skills.REG) *2 + ')' + "\n" +'Maître...... ' + Math.floor((5/2)*skills.REG) + 'D3' + ' (' + Math.floor((5/2)*skills.REG) *2 + ')' + "\n" +'Grand Maître...... ' + Math.floor((6/2)*skills.REG) + 'D3' + ' (' + Math.floor((6/2)*skills.REG) *2 + ')');$('a:contains("Soins")').prop('title','Apprenti...... ' + '+' + Math.floor(+skills.REG*1 + +skills.REGM) + ' PV' + "\n" +'Compagnon...... ' + '+' + Math.floor(+skills.REG*2 + +skills.REGM) + ' PV' +"\n" +'Maître...... ' + '+' + Math.floor(+skills.REG*3 + +skills.REGM) + ' PV' + "\n" +'Grand Maître...... ' + '+' + Math.floor(+skills.REG*4 + +skills.REGM) + ' PV');$('a:contains("Téléportation")').prop('title','Apprenti...... ' + 'Portée horizontale : ' + ((Math.floor(Math.sqrt(19+8*skills.MM*1/5+3))-7)/2 + 20 + + skills.PER + +skills.PERM ) + ' Portée verticale : ' +((Math.floor(((Math.sqrt(19+8*skills.MM*1/5+3))-7)/2/3+3))) + "\n" +'Compagnon...... ' + 'Portée horizontale : ' + ((Math.floor(Math.sqrt(19+8*skills.MM*1.1/5+3))-7)/2 + 20 + + skills.PER + +skills.PERM ) + ' Portée verticale : ' +((Math.floor(((Math.sqrt(19+8*skills.MM*1.1/5+3))-7)/2/3+3))) + "\n" +'Maître...... ' + 'Portée horizontale : ' + ((Math.floor(Math.sqrt(19+8*skills.MM*1.2/5+3))-7)/2 + 20 + + skills.PER + +skills.PERM ) + ' Portée verticale : ' +((Math.floor(((Math.sqrt(19+8*skills.MM*1.2/5+3))-7)/2/3+3))) + "\n" +'Grand Maître...... ' + 'Portée horizontale : ' + ((Math.floor(Math.sqrt(19+8*skills.MM*1.3/5+3))-7)/2 + 20 + + skills.PER + +skills.PERM ) + ' Portée verticale : ' +((Math.floor(((Math.sqrt(19+8*skills.MM*1.3/5+3))-7)/2/3+3))));$('a:contains("Double Dague")').prop('title','Grand Maître : 1ere attaque : ' + skills.ATT+ 'D6'+ '+' + skills.ATTP*1+ '+' + +skills.ATTM +'2eme attaque : ' + Math.floor(skills.ATT-+skills.ATT*0.25) + 'D6'+ '+' + Math.floor(skills.ATTP*1*0.25)+ '+' + Math.floor(skills.ATTM*0.25) +'3eme attaque : ' + Math.floor(skills.ATT-+skills.ATT*0.5) + 'D6'+ '+' + Math.floor(skills.ATTP*1*0.5)+ '+' + Math.floor(skills.ATTM*0.5) +'4eme attaque : ' + Math.floor(skills.ATT-+skills.ATT*0.75) + 'D6'+ '+' + Math.floor(skills.ATTP*1*0.75)+ '+' + Math.floor(skills.ATTM*0.75) +'Dégâts : ' + skills.DEG + 'D3'+ '+' + Math.floor(skills.DEGP*1.5)+ '+' + Math.floor(skills.DEGM)) ;$('a:contains("Flairer le gibier")').prop('title','Apprenti...... ' + 'Portée : ' + 1.5*(+skills.PER+(+skills.PERP)) + "\n" +'Compagnon......' + 'Portée : '+ 2*(+skills.PER+(+skills.PERP)) + "\n" +'Maître...... ' + 'Portée : ' + 2.5*(+skills.PER+(+skills.PERP)) + "\n" +'Grand Maître...... ' + 'Portée : ' + 3*(+skills.PER+(+skills.PERP)) + "\n" );$('a:contains("Jet de Pierres")').prop('title','Apprenti...... ' + 'Portée : 1' + "\n" +'Compagnon......' + 'Portée : 2' + "\n" +'Maître...... ' + 'Portée : 3' + "\n" +'Grand Maître...... ' + 'Portée : 4' );$('a:contains("Attaque Défensive")').prop('title','Apprenti.............. ' + 'ESQ +' + Math.floor(Math.max(skills.ESQ/3,1)) + " | ATT -1\n" +'Compagnon....... ' + 'ESQ +' + Math.floor(Math.max(skills.ESQ/2.5,2)) + " | ATT -1\n" +'Maître................... ' + 'ESQ +' + Math.floor(Math.max(skills.ESQ/2,3)) + " | ATT -1\n" +'Grand Maître..... ' + 'ESQ +' + Math.floor(Math.max(skills.ESQ/1.5,4)) + " | ATT -1");$('a:contains("Forme spectrale")').prop('title','Apprenti...... ' + 'ESQ +3 ARMM +1' + '.... total ARMM après conversion : ' + (Math.floor(skills.ARMP*0.15)+(+skills.ARMM)+1) + "\n" +'Compagnon......' + 'ESQ +4 ARMM +2' + '.... total ARMM après conversion : ' + (Math.floor(skills.ARMP*0.20)+(+skills.ARMM)+2) + "\n" +'Maître...... ' + 'ESQ +5 ARMM +3' + '.... total ARMM après conversion : ' + (Math.floor(skills.ARMP*0.25)+(+skills.ARMM)+3) + "\n" +'Grand Maître...... ' + 'ESQ +6 ARMM +4' + '.... total ARMM après conversion : ' + (Math.floor(skills.ARMP*0.30)+(+skills.ARMM)+4));$('a:contains("Herboriser")').prop('title','Apprenti...... ' + 'Portée : ' + 1.5*(+skills.PER+(+skills.PERP+(+skills.PERM))) + " (Fleur,Baie) " + "\n" +'Compagnon......' + 'Portée : '+ 2*(+skills.PER+(+skills.PERP)+(+skills.PERM)) + ' (Fleur,Baie, Plante grasse, Champignon)' + "\n" +'Maître...... ' + 'Portée : ' + 2.5*(+skills.PER+(+skills.PERP)+(+skills.PERM)) + ' (Fleur,Baie, Plante grasse, Champignon, Mousse)' + "\n" +'Grand Maître...... ' + 'Portée : ' + 3*(+skills.PER+(+skills.PERP)+(+skills.PERM)) + ' (tout)');$('a:contains("Rafale")').prop('title','FULL' + "\n" +'Apprenti...... ' + 'DEG ' + skills.DEG + 'D3' + skills.DEGM + ' (pas de malus de REG)' + "\n" +'Compagnon......' + 'DEG ' + skills.DEG + 'D3' + skills.DEGM + ' (Malus REG : ' + (Math.floor(skills.DEG/2)) + 'D3' + ')' + "\n" +'Maître...... ' + 'DEG ' + skills.DEG + 'D3' + skills.DEGM + ' (Malus REG : ' + (Math.floor(skills.DEG)) + 'D3' + ')' + "\n" +'Grand Maître...... ' + 'DEG ' + skills.DEG + 'D3' + skills.DEGM + ' (Malus REG : ' + (Math.floor(skills.DEG*2)) + 'D3' + ')' + "\n" +'RES' + "\n" +'Apprenti...... ' + 'DEG ' + (Math.floor(skills.DEG*0.3)) + 'D3' + skills.DEGM + ' (pas de malus de REG)' + "\n" +'Compagnon......' + 'DEG ' + (Math.floor(skills.DEG*0.4)) + 'D3' + skills.DEGM + ' (pas de malus de REG)' + "\n" +'Maître...... ' + 'DEG ' + (Math.floor(skills.DEG*0.5)) + 'D3' + skills.DEGM + ' (Malus REG : ' + (Math.floor(skills.DEG/2)) + 'D3' + ')' + "\n" +'Grand Maître...... ' + 'DEG ' + (Math.floor(skills.DEG*0.6)) + 'D3' + skills.DEGM + ' (Malus REG : ' + (Math.floor(skills.DEG) + 'D3' + ')')) ;// DONS$('a:contains("Dans")').prop('title', 'ATTM + ' + skills.danslmil);$('a:contains("Limier")').prop('title', 'PERM + ' + skills.limier);$('a:contains("Chef")').prop('title', 'Bonus Cuisine : + ' + 5*skills.grandchef);$('a:contains("Dur à cuir")').prop('title', '+ ' + skills.duracuir*5 + ' PV');};function displayNextLevel() {// Sélection de la cellule contenant l'expériencevar gobExperience = $('th:contains("Expérience")').parent().closest('tr');var tdExp = $('td:first', gobExperience);var sExp = tdExp.html();// Récupération des informations à partir du textevar regexExp = /Niveau......: (\d+) \((\d+) PI \| Niveau (\d+) : (\d+)/;var matchExp = sExp.match(regexExp);if (matchExp) {var niveau = matchExp[1]; // Récupération du niveauvar nbPIActuels = matchExp[2]; // Récupération du nombre de PI actuelsvar nextlevel = matchExp[3]; // Récupération du niveau suivantvar nextPI = matchExp[4]; // Récupération du nombre de PIvar nbTrain = Math.ceil((nextPI - nbPIActuels) / (2 * nextlevel)); // Calcul du nombre d'entraînements restantswindow.localStorage.setItem('niveau', niveau);window.localStorage.setItem('nbPIActuels', nbPIActuels);window.localStorage.setItem('nextlevel', nextlevel);window.localStorage.setItem('nextPI', nextPI);var pExp = sExp.indexOf(")");var sTrain = (nbTrain > 1) ? " entraînements" : " entraînement";// Modification du contenu de la cellule avec les nouvelles informationstdExp.html(sExp.substr(0, pExp + 1) + " ---> Il te reste " + nbTrain + sTrain + sExp.substr(pExp + 1));}var regexPX = /PX..........: (\d+)/; // Expression régulière pour récupérer PXvar regexPXPerso = /PX Personnels......: (\d+)/var regexPI = /PI..........: (\d+)/var matchPx = sExp.match(regexPX);var matchPXPerso = sExp.match(regexPXPerso);var matchPI = sExp.match(regexPI);if (matchPx) {var PX = matchPx[1];window.localStorage.setItem('PX', PX);}if (matchPXPerso) {var PXperso = matchPXPerso[1];window.localStorage.setItem('PXperso', PXperso);}if (matchPI) {var PI = matchPI[1];window.localStorage.setItem('PI', PI);}}// Recherche du texte "Date de création" dans toute la pagevar searchText = "Date de création";var elementsContainingText = [...document.querySelectorAll('body, body *')].filter(element => element.textContent.includes(searchText));// Recherche de l'élément contenant le texte spécifiquevar dateCreationElement;elementsContainingText.forEach(function(element) {if (element.textContent.includes(searchText)) {dateCreationElement = element;}});// Sélection de l'élément contenant le textevar textElement = document.querySelector('.gfmm > table:nth-child(1) > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(2)');if (textElement) {var textLines = textElement.textContent.trim().split('\n');var dateCreationLine = textLines.find(line => line.includes('Date de création'));if (dateCreationLine) {var dateCreation = dateCreationLine.match(/\d{4}-\d{2}-\d{2}/);if (dateCreation) {console.log("Date de création:", dateCreation[0]);var DateCrea = dateCreation[0];window.localStorage.setItem('DateCrea',DateCrea);// Utilisez dateCreation[0] comme nécessaire ici} else {console.log("Date de création non trouvée dans la dernière ligne.");}} else {console.log("Ligne contenant la date de création non trouvée.");}} else {console.log("Élément contenant le texte non trouvé.");}// Sélecteur pour cibler l'élément spécifiquevar selector = '.gfmm > table:nth-child(1) > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(2)';// Récupération de l'élément correspondant au sélecteurvar dateCreationElement = document.querySelector(selector);if (dateCreationElement) {var dateCreation = dateCreationElement.textContent.trim();console.log("Date de création:", dateCreation);// Utilisez dateCreation comme nécessaire ici} else {console.log("Élément contenant la date de création non trouvé.");}function buildSkillsStats() {// Recup position et PERvar gobPosition = $('th:contains("Position")').parent().closest('tr').text();var pos = gobPosition.match(/X = ([-]*\d+) \| Y = ([-]*\d+) \| N = ([-]*\d+)/);skills.X = pos[1];skills.Y = pos[2];skills.N = pos[3];var XYN = pos[1] + ', '+ pos[2] +', ' + pos[3] ;window.localStorage.setItem('XYN', XYN);var per = gobPosition.match(/Perception......: (\d+)/);skills.PER = per[1];var perp = gobPosition.match(/Cases (\W(\d+))/);skills.PERP = perp[1];var perm = gobPosition.match(/Cases (\W(\d+))(\W(\d+))/);skills.PERM = perm[3];var permax = +skills.PER + +skills.PERP + +skills.PERMwindow.localStorage.setItem('permax', permax);// Recup de la concentration (pour la modif css plus haut)var concentration = $('th:contains("Affinités")').parent().closest('tr').text();var conc = concentration.match(/Bonus de concentration : (\-\d+|\d+)/);skills.CON = conc[1];// Recup de la dlavar gobdla = $('th:contains("Echéance du Tour")').parent().closest('tr').text();var dla = gobdla.match(/(\d+)-(\d+)-(\d+)/);skills.DLA = dla[1];// Recup PV, PVMax et REGvar gobSante = $('th:contains("Santé")').parent().closest('tr');var tdSante = $('td:first', gobSante);res = tdSante.html().split(/<BR>/i); //gobSante.match(/: (\d+)([^:]+): (\d+)([^:]+): (\d+)/);skills.PV = res[0].match(/: (\d+)/)[1];skills.PVMax = res[1].match(/: (\d+)/)[1];var regensgob = $('td:contains("Régénération")').parent().closest('tr').text();var reg = regensgob.match(/Régénération..: (\d+)/);skills.REG = reg[1];var regp = regensgob.match(/D3(\W(\d+))/);skills.REGP = regp[1];var regm = regensgob.match(/D3(\W(\d+))(\W(\d+))/);skills.REGM = regm[3];/// recup DEGvar degatsgob = $('div:contains("Dégâts")').parent().closest('tr').text();var deg = degatsgob.match(/: (\d+)/);skills.DEG = deg[1];var degp = degatsgob.match(/D3(\W(\d+))/);skills.DEGP = degp[1];var degm = degatsgob.match(/D3(\W(\d+))(\W(\d+))/);skills.DEGM = degm[3];/// recup ARMvar armuresgob = $('div:contains("Armure")').parent().closest('tr').text();var armp = armuresgob.match(/Armure.....: (\d+)/);skills.ARMP = armp[1];var armm = armuresgob.match(/Armure.....: (\d+)(\W)(\d+)/);skills.ARMM = armm[3];/// recup ATTvar attaquesgob = $('td:contains("Attaque")').parent().closest('tr').text();var att = attaquesgob.match(/Attaque.....: (\d+)/);skills.ATT = att[1];var attp = attaquesgob.match(/Attaque.....: (\d+)D6(\W(\d+))/);skills.ATTP = attp[2];var attm = attaquesgob.match(/Attaque.....: (\d+)D6(\W(\d+))(\W(\d+))/);skills.ATTM = attm[4];/// recup ESQvar esquivesgob = $('td:contains("Esquive")').parent().closest('tr').text();var esq = esquivesgob.match(/Esquive....: (\d+)/);skills.ESQ = esq[1];var esqp = esquivesgob.match(/Esquive....: (\d+)D6(\W(\d+))(\W)(\d+)/);skills.ESQP = esqp[2];var esqm = esquivesgob.match(/Esquive....: (\d+)D6(\W)(\d+)(\W(\d+))/);skills.ESQM = esqm[4];};function getDon(don) {try {return $('td:contains("' + don + '")').next('td').text().match(/(\d) (\W) (\d)/)[1];} catch (err) {return null;}};function buildSkillsMagie() {//recup donsskills.danslmil = getDon("Dans");skills.limier = getDon("Limier");skills.grandchef = getDon("Grand Chef");skills.duracuir = getDon("Dur à cuir");///recup Magies (a finir)skills.RM = $('td.invisible:contains("(RM)")').next('td').text().match(/= ([-]*\d+)/)[1];skills.RMP = $('td.invisible:contains("(RM)")').next('td').text().match(/(\d+)(\W(\d+))/)[1];skills.RMM = $('td.invisible:contains("(RM)")').next('td').text().match(/(\d+)(\W(\d+))/)[2];skills.MM = $('td.invisible:contains("(MM)")').next('td').text().match(/= ([-]*\d+)/)[1];skills.MMP = $('td.invisible:contains("(MM)")').next('td').text().match(/(\d+)(\W(\d+))/)[1];skills.MMM = $('td.invisible:contains("(MM)")').next('td').text().match(/(\d+)(\W(\d+))/)[2];skills.RS = $('td.invisible:contains("(RS)")').next('td').text().match(/= ([-]*\d+)/)[1];skills.RSP = $('td.invisible:contains("(RS)")').next('td').text().match(/(\d+)(\W(\d+))/)[1];skills.RSM = $('td.invisible:contains("(RS)")').next('td').text().match(/(\d+)(\W(\d+))/)[2];skills.MS = $('td.invisible:contains("(MS)")').next('td').text().match(/= ([-]*\d+)/)[1];skills.MSP = $('td.invisible:contains("(MS)")').next('td').text().match(/(\d+)(\W(\d+))/)[1];skills.MSM = $('td.invisible:contains("(MS)")').next('td').text().match(/(\d+)(\W(\d+))/)[2];skills.RT = $('td.invisible:contains("(RT)")').next('td').text().match(/= ([-]*\d+)/)[1];skills.RTP = $('td.invisible:contains("(RT)")').next('td').text().match(/(\d+)(\W(\d+))/)[1];skills.RTM = $('td.invisible:contains("(RT)")').next('td').text().match(/(\d+)(\W(\d+))/)[2];skills.MT = $('td.invisible:contains("(MT)")').next('td').text().match(/= ([-]*\d+)/)[1];skills.MTP = $('td.invisible:contains("(MT)")').next('td').text().match(/(\d+)(\W(\d+))/)[1];skills.MTM = $('td.invisible:contains("(MT)")').next('td').text().match(/(\d+)(\W(\d+))/)[2];skills.RC = $('td.invisible:contains("(RC)")').next('td').text().match(/= ([-]*\d+)/)[1];skills.RCP = $('td.invisible:contains("(RC)")').next('td').text().match(/(\d+)(\W(\d+))/)[1];skills.RCM = $('td.invisible:contains("(RC)")').next('td').text().match(/(\d+)(\W(\d+))/)[2];skills.MC = $('td.invisible:contains("(RT)")').next('td').text().match(/= ([-]*\d+)/)[1];skills.MCP = $('td.invisible:contains("(RT)")').next('td').text().match(/(\d+)(\W(\d+))/)[1];skills.MCM = $('td.invisible:contains("(RT)")').next('td').text().match(/(\d+)(\W(\d+))/)[2];skills.RP = $('td.invisible:contains("(RP)")').next('td').text().match(/= ([-]*\d+)/)[1];skills.RPP = $('td.invisible:contains("(RP)")').next('td').text().match(/(\d+)(\W(\d+))/)[1];skills.RPM = $('td.invisible:contains("(RP)")').next('td').text().match(/(\d+)(\W(\d+))/)[2];skills.MP = $('td.invisible:contains("(MP)")').next('td').text().match(/= ([-]*\d+)/)[1];skills.MPP = $('td.invisible:contains("(MP)")').next('td').text().match(/(\d+)(\W(\d+))/)[1];skills.MPM = $('td.invisible:contains("(MP)")').next('td').text().match(/(\d+)(\W(\d+))/)[2];skills.RR = $('td.invisible:contains("(RR)")').next('td').text().match(/= ([-]*\d+)/)[1];skills.RRP = $('td.invisible:contains("(RR)")').next('td').text().match(/(\d+)(\W(\d+))/)[1];skills.RRM = $('td.invisible:contains("(RR)")').next('td').text().match(/(\d+)(\W(\d+))/)[2];//manque MR};///fonction pour récup les ordres des Suivants et les afficher directement dans la section Suivant dans Profil.function httpGet(url) {return new Promise((resolve, reject) => {const xhr = new XMLHttpRequest();xhr.open("GET", url);xhr.onload = () => {if (xhr.status === 200) {resolve(xhr.responseText);} else {reject(xhr.statusText);}};xhr.onerror = () => reject(xhr.statusText);xhr.send();});}// Fonction pour récupérer les valeurs stockées dans le localStoragefunction getFollowersNumbers() {return localStorage.getItem('followersnumbers');}function fetchFollowersInfo() {const followersNumbers = getFollowersNumbers();if (followersNumbers) {const baseUrl = 'http://games.gobland.fr/fo_orders.php?IdFO=';const numbersArray = JSON.parse(followersNumbers); // Parse le tableau JSON des numérosconst followersNames = localStorage.getItem('followersnames') || '';const namesArray = JSON.parse(followersNames); // Parse le tableau JSON des nomsconst followersData = [];numbersArray.forEach((number, index) => {const sanitizedNumber = number.replace(/['"\[\]]/g, '');const url = baseUrl + sanitizedNumber;httpGet(url).then(responseText => {const parser = new DOMParser();const htmlDoc = parser.parseFromString(responseText, "text/html");const xpath = "//html/body/div[3]/div/table/tbody/tr[2]/td[2]/form/table/tbody/tr[4]/td";const element = htmlDoc.evaluate(xpath, htmlDoc, null, XPathR###lt.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;if (element) {const texte = element.textContent.trim();followersData.push({ number: sanitizedNumber, name: namesArray[index], movements: texte });} else {console.log("Élément non trouvé sur la page", url);}if (index === numbersArray.length - 1) {displayFollowersInfo(followersData);}}).catch(error => {console.error("Erreur lors de la récupération de la page", url, ":", error);if (index === numbersArray.length - 1) {displayFollowersInfo(followersData);}});});} else {console.log("Pas de numéro de suivants. Visitez (une seule fois) votre page suivant pour récupérer les infos.");}}function displayFollowersInfo(followersData) {const insertionPoint = document.querySelector(".gfmm > table:nth-child(1) > tbody:nth-child(1) > tr:nth-child(9) > td:nth-child(2)");if (insertionPoint) {followersData.forEach(follower => {const movements = follower.movements.split(';').filter(Boolean);const suivantName = follower.name || '';movements.forEach(movement => {const formattedMovement = movement.trim();const isStop = formattedMovement === 'stop()';const span = document.createElement('span');span.innerHTML = `<b>${suivantName}</b> - <i>${formattedMovement}</i>`;span.querySelector('b').style.fontWeight = 'bold';span.querySelector('i').style.fontStyle = 'italic';if (isStop) {span.style.color = 'red';}insertionPoint.appendChild(span);insertionPoint.appendChild(document.createElement('br'));});});} else {console.log('prix spécialité', specialtyPrices);}}fetchFollowersInfo();}/// Affichage des caratsconst regMinerai = /^(\D*)(\d+)(\D*)$/const qualites = {'Médiocre': 2,'Moyenne': 2.75,'Normale': 3.5,'Bonne': 4.25,'Exceptionnelle': 5};$( document ).ready(function() {$('a:contains("taille")').each(function() {arr = this.text.match(regMinerai);carats = arr[2] * qualites[arr[3].split(' ')[3]];this.text = arr[0] + ' [Carats = ' + carats + ']'})});/// Décocher par défaut la case activer sa DLA sur la page de Log-In piqué a Seishin(function() {'use strict';$('input[type=checkbox][name=aDLA]').prop( "checked", false);})();// Décocher par défaut le vestaire piqué a Seishin(function() {'use strict';$('input[type=checkbox][name=VESTIAIRE]').prop( "checked", false );})();///fonction RemplaceText () pour remplacer le texte et ajouter des icones dans Gobland (inspiré par Lordslair))if ($(location).attr('href').match(/http:\/\/(.*\.)?gobland\.fr\/Vue\.php/i)) {const words = {// icones monstres'Abishaii Multicolore' : 'Abishaii Multicolore 👁️👁️ 💉','Abishaii Blanc' : 'Abishaii Blanc 👁️ 💉','Abishaii Bleu' : 'Abishaii Bleu 👁️ 💉','Abishaii Noir' : 'Abishaii Noir 👁️ 💉','Abishaii Rouge' : 'Abishaii Rouge 👁️ 💉','Abishaii Vert' : 'Abishaii Vert 👁️ 💉','Ankheg': 'Ankheg 🙈','Ame-en-peine' : 'Ame-en-peine 👁️','Amibe Géante' : 'Amibe Géante 🙈 🚨','Anaconda des Catacombes' : 'Anaconda des Catacombes 🙈','Araignée Géante' : 'Araignée Géante 🙈' ,'Arbre à gobelins' : 'Arbre à gobelins 🙈','Automate' : 'Automate 👁️👁️','Barghest' : 'Barghest 👁️👁️','Babélien' : 'Babélien 🙈','Basilic' : 'Basilic 🙈 🚨','Béhir' : 'Béhir 👁️ 🚨','Boggart' : 'Boggart 🙈','Bondin' : 'Bondin 🙈 ','Brontoscorpion' : 'Brontoscorpion 🙈','Bulette' : 'Bulette 👁️','Cattis' : 'Cattis 👁️👁️' ,'Caillouteux' : 'Caillouteux 🙈','Cerbère' : 'Cerbère 👁️👁️👁️ 💉💉','Centaure' : 'Centaure 🙈' ,'Chauve-souris Géante' : 'Chauve-souris Géante 🙈','Chimère' : 'Chimère 👁️👁️ 🚨' ,'Cockatrice' : 'Cockatrice 🙈 🚨','Colosse de pierre' : 'Colosse de pierre 👁️👁️👁️','Crapaud démoniaque' : 'Crapaud démoniaque 👁️','Crapaud Géant' : 'Crapaud Géant 🙈','Croquemitaine' : 'Croquemitaine 🙈','Cyclope' : 'Cyclope 🙈','Danseur de Mort' : 'Danseur de Mort 👁️','Diablotin' : 'Diablotin 👁️','Dao' : 'Dao 👁️👁️','Dumb' : 'Dumb 🙈','Djinn' : 'Djinn 👁️👁️','Dragon' : 'Dragon 🔥','Dryade' : 'Dryade 👁️👁️👁️','Effrit' : 'Effrit 🔥 ','Elémentaire de Terre' : 'Elémentaire de Terre 👁️ 🔥',"Elémentaire d'Eau" : "Elémentaire d'Eau 👁️ 🔥",'Elémentaire de Feu' : 'Elémentaire de Feu 👁️ 🔥','Elfe' : 'Elfe 🙈','Ent' : 'Ent 👁️👁️','Erinyes' : 'Erinyes 👁️ 🚨','Escargot' : 'Escargot 🙈','Ettercap' : 'Ettercap 🙈','Ettin' : 'Ettin 🙈','Eusmilus' : 'Eusmilus 🙈','Fantôme' : 'Fantôme 🙈','Feu follet' : 'Feu follet 🙈 🔥','Fongoïde' : 'Fongoïde 🙈','Furgolin' : 'Furgolin 🙈','Fungus Géant' : 'Fungus Géant 👁️','Fungus Violet' : 'Fungus Violet 👁️👁️','Galopin' : 'Galopin 🙈','Géant des Collines' : 'Géant des Collines 🙈','Géant du Feu' : 'Géant du Feu 🙈','Géant des Nuages' : 'Géant des Nuages 👁️','Géant des Tempêtes' : 'Géant des Tempêtes 👁️','Géant du Froid' : 'Géant du Froid 👁️','Géant de Pierre' : 'Géant de Pierre 👁️','Gnoll' : 'Gnoll 🙈','Gnome de pierre' : 'Gnome de pierre 👁️','Gelée ocre' : 'Gelée ocre 🙈 🚨','Glouton' : 'Glouton 🙈','Glouton Sanguinaire' : 'Glouton Sanguinaire 🙈','Gnome Artificier' : 'Gnome Artificier 🙈','Goblours' : 'Goblours 🙈','Golem de Fer' : 'Golem de Fer 🙈','Golem de Pierre' : 'Golem de Pierre 🙈','Gorille démoniaque' : 'Gorille démoniaque 🙈 🚨','Gorgone' : 'Gorgone 👁️ 🚨','Goule' : 'Goule 👁️','Gremlins' : 'Gremlins 🙈','Grouilleux' : 'Grouilleux 🙈','Griffon' : 'Griffon 👁️','Guêpe géante' : 'Guêpe géante 👁️ 💉','Harpie' : 'Harpie 🙈','Hellrot' : 'Hellrot 👁️👁️','Homme-Lézard' : 'Homme-Lézard 🙈','Homothérium' : 'Homothérium 👁️','Horreur chasseresse' : 'Horreur chasseresse 👁️👁️','Hippopotame furieux' : 'Hippopotame furieux 🙈','Hippogriffe' : 'Hippogriffe 👁️','Halfelin' : 'Halfelin 🙈','Hurleur' : 'Hurleur 🙈 🚨','Incube' : 'Incube 👁️','Illithid' : 'Illithid 👁️👁️👁️','Kappa' : 'Kappa 🙈','Kobold' : 'Kobold 🙈','Lacodon' : 'Lacodon 🙈 🚨','Lapin Sanguinaire' : 'Lapin Sanguinaire 🙈','Larbin démoniaque' : 'Larbin démoniaque 👁️','Légion-en-peine' : 'Légion-en-peine 👁️👁️ 😵','Lémure' : 'Lémure 👁️','Lézard Géant' : 'Lézard Géant 🙈','Licorne' : 'Licorne 🙈 🚨','Limace Géante' : ' Limace Géante 🙈 🚨','Loup-garou' : 'Loup-garou 🙈','Lutin' : 'Lutin 🙈 💉','Macrauchenia' : 'Macrauchenia 🙈' ,'Mante religieuse géante' : 'Mante religieuse géante 🙈 🚨','Manticore' : 'Manticore 🙈','Marid' : 'Marid 👁️👁️','Marmotte' : 'Marmotte 🙈' ,'Méduse' : 'Méduse 🙈 🚨','Meganeura' : 'Meganeura 🙈','Megantereon' : 'Megantereon 🙈','Méphite Aérien' : 'Méphite Aérien 🙈 🔥','Méphite de Feu' : 'Méphite de Feu 🙈 🔥','Méphite Aqueux' : 'Méphite Aqueux 🙈 🔥' ,'Méphite de Glace' : 'Méphite de Glace 🙈 🔥','Méphite de Verre' : 'Méphite de Verre 🙈 🔥','Méphite Magmatique' : 'Méphite Magmatique 🙈 🔥','Méphite Sulfureux' : 'Méphite Sulfureux 🙈 🔥','Mille-pattes géant' : 'Mille-pattes géant 👁️ ','Mimique' : 'Mimique 🙈 🚨','Minotaure' : 'Minotaure 🙈','Molosse Satanique' : 'Molosse Satanique 👁️ 🔥','Momie' : 'Momie 👁️ ','Monstre Rouilleur' : 'Monstre Rouilleur 🙈','Naga' : 'Naga 🙈 ','Nécrophage' : 'Nécrophage 🙈 💉',"Nuage d'insectes" : "Nuage d'insectes 🙈",'Nuée de Vermines' : 'Nuée de Vermines 🙈','Ombre' : 'Ombre 👁️','Ondine' : 'Ondine 👁️ 🔥','Oni' : 'Oni 👁️👁️ 😵 🚨','Oiseau-Tonnerre' : 'Oiseau-Tonnerre 🙈','Onyx' : 'Onyx 🙈','Orque Noir' : 'Orque Noir 🙈','Otyugh' : 'Otyugh 🙈','Ours hibou' : 'Ours hibou 👁️ ','Ours des Montagnes' : 'Ours des Montagnes 🙈','Orque': 'Orque 🙈','Plante Carnivore' : 'Plante Carnivore 👁️','Pégase' : 'Pégase 🙈','Pseudo-Dragon' : 'Pseudo-Dragon 🙈','Rakshah' : 'Rakshah 👁️👁️','Rat-garou' : 'Rat-garou 🙈','Rat Géant' : 'Rat Géant 🙈','Rocketeux' : 'Rocketeux 🙈','Sagouin' : 'Sagouin 🙈','Scarabée Géant' : 'Scarabée Géant 🙈 💉','Shai' : 'Shai 👁️👁️ 🔥','Sphinx' : 'Sphinx 👁️👁️','Slaad' : 'Slaad 🙈','Salamandre' : 'Salamandre 👁️ 🔥','Strige': 'Strige 🙈','Squelette' : 'Squelette 👁️','Spectre' : 'Spectre 👁️','Sprigan' : 'Sprigan 🙈','Sylphide' : 'Sylphide 👁️ 🔥','Taureau démoniaque' : 'Taureau démoniaque 👁️👁️ 🚨','Tertre errant' : 'Tertre errant 👁️ 🚨','Thri-kreen' : 'Thri-kreen 🙈','Tigre à Dents de Sabre' : 'Tigre à Dents de Sabre 🙈','Tigre-garou' : 'Tigre-garou 🙈','Titan' : 'Titan 🙈','Tortue Carnivore' : 'Tortue Carnivore 🙈','Tutoki': 'Tutoki 🙈 🚨','Troglodyte' : 'Troglodyte 👁️','Troll' : 'Troll 👁️','Vampire \\b' : 'Vampire 👁️👁️ 😵','Vampire Archaïque' : 'Vampire Archaïque 👁️👁️ 😵','Viverne' : 'Viverne 🙈 💉💉','Ver Géant Carnivore' : 'Ver Géant Carnivore 🙈','Worg' : 'Worg 🙈','Yéti' : 'Yéti 🙈 🚨','Zombi' : 'Zombi 👁️',};const tagsWhitelist = ['PRE', 'BLOCKQUOTE', 'CODE', 'INPUT', 'BUTTON', 'TEXTAREA'];function prepareRegex(string) {return string.replace(/(\({2}|([\[\]\^\&\$\.\?\/\\\+\{\}])|\)$)/g, '\\$1');}function getTooltipText(icon) {switch (icon) {case 'Ankheg 🙈':case 'Amibe Géante 🙈':case 'Anaconda des Catacombes 🙈':case 'Araignée Géante 🙈' :case 'Arbre à gobelins 🙈':case 'Babélien 🙈':case 'Basilic 🙈':case 'Boggart 🙈':case 'Bondin 🙈':case 'Caillouteux 🙈':case 'Centaure 🙈' :case 'Chauve-souris Géante 🙈':case 'Cockatrice 🙈':case 'Crapaud Géant 🙈':case 'Croquemitaine 🙈':case 'Cyclope 🙈':case 'Dumb 🙈':case 'Elfe 🙈':case 'Escargot 🙈':case 'Ettin 🙈':case 'Eusmilus 🙈':case 'Fantôme 🙈':case 'Fongoïde 🙈':case 'Furgolin 🙈':case 'Galopin 🙈':case 'Géant des Collines 🙈':case 'Géant du Feu 🙈' :case 'Gnoll 🙈':case 'Gelée ocre 🙈':case 'Glouton 🙈':case 'Glouton Sanguinaire 🙈':case 'Gnome Artificier ':case 'Goblours 🙈':case 'Golem de Fer 🙈':case 'Golem de Pierre 🙈':case 'Gorille démoniaque 🙈':case 'Gremlins 🙈':case 'Grouilleux 🙈':case 'Harpie 🙈':case 'Homme-Lézard 🙈':case 'Hippopotame furieux 🙈':case 'Halfelin 🙈':case 'Hurleur 🙈':case 'Kappa 🙈':case 'Kobold 🙈':case 'Lacodon 🙈':case 'Lapin Sanguinaire 🙈':case 'Lézard Géant 🙈':case 'Licorne 🙈':case 'Limace Géante 🙈':case 'Loup-garou 🙈':case 'Macrauchenia 🙈':case 'Mante religieuse géante 🙈':case 'Manticore 🙈':case 'Marmotte 🙈':case 'Méduse 🙈':case 'Meganeura 🙈':case 'Megantereon 🙈':case 'Mimique 🙈':case 'Minotaure 🙈':case 'Monstre Rouilleur 🙈':case 'Naga 🙈':case "Nuage d'insectes 🙈":case 'Nuée de Vermines 🙈':case 'Oiseau-Tonnerre 🙈':case 'Onyx 🙈':case 'Orque Noir 🙈':case 'Otyugh 🙈':case 'Ours des Montagnes 🙈':case 'Orque 🙈':case 'Pégase 🙈':case 'Pseudo-Dragon 🙈':case 'Rat-garou 🙈':case 'Rat Géant 🙈':case 'Rocketeux 🙈':case 'Sagouin 🙈':case 'Slaad 🙈':case 'Sprigan 🙈':case 'Strige 🙈':case 'Thri-kreen 🙈':case 'Tigre à Dents de Sabre 🙈':case 'Tigre-garou 🙈':case 'Titan 🙈':case 'Tortue Carnivore 🙈':case 'Tutoki 🙈':case 'Ver Géant Carnivore 🙈':case 'Worg 🙈':case 'Yéti 🙈':return "Ne voit pas le caché";case 'Ame-en-peine 👁️':case 'Béhir 👁️':case 'Bulette 👁️':case 'Crapaud démoniaque 👁️':case 'Danseur de Mort 👁️':case 'Diablotin 👁️':case 'Erinyes 👁️':case 'Fungus Géant 👁️':case 'Géant des Nuages 👁️':case 'Géant des Tempêtes 👁️':case 'Géant du Froid 👁️':case 'Géant de Pierre 👁️':case 'Gnome de pierre 👁️':case 'Gorgone 👁️':case 'Goule 👁️':case 'Griffon 👁️':case 'Homothérium 👁️':case 'Hippogriffe 👁️':case 'Incube 👁️':case 'Larbin démoniaque 👁️':case 'Lémure 👁️':case 'Mille-pattes géant 👁️':case 'Momie 👁️':case 'Ombre 👁️':case 'Ours hibou 👁️':case 'Plante Carnivore 👁️':case 'Squelette 👁️':case 'Spectre 👁️':case 'Tertre errant 👁️':case 'Troglodyte 👁️':case 'Troll 👁️':case 'Zombi 👁️':return "Voit très partiellement le caché";case 'Automate 👁️👁️':case 'Barghest 👁️👁️':case 'Cattis 👁️👁️':case 'Chimère 👁️👁️':case 'Dao 👁️👁️':case 'Djinn 👁️👁️':case 'Ent 👁️👁️':case 'Hellrot 👁️👁️':case 'Horreur chasseresse 👁️👁️':case 'Marid 👁️👁️':case 'Rakshah 👁️👁️':case 'Sphinx 👁️👁️':case 'Taureau démoniaque 👁️👁️':case 'Fungus Violet 👁️👁️':return "Voit partiellement le caché";case 'Colosse de pierre 👁️👁️👁️':case 'Dryade 👁️👁️👁️':case 'Illithid 👁️👁️👁️':return "Voit completement le caché";case 'Oni 👁️👁️ 😵':case 'Légion-en-peine 👁️👁️ 😵':case 'Vampire 👁️👁️ 😵':case 'Vampire Archaïque 👁️👁️ 😵':return "Voit partiellement le caché et Drain d'énergie";case 'Dragon 🔥':case 'Effrit 🔥 ':return "Dégats de zone";case 'Abishaii Blanc 👁️ 💉':case 'Abishaii Bleu 👁️ 💉':case 'Abishaii Noir 👁️ 💉':case 'Abishaii Rouge 👁️ 💉':case 'Abishaii Vert 👁️ 💉':case 'Guêpe géante 👁️ 💉':return "Voit très partiellement le caché et venin";case 'Lutin 🙈 💉':case 'Scarabée Géant 🙈 💉':case 'Nécrophage 🙈 💉':return "Ne voit pas le caché et venin";case 'Méphite Aérien 🙈 🔥':case 'Méphite de Feu 🙈 🔥':case 'Méphite Aqueux 🙈 🔥' :case 'Méphite de Glace 🙈 🔥':case 'Méphite de Verre 🙈 🔥':case 'Méphite Magmatique 🙈 🔥':case 'Méphite Sulfureux 🙈 🔥':return "Ne voit pas le caché et dégats de zone";case 'Elémentaire de Terre 👁️ 🔥':case 'Molosse Satanique 👁️ 🔥':case 'Ondine 👁️ 🔥':case 'Salamandre 👁️ 🔥':case 'Sylphide 👁️ 🔥':case 'Elémentaire de Terre 👁️ 🔥':case "Elémentaire d'Eau 👁️ 🔥":case 'Elémentaire de Feu 👁️ 🔥':return "Voit très partiellement le caché et dégats de zone";case 'Shai 👁️👁️ 🔥':return "Voit partiellement le caché et dégats de zone";case 'Viverne 🙈 💉💉':return "Ne voit pas le caché et venin virulent";case 'Feu follet 🙈 🔥':return "Ne voit pas le caché et dégats de zone et venin virulent";case 'Cerbère 👁️👁️👁️ 💉💉':return "Voit completement le caché et venin virulent";case 'Abishaii Multicolore 👁️👁️ 💉':return "Voit partiellement le caché et venin";}}$(document).ready(function() {'use strict';var regexs = [],replacements = [],rIsRegexp = /^\/(.+)\/([gim]+)?$/,word, text, texts, i, userRegexp;for (word in words) {if (typeof word === 'string' && words.hasOwnProperty(word)) {userRegexp = word.match(rIsRegexp);// Ajout des expressions régulières et des remplacementsif (userRegexp) {regexs.push(new RegExp(userRegexp[1], 'g'));} else {regexs.push(new RegExp(prepareRegex(word).replace(/\\?\*/g, function(fullMatch) {return fullMatch === '\\*' ? '*' : '[^ ]*';}), 'g'));}replacements.push(words[word]);}}// Sélecteur pour toutes les cellules de la cinquième colonnevar cells = document.querySelectorAll('#TCREATURES > center:nth-child(1) > table:nth-child(1) > tbody:nth-child(1) > tr > td:nth-child(5)');// Boucle à travers toutes les cellules de la cinquième colonnecells.forEach(function(cell) {var cellContent = cell.textContent;var originalContent = cell.innerHTML;regexs.forEach(function(value, index) {var replacementIcon = replacements[index];var tooltipText = getTooltipText(replacementIcon);cellContent = cellContent.replace(value, function(match) {// Ajout du tooltip avec la signification de l'icônereturn `<span title="${tooltipText}">${replacementIcon}</span>`;});});cell.innerHTML = cellContent;// Ajout de la classe 'monster-column' pour empêcher le retour à la lignecell.classList.add('monster-column');// Ajout des styles CSS directement icicell.style.whiteSpace = 'nowrap';});// Création du bouton "Légende"var legendButton = document.createElement('button');legendButton.textContent = 'Légende';legendButton.style.display = 'block';legendButton.style.margin = 'auto';legendButton.addEventListener('click', function(event) {event.stopPropagation(); // Empêche la propagation de l'événement de clic// Création de la fenêtre modale pour afficher la légendevar modal = document.createElement('div');modal.style.position = 'fixed';modal.style.top = '0';modal.style.left = '0';modal.style.width = '100%';modal.style.height = '100%';modal.style.backgroundColor = 'rgba(0, 0, 0, 0.5)';modal.style.display = 'flex';modal.style.alignItems = 'center';modal.style.justifyContent = 'center';// Contenu de la légendevar legendContent = document.createElement('div');legendContent.style.backgroundColor = 'rgb(255,235,205)';legendContent.style.padding = '20px';legendContent.style.borderRadius = '5px';// Ajout de chaque élément de la légendevar legendItems = {'🥰': 'créatures amies','🙈': 'ne voit pas le caché','👁️': 'voit très partiellement le caché','👁️👁️': 'voit partiellement le caché','👁️👁️👁️': 'voit complètement le caché','💉': 'venin','🔥': 'PV-','😵': 'drain d\'énergie','🚨': 'enlève de l\'esquive'};for (var emoji in legendItems) {var legendItem = document.createElement('div');legendItem.textContent = `${emoji}: ${legendItems[emoji]}`;legendContent.appendChild(legendItem);}//ajout des textes surlignés en couleurvar highlightText4 = document.createElement('div');highlightText4.textContent = 'Gobelin';highlightText4.style.backgroundColor = "#ccccff" ;highlightText4.style.color = 'black';highlightText4.style.padding = '5px';highlightText4.style.borderRadius = '5px';highlightText4.style.marginTop = '10px';// Ajout du texte surligné à la légendelegendContent.appendChild(highlightText4);// Création de l'élément pour le texte "Niveau supérieur à 35"var highlightText = document.createElement('div');highlightText.textContent = 'Monstre lvl supérieur à 39';highlightText.style.backgroundColor = '#f55442';highlightText.style.color = 'white';highlightText.style.padding = '5px';highlightText.style.borderRadius = '5px';highlightText.style.marginTop = '10px';// Ajout du texte surligné à la légendelegendContent.appendChild(highlightText);var highlightText2 = document.createElement('div');highlightText2.textContent = 'Monstre lvl supérieur à 29';highlightText2.style.backgroundColor = '#f59c42';highlightText2.style.color = 'white';highlightText2.style.padding = '5px';highlightText2.style.borderRadius = '5px';highlightText2.style.marginTop = '10px';// Ajout du texte surligné à la légendelegendContent.appendChild(highlightText2);var highlightText3 = document.createElement('div');highlightText3.textContent = 'Monstre lvl supérieur à 25';highlightText3.style.backgroundColor = '#f5b342';highlightText3.style.color = 'white';highlightText3.style.padding = '5px';highlightText3.style.borderRadius = '5px';highlightText3.style.marginTop = '10px';// Ajout du texte surligné à la légendelegendContent.appendChild(highlightText3);var highlightText5 = document.createElement('div');highlightText5.textContent = 'Vieilles créatures';highlightText5.style.backgroundColor = '#c791b1';highlightText5.style.color = 'white';highlightText5.style.padding = '5px';highlightText5.style.borderRadius = '5px';highlightText5.style.marginTop = '10px';// Ajout du texte surligné à la légendelegendContent.appendChild(highlightText5);var highlightText6 = document.createElement('div');highlightText6.textContent = 'Suivant/Créature controlé par un Gob';highlightText6.style.backgroundColor = '#ffadde';highlightText6.style.color = 'black';highlightText6.style.padding = '5px';highlightText6.style.borderRadius = '5px';highlightText6.style.marginTop = '10px';// Ajout du texte surligné à la légendelegendContent.appendChild(highlightText6);// Création de l'élément pour l'espacevar space = document.createElement('div');space.style.height = '10px'; // Vous pouvez ajuster la hauteur selon vos besoins// Ajout de l'espace à la légendelegendContent.appendChild(space);// Bouton pour fermer la fenêtre modalevar closeButton = document.createElement('button');closeButton.textContent = 'Fermer';closeButton.addEventListener('click', function() {document.body.removeChild(modal);});legendContent.appendChild(closeButton);modal.appendChild(legendContent);// Ajout de la fenêtre modale à la pagedocument.body.appendChild(modal);});// Sélection de l'élément à côté duquel vous voulez placer le bouton "Légende"var referenceElement = document.querySelector('html body div#content div#identite table.gf tbody tr td.gfmm h1');// Création d'un conteneur pour les boutonsvar buttonContainer = document.createElement('div');buttonContainer.style.marginTop = '10px';// Ajout du bouton "Légende" à ce conteneurbuttonContainer.appendChild(legendButton);// Insérer le conteneur des boutons sous l'élément de référencereferenceElement.parentNode.insertBefore(buttonContainer, referenceElement.nextSibling);});};if ($(location).attr('href').match(/http:\/\/(.*\.)?gobland\.fr\/Vue\.php|http:\/\/(.*\.)?gobland\.fr\/ProfilPerso\.php/i)) {const words = {// Clan et CM'((50125|411|346|330|286|388|386|387|83|407|456|164|407|385|405|393|46237|95720|130171|46237|47717|95720|130171|53|101759|101|50127|95982|108284|100794|94082|108|121|129|141|180|48520|66516|69423|119472|32954|135982|137884|146091|141303|141548|145977|153064|153598|147777|153645|152330|155811|163670|109|122306|90657|171796|177616|176978))' : '🥰',// méchants'((50|104|151691|270|267))' : '🔴',// Icônes équipement'Potion' : 'Potion 🧪','Parchemin' : 'Parchemin 📜📜📜📜📜📜📜alerte📜📜📜📜📜📜📜📜📜📜','CT| Canines de Trõll' : ' CT 💰','Anneau' : 'Anneau 💍 ','Bouclier' : 'Bouclier 🛡️','Corps' : 'Corps ☠️','Arme 1 Main' : 'Arme 1 main 🗡️','Outil' : "Outil 🔧",'Nourriture' : 'Nouriture 🍔','Rondin' : 'Rondin 🪵',// Dans Mon Profil'Santé' : 'Santé ❤️','Echéance du Tour' : 'Echéance du Tour⏱️','Combat' : 'Combat ⚔️','Affinités' : 'Affinités ✨','Position' : 'Position 🧭','Description' : 'Description 📜','Expérience' : 'Expérience 🇽🇵','Actions programmées': 'Actions programmées ⏰','Empathie' : 'Empathie 🫂','Sociale' : 'Sociale 🫂','Flux Obscur' : 'Flux Obscur ⚫','Voile Obscur' : 'Voile Obscur ⚫','Magie' : 'Magie 🪄','Psychique' : 'Psychique 🧠','Physique' : 'Physique 💪','Corporelle' : 'Corporelle💪','Technologie' : 'Technologie ⚙️',// Diverses icônes'Baguette' : 'Baguette 🪄 ','Escalier' : 'Escalier 🪜 ',//'Baie' : 'Baie 🫐',//'Arbre' : 'Arbre 🌳',//'Fleur' : 'Fleur 🌷','Zone de ténèbres' : 'Zone de ténèbres 🌫️','Porte' : 'Porte 🚪','':''};const tagsWhitelist = ['PRE', 'BLOCKQUOTE', 'CODE', 'INPUT', 'BUTTON', 'TEXTAREA'];function prepareRegex(string) {return string.replace(/(\({2}|([\[\]\^\&\$\.\?\/\\\+\{\}])|\)$)/g, '\\$1');}function isTagOk(tag) {return tagsWhitelist.indexOf(tag) === -1;}function enhanceText() {'use strict';// enclenchement des remplacements et ajouts d'iconesvar regexs = [],replacements = [],rIsRegexp = /^\/(.+)\/([gim]+)?$/,word, text, texts, i, userRegexp;for (word in words) {if ( typeof word === 'string' && words.hasOwnProperty(word) ) {userRegexp = word.match(rIsRegexp);// add the search/needle/queryif (userRegexp) {regexs.push(new RegExp(userRegexp[1], 'g'));} else {regexs.push(new RegExp(prepareRegex(word).replace(/\\?\*/g, function (fullMatch) {return fullMatch === '\\*' ? '*' : '[^ ]*';}), 'g'));}replacements.push(words[word]);}}texts = document.evaluate('//body//text()[ normalize-space(.) != "" ]', document, null, 6, null);for (i = 0; text = texts.snapshotItem(i); i += 1) {if ( tagsWhitelist.indexOf(text.parentNode.tagName) ) {regexs.forEach(function (value, index) {text.data = text.data.replace( value, replacements[index] );});}}};$( document ).ready(function() {enhanceText();});};