- // ==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.5.0
- // @icon https://i.ibb.co/HB9XztJ/gobzilla.jpg
- // ==/UserScript==
-
-
-
-
-
-
-
- // fonction herboriser (test seulement)
- (function() {
- 'use strict';
-
- const rangMultiplicateur = {
- 'Apprenti': 1.5,
- 'Compagnon': 2,
- 'Maître': 2.5,
- 'Grand Maître': 3
- };
-
- function askPER() {
- let per = localStorage.getItem('per_total');
- if (!per || isNaN(parseInt(per))) {
- per = prompt("Entrez votre PER total (PER + bonus éventuel)");
- if (per !== null && !isNaN(parseInt(per))) {
- localStorage.setItem('per_total', per);
- }
- }
- return parseInt(per);
- }
-
- function parsePage() {
- const content = document.querySelector('#identite .deborde');
- if (!content) return;
-
- const html = content.innerHTML;
-
- const matchCoord = html.match(/X=(-?\d+)\s+Y=(-?\d+)\s+N=(-?\d+)/);
- if (!matchCoord) return;
-
- const x0 = parseInt(matchCoord[1]);
- const y0 = parseInt(matchCoord[2]);
- const n0 = parseInt(matchCoord[3]);
-
- const directionMatch = html.match(/elle se trouve ([^<]+)/);
- if (!directionMatch) return;
-
- const directionText = directionMatch[1];
-
- const rangMatch = html.match(/en tant que (\w+ ?\w*)/i);
- const rang = rangMatch ? rangMatch[1].trim() : "Apprenti";
-
- const per = askPER();
- if (!per) return;
-
- const portéeMax = Math.floor(rangMultiplicateur[rang] * per);
- const portéeMin = Math.floor(rangMultiplicateur['Apprenti'] * per); // portée min = apprenti
-
- const direction = {
- x: 0,
- y: 0,
- n: 0
- };
-
- if (directionText.includes('plus en Osten')) direction.x = 1;
- if (directionText.includes('plus en Western')) direction.x = -1;
- if (directionText.includes('plus en Nordi')) direction.y = 1;
- if (directionText.includes('plus en Sudi')) direction.y = -1;
- if (directionText.includes('plus en Haut')) direction.n = 1;
- if (directionText.includes('plus en Bas')) direction.n = -1;
-
- const nPortéeMin = Math.floor(portéeMin / 2);
- const nPortéeMax = Math.floor(portéeMax / 2);
-
- const xMin = x0 + direction.x * portéeMin;
- const xMax = x0 + direction.x * portéeMax;
- const yMin = y0 + direction.y * portéeMin;
- const yMax = y0 + direction.y * portéeMax;
- const nMin = n0 + direction.n * nPortéeMin;
- const nMax = n0 + direction.n * nPortéeMax;
-
- const result = `
- <div style="border: 2px dashed #4caf50; padding: 8px; margin-top: 10px;">
- 📍 <b>Estimation position de la plante</b><br>
- ➤ Direction : ${directionText}<br>
- ➤ Coordonnées actuelles : X=${x0}, Y=${y0}, N=${n0}<br>
- ➤ <b>Fourchette estimée</b> :<br>
- ⤷ X entre ${Math.min(xMin,xMax)} et ${Math.max(xMin,xMax)}<br>
- ⤷ Y entre ${Math.min(yMin,yMax)} et ${Math.max(yMin,yMax)}<br>
- ⤷ N entre ${Math.min(nMin,nMax)} et ${Math.max(nMin,nMax)}<br>
- (Portée ${rang} : ${portéeMax} cases, profondeur : ${nPortéeMax})
- </div>
- `;
-
- content.innerHTML += result;
- }
-
- window.addEventListener('load', parsePage);
- })();
-
-
-
- //==================================================================
- /// 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éliorations
- row.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 valeur
- costValue += price; // Mettre à jour le coût
- improvements.innerText = parseInt(improvements.innerText) + 1; // Mettre à jour Nb Améliorations
- row.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éliorations
- row.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 valeur
- costValue -= price; // Mettre à jour le coût
- improvements.innerText = parseInt(improvements.innerText) + -1; // Mettre à jour Nb Améliorations
- row.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éliorations
- function 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 minutes
- function 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/decrement
- function updateValue(value, change) {
- return value + change;
- }
-
-
-
- // Sélection des caractéristiques et initialisation des valeurs
- const characteristics = [
- document.querySelectorAll('tr.pair')[1], // Durée du tour
- document.querySelectorAll('tr.pair')[2], // PV max
- document.querySelectorAll('tr.pair')[3], // Perception
- document.querySelectorAll('tr.pair')[4], // Attaque
- document.querySelectorAll('tr.pair')[5], // Esquive
- document.querySelectorAll('tr.pair')[6], // Dégâts
- document.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 don
- const 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 don
- const donsCosts = [10, 20, 10, 10, 10];
- // Tableau des améliorations pour chaque don
- const donsImprovements = donsRows.map(row => row ? parseImprovements(row) - 1 : /* Valeur par défaut */ 0);
- // Tableau des coûts totaux pour chaque don
- const 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 dons
- const totalDonCostValue = donsTotalCosts.reduce((acc, curr) => acc + curr, 0);
- localStorage.setItem('totalDonCostValue', totalDonCostValue);
- // Création de la ligne "Total" pour les dons
- const 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 dons
- const lastDonRow = document.querySelector('tr.pair:last-child');
- lastDonRow.parentNode.appendChild(totalDonRow);
- // Fonction pour extraire le coût d'un don à partir de sa ligne
- function 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 ligne
- function 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éliorations
- function 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éfaut
- defaultPrices = {
- '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 total
- updateDisplayedValues(); // Mettre à jour les valeurs affichées
- calculateLevel(); // 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 local
- location.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 localStorage
- const totalCost = characteristics.reduce((acc, row) => {
- const characteristicName = row.children[0].innerText.split('(')[0].trim(); // Récupération du nom sans les parenthèses
- const improvements = parseInt(row.children[2].innerText); // Nombre d'améliorations
- const price = getPriceForSpecialty(specialiteJoueur, characteristicName); // Utilisation de la fonction pour récupérer le prix
-
- let cumulativeCost = 0;
- for (let i = 1; i <= improvements; i++) {
- cumulativeCost += price * i;
- }
-
-
- // Affichage du détail pour chaque ligne dans la console
- console.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 localStorage
- localStorage.setItem('totalCost', totalCost);
-
- // Mise à jour de l'affichage du total dans l'interface HTML
- const 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 PI
- function 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 storage
- const 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 à jour
- const 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 nbPIActuels
- const 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éation
- const 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 xpParJourfiged
- const 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 contenu
- const newElement = document.createElement('div');
- newElement.innerHTML = newContent;
- // Remplacement du contenu existant par le contenu nouvellement créé
- targetElement.innerHTML = ''; // Vide d'abord le contenu existant
- targetElement.appendChild(newElement);
- }
-
- updateDisplayedValues();
- calculateLevel();
- }
-
-
-
- //==============================================================================
- /// calculateur des DLA (page mon profil et menu.php)
- //==============================================================================
-
- /// récup des variable dans mon profil
- if (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 dates
- const 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 dateContainer
- const spans = dateContainer.querySelectorAll('span.dla');
-
- // Vérification si les éléments <span> sont trouvés
- if (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 storage
- localStorage.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écifique
- const xpath = '/html/body/div[3]/div/table/tbody/tr[2]/td[2]/table/tbody/tr[2]/td/br[3]';
- const xpathResult = document.evaluate(xpath, document, null, XPathResult.ANY_TYPE, null);
-
- // Récupération du nœud correspondant à l'élément XPath
- const node = xpathResult.iterateNext();
-
- if (node) {
- // Récupération du texte suivant l'élément XPath
- const valeurPAText = node.nextSibling.textContent;
-
- // Expression régulière pour extraire le nombre
- const 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 Paris
- const 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 Date
- const 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 millisecondes
- const 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 minutes
- const 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 localStorage
- const 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 end
- if (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 end
- if (!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 police
- smallText.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 ligne
- targetElement2.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ône
- var 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ône
- icon.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ône
- var 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éfinie
- if (!window.localStorage.getItem('followersnumbers')) {
- // Sélection de l'élément contenant les informations des Suivants
- let followersTable = document.querySelector('td[style="text-align:left;vertical-align:top;"] table');
-
- // Vérification si l'élément existe
- if (followersTable) {
- let followersnumbers = []; // Tableau pour stocker les numéros
- let followersnames = []; // Tableau pour stocker les textes restants
-
- // Récupération de tous les éléments <a> dans la table
- let followerLinks = followersTable.querySelectorAll('a');
-
- // Parcours des liens pour extraire les informations
- followerLinks.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 crochet
- let resteTexte = match[2]; // Texte restant
-
- // Stockage dans les tableaux
- followersnumbers.push(numero);
- followersnames.push(resteTexte);
- }
- });
-
- // Enregistrement dans le stockage local
- localStorage.setItem('followersnumbers', JSON.stringify(followersnumbers));
- localStorage.setItem('followersnames', JSON.stringify(followersnames));
- }
- }
-
-
-
-
- //mise en couleur de la position de la CM dans Profil
- if ($(location).attr('href').match(/http:\/\/(.*\.)?gobland\.fr\/Follower\.php\?IdFO=\d+/i)) {
- (function() {
- // Sélectionne tous les éléments 'td' contenant le texte des positions
- const positionElements = document.querySelectorAll('td[style="text-align:left;"]');
-
- // Parcours des éléments pour trouver celui contenant les informations de position
- positionElements.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 rouge
- const posXElement = document.createElement('strong');
- posXElement.textContent = `X = ${posX}`;
- posXElement.style.color = 'red'; // Changer la couleur en rouge
-
- const posYElement = document.createElement('strong');
- posYElement.textContent = `Y = ${posY}`;
- posYElement.style.color = 'red'; // Changer la couleur en rouge
-
- const 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 texte
- const 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 texte
- element.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 page
- var 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és
- if (elements.length > 0) {
- // Création d'un tableau pour stocker les contenus des éléments
- var contents = [];
-
- // Boucle à travers les éléments trouvés pour récupérer leur contenu
- elements.forEach(function(element) {
- var content = element.textContent.trim();
- contents.push(content);
- });
-
- // Stockage des contenus dans le stockage local
- localStorage.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 raccourcis
- if ($(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 localStorage
- const 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écifique
- document.body.appendChild(errorMessage);
- } else {
- const tresors = JSON.parse(tresorsData);
-
- // Création d'un élément de tableau
- const nouveauTableau = document.createElement('table');
- nouveauTableau.style.border = '1px solid black'; // Style du tableau
-
- // Création de l'en-tête du tableau
- const 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ête
- cellule.style.border = '1px solid black'; // Style des cellules
- });
-
- // Ajout des données de trésors dans le tableau
- const 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ésors
- const elementSpecifique = document.evaluate('/html/body/div[3]/div/table/tbody/tr[2]/td[2]/form/table/tbody/tr[6]', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
-
- if (elementSpecifique) {
- // Insérer le tableau des trésors après l'élément spécifique
- elementSpecifique.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 contextuel
- const 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éfaut
- tooltip.textContent = 'Ordre ajouté';
- document.body.appendChild(tooltip);
-
- // Créer un tableau pour suivre les cellules cliquées
- const 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, XPathResult.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ée
- this.style.border = '4px solid red'; // Bordure pour la cellule cliquée
-
- const 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 curseur
- tooltip.style.left = `${event.pageX + 10}px`; // Position horizontale
- tooltip.style.top = `${event.pageY + 10}px`; // Position verticale
- tooltip.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, XPathResult.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ée
- if (!clickedPosCells.has(this)) {
- this.style.backgroundColor = '#d3d3d3'; // Couleur de fond pour la cellule cliquée
- clickedPosCells.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 curseur
- tooltip.style.left = `${event.pageX + 10}px`; // Position horizontale
- tooltip.style.top = `${event.pageY + 10}px`; // Position verticale
- tooltip.style.display = 'block'; // Afficher le message
- });
- });
-
- // Fonction pour réinitialiser le style des cellules
- function resetCellStyles() {
- // Réinitialiser le style des cellules de position uniquement
- positionCells.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 uniquement
- references.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 textarea
- function 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éplace
- document.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 boutons
- default:
- break;
- }
- return output;
- }
-
- // recup du num de goblin pour l'ordre follow
- function generateFollowOrder(distance) {
- const gobId = localStorage.getItem('gobId'); // Récupérer l'ID depuis le local storage
-
- if (!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 follow
- const 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 nombre
- followDistanceSelect.appendChild(option);
- });
-
-
-
- // Sélection du textarea
- const textarea = document.querySelector("textarea[name='sc']");
-
- // Fonction pour insérer du texte dans le textarea
- function 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 fond
- button0.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 page
- const 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 fond
- button1.addEventListener('click', function(event) {
- event.preventDefault(); // Empêche le rafraîchissement de la page
- const output = generateText('toutramasser');
- insertText(output);
- });
-
- // Création du deuxième bouton
- const button2 = document.createElement('button');
- button2.textContent = 'Tout déposer (sol)';
- button2.style.backgroundColor= '#e4ed97'; // Définir la couleur de fond
- button2.addEventListener('click', function(event) {
- event.preventDefault(); // Empêche le rafraîchissement de la page
- const output = generateText('toutdeposerausol');
- insertText(output);
- });
-
- // Création du troisième bouton
- const button3 = document.createElement('button');
- button3.textContent = 'Tout déposer (chateau)';
- button3.style.backgroundColor= '#e4ed97'; // Définir la couleur de fond
- button3.addEventListener('click', function(event) {
- event.preventDefault(); // Empêche le rafraîchissement de la page
- const output = generateText('toutdeposerauchateau');
- insertText(output);
- });
-
- // Création du troisième bouton
- const button3b = document.createElement('button');
- button3b.textContent = 'Tout déposer (manoir)';
- button3b.style.backgroundColor= '#e4ed97'; // Définir la couleur de fond
- button3b.addEventListener('click', function(event) {
- event.preventDefault(); // Empêche le rafraîchissement de la page
- const output = generateText('toutdeposeraumanoir');
- insertText(output);
- });
-
- // Création du 4em bouton
- const button4 = document.createElement('button');
- button4.textContent = 'Tout ramasser (sauf corps)';
- button4.style.backgroundColor= '#e4ed97'; // Définir la couleur de fond
- button4.addEventListener('click', function(event) {
- event.preventDefault(); // Empêche le rafraîchissement de la page
- const output = generateText('toutramassersaufcorps');
- insertText(output);
- });
-
- // Création du 5em bouton
- const 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 page
- const output = generateText('entrainer');
- insertText(output);
- });
-
- // Création du 6em bouton
- const 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 fond
- button6.addEventListener('click', function(event) {
- event.preventDefault(); // Empêche le rafraîchissement de la page
- const output = generateText('dépot1objetcase');
- insertText(output);
- });
-
- // Création du 7em bouton
- const 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 fond
- button7.addEventListener('click', function(event) {
- event.preventDefault(); // Empêche le rafraîchissement de la page
- const output = generateText('dépot1objetchateau');
- insertText(output);
- });
-
- // Création du 7em bouton bis
- const 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 fond
- button7b.addEventListener('click', function(event) {
- event.preventDefault(); // Empêche le rafraîchissement de la page
- const output = generateText('dépot1objetmanoir');
- insertText(output);
- });
-
- // Création du 8em bouton
- const button8 = document.createElement('button');
- button8.textContent = 'Ramasser plantes';
- button8.style.backgroundColor= '#e4ed97'; // Définir la couleur de fond
- button8.addEventListener('click', function(event) {
- event.preventDefault(); // Empêche le rafraîchissement de la page
- const output = generateText('ramasserplantes');
- insertText(output);
- });
-
- // Création du 9em bouton
- const button9 = document.createElement('button');
- button9.textContent = 'Ramasser CT';
- button9.style.backgroundColor= '#e4ed97'; // Définir la couleur de fond
- button9.addEventListener('click', function(event) {
- event.preventDefault(); // Empêche le rafraîchissement de la page
- const output = generateText('ramasserct');
- insertText(output);
- });
-
- // Création du bouton pour l'ordre follow
- const 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 page
- const distance = followDistanceSelect.value;
- const followOrderText = generateFollowOrder(distance);
- insertText(followOrderText);
- });
-
- // Création du 11em bouton
- const 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 page
- const output = generateText('attackmonster');
- insertText(output);
- });
-
- // Création du 12em bouton
- const 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 page
- const output = generateText('attackall');
- insertText(output);
- });
-
- // Création du 13em bouton
- const 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 page
- const output = generateText('equip');
- insertText(output);
- });
-
- // Création du 14em bouton
- const 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 page
- const output = generateText('unequip');
- insertText(output);
- });
-
- // Création du 15em bouton
- const 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 page
- const output = generateText('scout');
- insertText(output);
- });
-
- // Création du 16em bouton
- const 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 page
- const output = generateText('passtp');
- insertText(output);
- });
-
-
-
-
- function createDropdownMenu() {
- // Création du menu déroulant avec des options
- const 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éroulant
- dropdown.appendChild(option1);
- dropdown.appendChild(option2);
- // Style pour positionner le menu déroulant
- dropdown.style.position = 'absolute';
- dropdown.style.left = '150px'; // Changer la position en fonction de votre mise en page
- dropdown.style.top = '50px'; // Changer la position en fonction de votre mise en page
- // Ajout du menu déroulant au document
- document.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éroulant
- const 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éroulant
- const 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égorie
- const basicActionsContainer = document.createElement('div');
- const equipmentContainer = document.createElement('div');
- const warriorsContainer = document.createElement('div');
-
- // Ajout des boutons dans les conteneurs appropriés
- basicActionsContainer.appendChild(button0);
- basicActionsContainer.appendChild(button5); // Actions de base
- basicActionsContainer.appendChild(followButton);
- basicActionsContainer.appendChild(followDistanceSelect);
- basicActionsContainer.appendChild(button15);
- basicActionsContainer.appendChild(button16);
- equipmentContainer.appendChild(button1); // Équipement
- equipmentContainer.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); // Guerriers
- warriorsContainer.appendChild(button12);
- // Ajout du style pour masquer les catégories par défaut
- basicActionsContainer.style.display = 'none';
- equipmentContainer.style.display = 'none';
- warriorsContainer.style.display = 'none';
-
-
-
-
- // Gestionnaire d'événement pour masquer ou afficher une catégorie
- function 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énements
- function 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 page
- toggleCategory(container, this);
- });
- return toggleButton;
- }
-
- // Création des boutons pour masquer ou afficher les catégories
- const 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 boutons
- const specificElement = document.evaluate('/html/body/div[3]/div/table/tbody/tr[2]/td[2]/form/table', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
-
- if (specificElement) {
- // Création d'un conteneur principal pour tous les boutons et les catégories
- const 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écifique
- specificElement.parentNode.insertBefore(allButtonsContainer, specificElement);
- } else {
- console.log('Élément spécifique non trouvé');
- }
- // Sélectionner l'élément cible
- const targetElement = document.querySelector('div.titreMenu:nth-child(9)');
-
- if (targetElement) {
- // Créer un nouvel élément pour le texte
- const 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 cible
- targetElement.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 code
- const codeElement = document.querySelector('td > div > pre > code > span > span');
-
- if (codeElement) {
- // Récupération du texte de l'élément
- const 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és
- function calculerBonusMagiques() {
- // Sélection des balises contenant les informations des objets équipés
- const 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 informations
- elements.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 magiques
- const 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 bonus
- const enleverButton = document.querySelector('input[name="maction"][value="Enlever"]');
-
- // Création d'un élément pour afficher les bonus
- const bonusElement = document.createElement('div');
- // Ajout des styles pour la couleur et le centrage
- bonusElement.style.color = '#e530cf'; // Couleur e530cf
- bonusElement.style.fontWeight = 'bold' ; // gras
- bonusElement.style.marginTop = '20px'; // Ajout d'un espace sous l'élément
-
- // Fonction pour afficher un symbole '+' ou '-' en fonction de la valeur du bonus
- const afficherSymbole = (valeur) => (valeur > 0 ? '+' : valeur < 0 ? '-' : '');
-
- // Texte pour afficher les bonus
- let texteBonus = 'Total des BMM: ';
-
- // Liste des bonus individuels avec leur nom et valeur
- const 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 texte
- bonusIndividuels.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 texte
- if (bonus.valeur !== 0) {
- texteBonus += `${bonus.nom}${symbole}${valeurAbsolue} | `;
- }
- });
-
- // Supprimer le dernier symbole '|' s'il est présent à la fin
- texteBonus = texteBonus.replace(/\s*\|\s*$/, '');
-
- // Création d'un élément avec le texte des bonus
- const 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ée
- window.addEventListener('load', calculerBonusMagiques);
-
- }
-
-
- //==========================================================================================================================================================================================================================
- // Page Option - Description de Gobzilla quand on clique sur Goodies et Gobzilla
- //==========================================================================================================================================================================================================================
-
- // rename Goodies
- if ($(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 Gobzilla
- if ($(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 image
- var imageElement = document.createElement('img');
- imageElement.src = 'https://i.ibb.co/cgqGVCt/g-OBZILLAICON.png'; // Replace with the URL of your image
- imageElement.style.maxWidth = '60%'; // Ensure the image fits within the content
- developmentMessage.appendChild(imageElement);
-
- var welcomeTitle = document.createElement('div');
- welcomeTitle.style.fontSize = '24px'; // Larger font size
- welcomeTitle.style.fontWeight = 'bold'; // Bold style
- welcomeTitle.style.marginBottom = '10px'; // Add some space below
- welcomeTitle.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 goblins
- const 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 goblins
- 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 getGoblinInfoById(id) {
- const goblinData = localStorage.getItem(`goblinInfo_${id}`);
- console.log(`Data for ID ${id}:`, goblinData); // Vérification dans la console
-
- return goblinData;
- }
- // Fonction pour afficher les données dans une info bulle
- function 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 lignes
- const 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 guillemets
-
- const row = document.createElement('tr');
- rowData.forEach(cellData => {
- const cell = document.createElement(index === 0 ? 'th' : 'td'); // Utilisation de th pour la première ligne
- cell.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 bulles
- showGoblinInfoOnHover();
-
-
- // Création du bouton
- 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; // 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 bouton
- const 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 style
- const style = document.createElement('style');
- style.innerHTML = `
- .refresh-button {
- display: block;
- margin: 0 auto;
- text-align: center;
- }
- `;
-
- // Ajout du style au head de la page
- document.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 minutes
- const 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=XXX
- if ($(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'avoue
- function updateTableWithDLA(infosValue, goblinName) {
-
- }
-
- // Enregistrement du dernier temps de récupération de données
- 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 minutes
- const 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 bouton
-
- const 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 bouton
- const 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 ligne
- if (healthColumn) {
- healthColumn.style.whiteSpace = 'nowrap';
- }
-
-
- // Fonction pour récupérer les informations du local storage
- function getGoblinInfoById(id) {
- const goblinData = localStorage.getItem(`goblinInfo_${id}`);
- console.log(`Data for ID ${id}:`, goblinData); // Vérification dans la console
-
- return goblinData;
- }
-
- // Fonction pour afficher les infos bulles
- function 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 lignes
- const 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 guillemets
-
- const row = document.createElement('tr');
- rowData.forEach(cellData => {
- const cell = document.createElement(index === 0 ? 'th' : 'td'); // Utilisation de th pour la première ligne
- cell.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 bulles
- showGoblinInfoOnHover();
-
- }
-
- $(document).ready(function () {
- // Récupérer le message stocké dans localStorage
- const criStatus = localStorage.getItem("criStatus");
-
- // Si le message n'est pas trouvé dans le localStorage, utiliser un message par défaut
- const 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 localStorage
- if (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 message
- const 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 localStorage
- if ($(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 membre
- const 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 guerre
- if (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 cri
- let message;
- if (criActif) {
- message = "Vous êtes sous cri de Guerre";
- } else {
- message = "Attention, pas de cri actif actuellement";
- }
-
- // Enregistrer le message dans localStorage
- localStorage.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 console
- console.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 CdM
- function 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 CdM
- var 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 grouillots
- if (rang == "Maître" || rang == "Grand Maître") {
- var resultLinesArr = conteneur.text().split("\n");
- var cdm = {};
- cdm.gob = window.localStorage.getItem('gobId');
- cdm.rang = rang;
- $.each( resultLinesArr, function( key, value ) {
- lineArr = value.split(" : ");
- // Construction de la CdM en parsant la page
- switch (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 CdM
- var url = "https://gobzilla.incaworld.fr/cdm";
- var result = $("<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() {
- result.html("<br><b>**** CdM envoyée à GobZilla ****</b>");
- })
- .fail(function(err) {
- console.log(err);
- result.html("<br><b>**** Echec de l'envoi de la CdM à GobZilla ****</b>");
- })
- .always(function() {
- result.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 Gob
- var 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 CDM
- var 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 loader
- var 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 CdM
- var 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"];
-
-
-
- //insere un lien vers GobMaps
- (function() {
- 'use strict';
-
- // Fonction pour créer et insérer l'icône
- function insertIcon() {
- // Vérifier si l'icône existe déjà pour éviter les doublons
- if (document.getElementById("gobmaps-icon")) {
- console.log("Icône déjà insérée, arrêt.");
- return;
- }
-
- // Créer un conteneur pour l'icône
- const iconContainer = document.createElement("div");
- iconContainer.id = "gobmaps-icon";
- iconContainer.style.textAlign = "center";
- iconContainer.style.margin = "0 0";
- iconContainer.style.fontFamily = "Arial, sans-serif";
-
- // Créer le lien avec l'icône
- const link = document.createElement("a");
- link.href = "https://gobmaps.rf.gd/carte.html";
- link.title = "Aller sur GobMaps"; // Tooltip au survol
- link.target = "_blank";
-
- // Créer l'élément image
- const icon = document.createElement("img");
- icon.src = "https://i.ibb.co/tpnPvnYv/favicon.jpg";
- icon.alt = "GobMaps";
- icon.style.width = "32px"; // Ajustez la taille si nécessaire
- icon.style.height = "26px";
- icon.style.verticalAlign = "middle";
-
- link.appendChild(icon);
- iconContainer.appendChild(link);
-
- // Trouver le bouton "Envoyer des PX"
- const pxButton = document.querySelector('center input[type="BUTTON"][value="Envoyer des PX"]');
-
- if (pxButton && pxButton.parentNode) {
- console.log("Bouton 'Envoyer des PX' trouvé, insertion de l'icône après.");
- // Insérer après le bouton "Envoyer des PX"
- pxButton.parentNode.insertBefore(iconContainer, pxButton.nextSibling.nextSibling); // Passe après l'espace ( )
- } else {
- console.warn("Bouton 'Envoyer des PX' non trouvé.");
- // Fallback : insérer dans #content
- const contentDiv = document.getElementById("content");
- if (contentDiv) {
- console.log("Insertion de secours dans #content.");
- contentDiv.appendChild(iconContainer);
- } else {
- console.warn("Aucun conteneur de secours (#content) trouvé.");
- }
- }
- }
-
- // Essayer d'insérer l'icône au chargement initial
- document.addEventListener("DOMContentLoaded", () => {
- console.log("DOM chargé, tentative d'insertion de l'icône.");
- insertIcon();
- });
-
- // Observer les changements dans le DOM pour un chargement dynamique
- const observer = new MutationObserver((mutations, obs) => {
- console.log("Changement détecté dans le DOM, nouvelle tentative d'insertion.");
- insertIcon();
- // Arrêter l'observation si l'icône a été insérée
- if (document.getElementById("gobmaps-icon")) {
- obs.disconnect();
- console.log("Icône insérée, observation arrêtée.");
- }
- });
-
- observer.observe(document.body, { childList: true, subtree: true });
- console.log("Observation du DOM démarrée.");
- })();
-
-
-
- /// 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 lien
- var texte = $(this).parent().find('td:eq(2)').text();
- // Utilisez une expression régulière pour extraire le nombre entre parenthèses
- var nombre = texte.match(/\((\d+)\)/);
- // Vérifiez si le nombre extrait existe et est supérieur à 1000
- if (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 N
- if (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 suivants
- const tableauTresors = document.getElementById('TOBJETS');
-
- if (tableauTresors) {
- // Sélection des lignes du tableau
- const lignes = tableauTresors.getElementsByTagName('tr');
- const tresors = [];
-
- // Parcours de chaque ligne du tableau
- for (let i = 1; i < lignes.length; i++) {
- const colonnes = lignes[i].getElementsByTagName('td');
-
- // Extraction des données de chaque colonne
- const 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 objet
- const tresorObj = {
- distance,
- reference,
- nom,
- x,
- y,
- n
- };
-
- // Ajout de l'objet à la liste des trésors
- tresors.push(tresorObj);
- }
-
- // Stockage des trésors dans localStorage
- localStorage.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'infobulle
- header.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 haut
- if (a.cells[0].textContent.trim().match("^Dist.")) return -1;
-
- let result = aValue.localeCompare(bValue, undefined, { numeric: true });
-
- if (!ascending) {
- result *= -1;
- }
-
- return result;
- });
-
- 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'infobulle
- header.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 haut
- if (a.cells[0].textContent.trim().match("^Dist.")) return -1;
-
- let result = aValue.localeCompare(bValue, undefined, { numeric: true });
-
- if (!ascending) {
- result *= -1;
- }
-
- return result;
- });
-
- 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 haut
- if (a.cells[0].textContent.trim().match("^Dist.")) return -1;
-
- let result = aValue.localeCompare(bValue, undefined, { numeric: true });
-
- if (!ascending) {
- result *= -1;
- }
-
- return result;
- });
-
- 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 width
- if (displayFullWidth == 1) {
- $('#ckbDisplayFullWidth').prop( "checked", displayFullWidth );
- }
- showVueFullWidth();
-
- // Mini mobs
- if (displayMiniMobs == 1) {
- $('#ckbDisplayMiniMobs').prop( "checked", displayMiniMobs );
- }
- showHideMiniMobs();
-
- // showhide trees
- if (displayTrees == 1) {
- $('#ckbDisplayTrees').prop( "checked", displayTrees );
- }
- showHideTrees();
-
-
-
- // Liste des lieux étendue
- if (displayLieuxChecked == 1) {
- $('#ckbDisplayLieux').prop( "checked", displayLieuxChecked );
- }
- showHideExtendedLieux();
-
-
- //Liste des plantes étendue
- if (displayPlantesChecked == 1) {
- $('#ckbDisplayPlantes').prop( "checked", displayPlantesChecked );
- }
- showHideExtendedPlantes();
-
- // Vue 2D
- if (show2DChecked == 1) {
- $('#ckbDisplay2D').prop( "checked", show2DChecked );
- }
- showHideVue2d();
-
-
- // CdM manquantes
- if (displayCdmNeeded == 1) {
- $('#ckbDisplayCdmNeeded').prop( "checked", displayCdmNeeded );
- }
- showHideCdmNeeded();
-
- // A cuisiner
- if (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 2d
- var 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 herbo
- select.style.display = 'none';
-
- // Fonction pour contrôler la visibilité du niveau herbo
- function 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és
- if (!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éments
- showHideMiniMobs();
- }
-
- // Sauvegarder les valeurs dans le localStorage
- localStorage.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 filtrage
- filterButton.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 preFilter
- var toggleDiv = $("<div id=\"togglePreFilter\" style=\"cursor: pointer; font-size: 10px; color: black;\">▼ Ouvrir les Filtres</div>");
- // Ajoutez le div avant prediv
- toggleDiv.insertBefore(prediv);
- // Fonction pour mettre à jour l'état et le texte du div
- function updateToggleDiv() {
- if (isPreFilterVisible) {
- prediv.show(); // Afficher preFilter
- toggleDiv.html('▼ Masquer les filtres'); // Affiche la flèche vers le bas (▼)
- } else {
- prediv.hide(); // Masquer preFilter
- toggleDiv.html('► Ouvrir les filtres'); // Affiche la flèche de droite (→)
- }
- }
-
- // Définissez un gestionnaire d'événements pour le div
- toggleDiv.on('click', function() {
- isPreFilterVisible = !isPreFilterVisible; // Inverse l'état
- updateToggleDiv();
- // Sauvegarde l'état dans localStorage
- localStorage.setItem('isPreFilterVisible', isPreFilterVisible);
- });
-
- // Assurez-vous que preFilter est initialement visible
- updateToggleDiv();
-
-
-
- //=======================================================================
- // 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éroulante
- var lvlherbo = $('#lvlherbo');
-
- // Ajoutez un gestionnaire d'événements pour écouter les changements de la liste déroulante
- lvlherbo.on('change', function() {
- var xfactor = parseFloat(lvlherbo.val()); // Obtenez la valeur sélectionnée en tant que nombre
- var 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 existent
- var 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 herbomax
- herbomax = 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://gobzilla.incaworld.fr/plantes";
- $.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["espece"] + ")";
- 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 tableau
- function parseCSV(csvData) {
- // Convertir les données CSV en tableau
- const rows = csvData.split('\n').slice(1); // Ignorer la première ligne d'en-têtes
- const table = rows.map(row => row.split(','));
-
- // Créer le tableau HTML avec les en-têtes spécifiés
- const tableElement = document.createElement('table');
- const headerRow = document.createElement('tr');
-
- // En-têtes spécifiés
- const headers = ['Catégorie' , 'Dist.', 'Id', 'Nom', 'Niveau', 'Type' , 'Clan', 'X', 'Y', 'N', 'Z'];
-
- // Ajouter les en-têtes au tableau
- headers.forEach(headerText => {
- const th = document.createElement('th');
- th.textContent = headerText;
- headerRow.appendChild(th);
- });
-
- // Ajouter la ligne d'en-tête au tableau
- tableElement.appendChild(headerRow);
-
- // Ajouter les données CSV au tableau
- table.forEach(row => {
- const tr = document.createElement('tr');
- row.forEach(cell => {
- const td = document.createElement('td');
- // Nettoyer les guillemets autour des mots
- const cleanedCell = cell.replace(/"/g, '');
- td.textContent = cleanedCell;
- tr.appendChild(td);
- });
- tableElement.appendChild(tr);
- });
-
- // Trouver l'élément cible pour insérer le tableau
- const targetElement = document.evaluate(
- "/html/body/div[3]/div/table/tbody/tr[2]/td[2]/center[3]/table/tbody",
- document,
- null,
- XPathResult.FIRST_ORDERED_NODE_TYPE,
- null
- ).singleNodeValue;
-
-
- // Modifier le texte de l'élément cible
- if (targetElement) {
- targetElement.textContent = "Vue Death";
- targetElement.style.fontSize = '24px'; // Larger font size
- targetElement.style.fontWeight = 'bold'; // Bold style
- targetElement.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 cible
- if (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 à cocher
- function toggleFetchCSV() {
- const tableElement = document.querySelector('#TPLANTS');
-
- if ($('#ckbFetchCSV').is(":checked")) {
- fetchCSV(csvURL);
- // Afficher le tableau s'il existe
- if (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ération
- if (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 ID
- const ckbFetchCSV = document.getElementById('ckbFetchCSV');
-
- // Écouteur d'événement pour détecter le changement d'état de la case à cocher
- ckbFetchCSV.addEventListener('change', toggleFetchCSV);
-
- // Appeler toggleFetchCSV au chargement de la page pour initialiser le comportement
- toggleFetchCSV();
-
- // URL du CSV à récupérer
- const 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 goblin
- var nom = $('#identite').attr("nom");
- var num = $('#identite').attr("num");
-
- // Get the actual position and view size
- $('li').each(function(){
- // cache jquery var
- var 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 limits
- var xmin = _X - _PX,
- ymin = _Y - _PX,
- ymax = _Y + _PX,
- Dx = xmin * -1,
- Dy = ymin * -1;
-
- // Initialisation de tooltipOpen comme un objet
- var tooltipOpen = {};
-
- // Fonction pour attacher les gestionnaires d'événements des tooltips
- function attachTooltipEvents(st, key) {
- if (st[0]) {
- st[0].style.cursor = "pointer";
- var isClicked = false;
-
- // Gestion du clic
- st[0].onclick = function (e) {
- e.stopPropagation(); // Évite la propagation de l'événement aux parents
- if (tooltipOpen[key]) {
- closeTooltip(key);
- } else {
- openTooltip(key);
- isClicked = true;
- }
- };
-
- // Gestion du double-clic
- st[0].ondblclick = function (e) {
- e.stopPropagation();
- if (isClicked) {
- closeTooltip(key);
- isClicked = false;
- }
- };
-
- // Gestion du survol
- st[0].onmouseover = function () {
- if (!tooltipOpen[key] && !isClicked) {
- closeTooltips(); // Fermer toutes les tooltips ouvertes
- openTooltip(key);
- }
- };
-
- st[0].onmouseout = function (e) {
- var target = e.relatedTarget || e.toElement;
- if (!isClicked && (!target || target !== st[0])) {
- closeTooltip(key);
- }
- };
-
- // Gestion du clic droit
- st[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-papiers
- if (tooltipOpen[key]) {
- var tooltipContent = compute_text(key);
-
- // Méthode alternative pour copier le texte
- var 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 importante
- var 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 filtrage
- var mapping = getMapping(key, showBigMonsters); // Recalculer mapping après suppression
- if (mapping === "0000") { // Adaptez "0000" si nécessaire
- delete cells[key];
- }
- }
-
- if (mapping in images) { // Vérifier si l'image existe
- alllieux[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 grid
- R.drawGrid(offset, offset, nbCase*carre, nbCase*carre, nbCase, nbCase, "#000");
-
- // Draw legend for X-axis and Y-axis
- for( var i = 0 ; i < nbCase ; i++ ) {
- // X coordinates top/bottom
- R.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 coordinates
- R.text( 10, Math.round(offset+(i+.5)*carre), (ymax-i).toString() ).attr(txt);
- }
-
- // Add to the list the current Goblin
- x = _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;
-
- }
-
-
- //getmapping
- function getMapping(k, showBigMonsters) {
- var result = "";
- 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
- }
- }
- }
-
- result += (cptGob > 0) ? "1" : "0";
-
- // Priorité aux créatures mécaniques
- if ((cptMech > 0) && ($('input[name=ckbMonster]').is(':checked'))) {
- result += "7";
- } else if ((cptplants > 0) && ($('input[name=ckbplants]').is(':checked'))) {
- result += "3";
- } else if (showBigMonsters && $('input[name=ckbMonster]').is(':checked')) { // Simplifié pour gros monstres
- result += (cptRedMobs > 0) ? "2" : ((cptVioletMobs > 0) ? "6" : "0");
- } else if ((cptRedMobs > 0) && ($('input[name=ckbMonster]').is(':checked'))) {
- result += "2";
- } else if ((cptVioletMobs > 0) && ($('input[name=ckbMonster]').is(':checked'))) {
- result += "6";
- } else if ((cptorandedMobs > 0) && ($('input[name=ckbMonster]').is(':checked'))) {
- result += "4";
- } else if ((cptyellowedMobs > 0) && ($('input[name=ckbMonster]').is(':checked'))) {
- result += "5";
- } else if ((cptMob > 0) && ($('input[name=ckbMonster]').is(':checked'))) {
- result += "1";
- } else {
- result += "0";
- }
-
-
-
- result += (($('input[name=ckbObject]').is(':checked')) && (cptObj > 0)) ? "1" : "0";
- result += (($('input[name=ckbPlace]').is(':checked')) && (cptPlace > 0)) ? "1" : "0";
-
- return result;
- }
- //=======================================================================================
- // Compute the global text that must be display in the popup.
- //=======================================================================================
- function compute_text(k) {
- var result = "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 importante
- data += 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 ici
-
- if ($('input[name=ckbObject]').is(':checked')) {
- data += getString(cells[k][k2]["object"], true);
- }
-
- if (data != "") {
- result += " \nNiveau: " + k2 + "\n" + data;
- data = "";
- }
- } // Fin de la condition if (k2 in cells[k])
- }
- return result;
- }
-
- 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 result = "";
-
- 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 )
- {
- result += "\t" + tmp[k] + " x " + k + "\n";
- }
- }
- else
- {
- for( var i=0; i < data.length; i++ )
- {
- result += "\t" + data[i] + "\n";
- }
- }
- return result;
- }
-
-
-
- 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 transparent
- transparent_txt = R.text(10,10, text).attr({fill: "transparent",font: tailleTxt});
-
- //get text dimensions to obtain tooltip dimensions
- var txt_box = transparent_txt.getBBox();
-
-
- if (from=="topright") {
- // Move to bottom of the cell
- y += carre;
-
- // Compute position
- Xtext = x+5;
- Ytext = y+Math.floor(txt_box.height/2)+5;
-
- //draw text
- popup_txt = R.text(Xtext, Ytext, text).attr({fill: "black",font: tailleTxt,'text-anchor': 'start'});
-
- var bb = popup_txt.getBBox();
-
- // Compute path for tooltip box
- pathText = // '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 cell
- y += carre;
-
- // Compute position
- Xtext = x-(txt_box.width+5);
- Ytext = y+Math.floor(txt_box.height/2)+5;
-
- //draw text
- popup_txt = R.text(Xtext, Ytext, text).attr({fill: "black",font: tailleTxt,'text-anchor': 'start'});
-
- var bb = popup_txt.getBBox();
-
- // Compute path for tooltip box
- pathText = // '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 position
- Xtext = x-(txt_box.width+5);
- Ytext = y-Math.floor(txt_box.height/2)-6;
-
- //draw text
- popup_txt = R.text(Xtext, Ytext, text).attr({fill: "black",font: tailleTxt,'text-anchor': 'start'});
-
- var bb = popup_txt.getBBox();
-
- // Compute path for tooltip box
- pathText = // '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 position
- Xtext = x+5;
- Ytext = y-Math.floor(txt_box.height/2)-6;
-
- //draw text
- popup_txt = R.text(Xtext, Ytext, text).attr({fill: "black",font: tailleTxt,'text-anchor': 'start'});
-
- var bb = popup_txt.getBBox();
-
- // Compute path for tooltip box
- pathText = // '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 box
- popup = R.path( pathText ).attr( {fill: "yellow"} );
-
- //finally put the text in front
- popup_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 concentration
- if (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 PO
- function 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érience
- var gobExperience = $('th:contains("Expérience")').parent().closest('tr');
- var tdExp = $('td:first', gobExperience);
- var sExp = tdExp.html();
-
- // Récupération des informations à partir du texte
- var regexExp = /Niveau......: (\d+) \((\d+) PI \| Niveau (\d+) : (\d+)/;
- var matchExp = sExp.match(regexExp);
-
- if (matchExp) {
- var niveau = matchExp[1]; // Récupération du niveau
- var nbPIActuels = matchExp[2]; // Récupération du nombre de PI actuels
- var nextlevel = matchExp[3]; // Récupération du niveau suivant
- var nextPI = matchExp[4]; // Récupération du nombre de PI
- var nbTrain = Math.ceil((nextPI - nbPIActuels) / (2 * nextlevel)); // Calcul du nombre d'entraînements restants
- window.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 informations
- tdExp.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 PX
- var 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 page
- var 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écifique
- var dateCreationElement;
- elementsContainingText.forEach(function(element) {
- if (element.textContent.includes(searchText)) {
- dateCreationElement = element;
- }
- });
-
- // Sélection de l'élément contenant le texte
- var 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écifique
- var 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électeur
- var 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 PER
- var 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.PERM
- window.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 dla
- var 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 REG
- var 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 DEG
- var 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 ARM
- var 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 ATT
- var 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 ESQ
- var 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 dons
- skills.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 localStorage
- function 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éros
-
- const followersNames = localStorage.getItem('followersnames') || '';
- const namesArray = JSON.parse(followersNames); // Parse le tableau JSON des noms
-
- const 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, XPathResult.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 carats
-
- const 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 remplacements
- if (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 colonne
- var 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 colonne
- cells.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ône
- return `<span title="${tooltipText}">${replacementIcon}</span>`;
- });
- });
-
- cell.innerHTML = cellContent;
-
- // Ajout de la classe 'monster-column' pour empêcher le retour à la ligne
- cell.classList.add('monster-column');
-
- // Ajout des styles CSS directement ici
- cell.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égende
- var 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égende
- var 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égende
- var 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 couleur
- var 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égende
- legendContent.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égende
- legendContent.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égende
- legendContent.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égende
- legendContent.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égende
- legendContent.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égende
- legendContent.appendChild(highlightText6);
-
-
- // Création de l'élément pour l'espace
- var space = document.createElement('div');
- space.style.height = '10px'; // Vous pouvez ajuster la hauteur selon vos besoins
- // Ajout de l'espace à la légende
- legendContent.appendChild(space);
-
-
-
- // Bouton pour fermer la fenêtre modale
- var 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 page
- document.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 boutons
- var buttonContainer = document.createElement('div');
- buttonContainer.style.marginTop = '10px';
-
- // Ajout du bouton "Légende" à ce conteneur
- buttonContainer.appendChild(legendButton);
-
- // Insérer le conteneur des boutons sous l'élément de référence
- referenceElement.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'icones
- 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);
-
- // add the search/needle/query
- if (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();
- });
-
- };
-
-
-
-
-