// ==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/Equipement.php
// @include http://games.gobland.fr/fo_orders.php*
// @include http://games.gobland.fr/Follower.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?*
// @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 1.9.7.3
// @icon https://i.ibb.co/HB9XztJ/gobzilla.jpg
// ==/UserScript==
//==========================================================================================================================================================================================================================
// Page suivant - 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
//==========================================================================================================================================================================================================================
//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;"]:nth-child(2)');
// 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]; //ne sert a rien pour l'instant ^^
// 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
// Remplacer le contenu de l'élément avec les éléments <strong> colorés
element.innerHTML = '';
element.appendChild(posXElement);
element.appendChild(document.createTextNode(' | '));
element.appendChild(posYElement);
element.appendChild(document.createTextNode(' | '));
element.appendChild(posNElement);
}
}
});
})();
}
// 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();
// Mettre les éléments de la colonne 'Réf.' en gras
if (colonne === 'reference') {
cellule.style.fontWeight = 'bold';
cellule.style.cursor = 'pointer'; // Rendre le curseur cliquable
cellule.title = 'Cliquez pour ramasser'; // Texte au survol
}
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() {
// Récupération des données de trésors depuis localStorage
const tresorsData = localStorage.getItem('tresorsData');
if (tresorsData) {
const tresors = JSON.parse(tresorsData);
const selectedNumbers = []; // Tableau pour stocker les numéros sélectionnés
// Ajouter des événements de clic aux éléments de la colonne "Réf."
const references = document.querySelectorAll("table tbody tr td:nth-child(2)");
references.forEach((reference) => {
reference.style.cursor = 'pointer'; // Rendre le curseur cliquable
reference.addEventListener('click', function() {
const referenceText = this.textContent.trim(); // Texte de la cellule
const referenceValue = parseInt(referenceText); // Convertir le texte en nombre
if (!isNaN(referenceValue)) {
selectedNumbers.push(referenceValue); // Ajouter le numéro au tableau
const textarea = document.querySelector("textarea[name='sc']");
let output = '';
if (selectedNumbers.length === 1) {
output = `pick(OBJECT, ${selectedNumbers[0]});`;
} else {
const formattedNumbers = selectedNumbers.join(', ');
output = `foreach(objects() as o):if(in(id(o), array(${formattedNumbers}))):pick(OBJECT, id(o));endif;endforeach;`;
}
// Mettre à jour le contenu du textarea avec le format requis
textarea.value = output;
}
});
});
// Ajouter des événements de clic aux cellules contenant la position (X, Y, N)
const positions = document.querySelectorAll("table tbody tr td:nth-child(n+4)");
positions.forEach((positionCell) => {
positionCell.style.cursor = 'pointer'; // Rendre le curseur cliquable
positionCell.title = 'Cliquez pour se déplacer à cet endroit'; // Texte au survol
positionCell.addEventListener('click', function() {
let position = ''; // Variable pour stocker la position (X, Y, N)
const positionCells = this.parentElement.querySelectorAll("td:nth-child(n+4)");
positionCells.forEach((cell, index) => {
position += cell.textContent.trim();
if (index !== positionCells.length - 1) {
position += ', ';
}
});
const textarea = document.querySelector("textarea[name='sc']");
textarea.value = `move (${position});`;
});
});
} 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 '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 '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 '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;
// 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');
[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 premier bouton "Tout ramasser"
const button1 = document.createElement('button');
button1.textContent = 'Tout ramasser';
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.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.addEventListener('click', function(event) {
event.preventDefault(); // Empêche le rafraîchissement de la page
const output = generateText('toutdeposerauchateau');
insertText(output);
});
// Création du 4em bouton
const button4 = document.createElement('button');
button4.textContent = 'Tout ramasser (sauf corps)';
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.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.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.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
const button8 = document.createElement('button');
button8.textContent = 'Ramasser plantes';
button8.addEventListener('click', function(event) {
event.preventDefault(); // Empêche le rafraîchissement de la page
const output = generateText('ramasserplantes');
insertText(output);
});
// Création du 7em bouton
const button9 = document.createElement('button');
button9.textContent = 'Ramasser CT';
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.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);
});
// 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 div pour contenir les boutons
const buttonsContainer = document.createElement('div');
buttonsContainer.appendChild(button1);
buttonsContainer.appendChild(button4);
buttonsContainer.appendChild(button8);
buttonsContainer.appendChild(button9);
buttonsContainer.appendChild(document.createElement('br'));
buttonsContainer.appendChild(button2);
buttonsContainer.appendChild(button3);
buttonsContainer.appendChild(button6);
buttonsContainer.appendChild(button7);
buttonsContainer.appendChild(document.createElement('br'));
buttonsContainer.appendChild(followButton);
buttonsContainer.appendChild(followDistanceSelect);
buttonsContainer.appendChild(document.createElement('br'));
buttonsContainer.appendChild(button5);
// Insérer le conteneur des boutons avant l'élément spécifique
specificElement.parentNode.insertBefore(buttonsContainer, specificElement);
} else {
console.log('Élément spécifique 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: 'Arm', 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 ",
" - 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 Meute - Récupération du niveau pour calcul des PX
//==========================================================================================================================================================================================================================
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');
}
//==========================================================================================================================================================================================================================
// 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]);
// Compteur de DLA (expérimental)
// Fonction pour effectuer une requête HTTP GET
function httpGet(url) {
return new Promise((resolve, reject) => {
const xhr = new XMLHttpRequest();
xhr.open("GET", url, true);
xhr.onload = function() {
if (xhr.status === 200) {
resolve(xhr.responseText);
} else {
reject(new Error(`HTTP Error: ${xhr.status}`));
}
};
xhr.onerror = function() {
reject(new Error("Network Error"));
};
xhr.send();
});
}
// Fonction pour extraire la valeur "valeurPA" de la page "http://games.gobland.fr/ProfilPerso.php"
function extractValeurPA(pageText) {
var regex = /reste (\d+) PA/;
var match = regex.exec(pageText);
if (match) {
return parseInt(match[1]);
}
}
// Effectuer une requête HTTP pour obtenir le contenu de la page "http://games.gobland.fr/ProfilPerso.php"
httpGet("http://games.gobland.fr/ProfilPerso.php")
.then(function(responseText) {
// Extraire la valeur "valeurPA" de la page
var valeurPA = extractValeurPA(responseText);
localStorage.setItem('valeurPA', valeurPA);
(function() {
'use strict';
// Définissez votre regex pour trouver la date
var regex = /DLA: (\d{4})-(\d{2})-(\d{2}) (\d{2}:\d{2}:\d{2})/;
// Récupérez le texte de la page
var pageText = document.body.textContent;
// Recherchez la correspondance avec la regex
var match = regex.exec(pageText);
if (match) {
// Extraire les composants de la date
var annee = parseInt(match[1]);
var mois = parseInt(match[2]) - 1; // Les mois dans JavaScript sont indexés de 0 à 11
var jour = parseInt(match[3]);
var heures = parseInt(match[4].split(':')[0]);
var minutes = parseInt(match[4].split(':')[1]);
var secondes = parseInt(match[4].split(':')[2]);
// Créez un objet Date avec la date extraite
var dateEuropeenne = new Date(annee, mois, jour, heures, minutes, secondes);
// Obtenez la date actuelle
var maintenant = new Date();
// Comparez les deux dates
var containerElement = document.createElement('div');
var contenuAffiche = '';
if (maintenant > dateEuropeenne) {
// La date est dépassée
if (valeurPA !== 0) {
var tempsRestantMinutes = Math.floor((maintenant - dateEuropeenne) / (1000 * 60));
var decalSecondes = (secondes >= maintenant.getSeconds()) ? (secondes - maintenant.getSeconds()) : (60 + secondes - maintenant.getSeconds());
contenuAffiche = '<span style="color: red;">DLA dépassée<br> Décalez de ' + tempsRestantMinutes + ' minutes</span>';
} else {
contenuAffiche = '<p><span style="color: red;">DLA dépassée !</span></p>';
}
} else {
var tempsRestantMillisecondes = dateEuropeenne - maintenant;
var tempsRestantMinutes = Math.floor(tempsRestantMillisecondes / (1000 * 60));
contenuAffiche = '<span style="color: green;">Prochaine DLA dans<br>' + tempsRestantMinutes + ' minutes</span>';
}
containerElement.innerHTML = contenuAffiche;
var dlaElement = document.querySelector('.dla');
dlaElement.innerHTML += '<br>' + containerElement.outerHTML;
}
})();
})
.catch(function(error) {
console.error(error);
});
}
//==========================================================================================================================================================================================================================
// 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"];
const ArbresAMasquer = ["Arbre"];
const suivants =["Créature mécanique", "Squelette", "Pierreux" , "Esprit-rôdeur" , "Zombi"];
/// Coloration des gros mobs et indication px
$("#TCREATURES > center > table > tbody > tr").each( function(){
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 = infosMob[1];
}
// Sélection du tableau contenant les trésors
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");
}
}
});
// Coloration des gobs
$.each(raceGobs, function(index, value) {
$('#TCREATURES > center > table > tbody > tr > td:contains("' + value + '")').parent().css("background-color","#ccccff");
});
// Coloration des suivants
$.each(suivants, function(index, value) {
$('#TCREATURES > center > table > tbody > tr > td:contains("' + value + '")').parent().css("background-color","#ffadde");
});
// 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));
});
}
});
}
})();
(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('displayMiniMobsChecked');
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('displayMiniMobsChecked', 1);
// Suppression des mobs trop nombreux
$.each(monstreAMasquer, function(index, value) {
$('#TCREATURES > center > table > tbody > tr > td:contains("' + value + '")').parent().hide();
});
} else {
window.localStorage.setItem('displayMiniMobsChecked', 0);
$.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: ' Masquer Lémures,...', title: 'met en surbrillance les monstres les + efficaces pour la cuisine' }));
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>");
// 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();
// Ajout des champs pour la fourchette de niveaux et du bouton de filtrage dans prediv
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);
// Gestion du clic sur le bouton de filtrage
filterButton.on('click', function() {
var minLevel = parseInt($('#monsterLevelMin').val(), 10);
var maxLevel = parseInt($('#monsterLevelMax').val(), 10);
if (!isNaN(minLevel) && !isNaN(maxLevel) && minLevel <= maxLevel && maxLevel <= 100) {
$("#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();
}
}
});
}
});
prediv.append("</br>");
prediv.append("</br>");
prediv.append($("<input type=\"button\" id=\"btnRefresh\" name=\"btnRefresh\" value=\"Rafraîchir les listes\">"));
// 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\" >"));
//=======================================================================
/// 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://fzffz.000webhostapp.com/plantes.json";
$.ajaxSetup({
async: false
});
$.getJSON(url, function(data) {
// alert(JSON.stringify(data));
$.each(data, function(key, val) {
var dist = Math.max(
Math.abs(val["x"] - _X),
Math.abs(val["y"] - _Y),
Math.abs(val["z"] - _N)
);
if (refplantes.indexOf(val["ID"]) == -1 && val["ID"] !== -1) {
var bgColor =
dist >= herbomin && dist <= herbomax
? 'background-color: #93d278;'
: 'background-color: #E0E0E0;';
var row =
"<tr style='" +
bgColor +
"' class='extendedPlante'><td>" +
dist;
row += "</td><td>" + val["ID"];
row += "</td><td>" + val["nom"] + " (" + val["espèce"] + ")";
row += "</td><td>" + val["x"];
row += "</td><td>" + val["y"];
row += "</td><td>" + val["z"];
row += "</td></tr>";
$(row).insertAfter("#TPLANTS table tr:last");
}
});
});
$.ajaxSetup({
async: true
});
extendedPlantesBuilt = true;
}
//=======================================================================
// 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 = "10px 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;
//=============================================================
// Gestion des changements de filtre
//=============================================================
$("input.ckbFilter").change(function () {
showVueFullWidth();
showHideMiniMobs();
showHideTrees();
showHideVue2d();
showHideExtendedLieux();
showHideExtendedPlantes();
showHideCdmNeeded();
showHideCuisine();
for( var key in cells ) {
x = cells[key].x;
y = cells[key].y;
mapping = "i" + getMapping(key) + ".src";
alllieux[key].remove();
if (mapping != "i0000.src")
{
alllieux[key] = R.image(eval(mapping), x, y, carre-1, carre-1);
}
}
for (var key in alllieux) {
(function (st, key) {
if (st[0]) {
st[0].style.cursor = "pointer";
var tooltipOpen = false; // Variable pour suivre l'état de la tooltip
st[0].onclick = function () {
x = cells[key].x; // X Co-Ords
y = cells[key].y; // Y Co-Ords
// Compute tic position
tic = "";
tic += (y >= (Math.floor(nbCase / 2)) * carre) ? "bottom" : "top";
tic += (x > (Math.floor(nbCase / 2)) * carre) ? "left" : "right";
var s = compute_text(key);
if (tooltipOpen) {
// Si la tooltip est déjà ouverte, fermez-la
draw_tooltip(this, 0);
tooltipOpen = false;
} else {
if (s != "") {
// Si la tooltip n'est pas encore ouverte, ouvrez-la
draw_tooltip(this, 1, s, x, y, carre, tic);
tooltipOpen = true;
}
}
};
st[0].onmouseover = function () {
x = cells[key].x; // X Co-Ords
y = cells[key].y; // Y Co-Ords
// Compute tic position
tic = "";
tic += (y >= (Math.floor(nbCase / 2)) * carre) ? "bottom" : "top";
tic += (x > (Math.floor(nbCase / 2)) * carre) ? "left" : "right";
var s = compute_text(key);
// Show the tooltip by setting `show` to 1
draw_tooltip(this, 1, s, x, y, carre, tic);
};
st[0].onmouseout = function () {
draw_tooltip(this, 0);
};
}
})(alllieux[key], key);
}
});
// Images
//ancienne adresse $("<img src=\"http://images.gobland.fr/addons/GGVue2D/0001.jpg\" id=\"i0001\" style=\"display:none;\" />").insertBefore(div);
$("<img src=\"https://fzffz.000webhostapp.com/images/0001.png\" id=\"i0001\" style=\"display:none;\" />").insertBefore(div);
$("<img src=\"https://fzffz.000webhostapp.com/images/0010.png\" id=\"i0010\" style=\"display:none;\" />").insertBefore(div);
$("<img src=\"https://fzffz.000webhostapp.com/images/0011.png\" id=\"i0011\" style=\"display:none;\" />").insertBefore(div);
$("<img src=\"https://fzffz.000webhostapp.com/images/0100.png\" id=\"i0100\" style=\"display:none;\" />").insertBefore(div);
$("<img src=\"https://fzffz.000webhostapp.com/images/0101.png\" id=\"i0101\" style=\"display:none;\" />").insertBefore(div);
$("<img src=\"https://fzffz.000webhostapp.com/images/0110.png\" id=\"i0110\" style=\"display:none;\" />").insertBefore(div);
$("<img src=\"https://fzffz.000webhostapp.com/images/0111.png\" id=\"i0111\" style=\"display:none;\" />").insertBefore(div);
$("<img src=\"https://fzffz.000webhostapp.com/images/1000.png\" id=\"i1000\" style=\"display:none;\" />").insertBefore(div);
$("<img src=\"https://fzffz.000webhostapp.com/images/1001.png\" id=\"i1001\" style=\"display:none;\" />").insertBefore(div);
$("<img src=\"https://fzffz.000webhostapp.com/images/1010.png\" id=\"i1010\" style=\"display:none;\" />").insertBefore(div);
$("<img src=\"https://fzffz.000webhostapp.com/images/1011.png\" id=\"i1011\" style=\"display:none;\" />").insertBefore(div);
$("<img src=\"https://fzffz.000webhostapp.com/images/1100.png\" id=\"i1100\" style=\"display:none;\" />").insertBefore(div);
$("<img src=\"https://fzffz.000webhostapp.com/images/1101.png\" id=\"i1101\" style=\"display:none;\" />").insertBefore(div);
$("<img src=\"https://fzffz.000webhostapp.com/images/1110.png\" id=\"i1110\" style=\"display:none;\" />").insertBefore(div);
$("<img src=\"https://fzffz.000webhostapp.com/images/1111.png\" id=\"i1111\" style=\"display:none;\" />").insertBefore(div);
$("<img src=\"https://fzffz.000webhostapp.com/images/1113.png\" id=\"i1113\" style=\"display:none;\" />").insertBefore(div);
$("<img src=\"https://fzffz.000webhostapp.com/images/1111.png\" id=\"i1130\" style=\"display:none;\" />").insertBefore(div);
$("<img src=\"https://gobzilla.incaworld.fr/1200.png\" id=\"i1200\" style=\"display:none;\" />").insertBefore(div);
$("<img src=\"https://gobzilla.incaworld.fr/1201.png\" id=\"i1201\" style=\"display:none;\" />").insertBefore(div);
$("<img src=\"https://gobzilla.incaworld.fr/1210.png\" id=\"i1210\" style=\"display:none;\" />").insertBefore(div);
$("<img src=\"https://gobzilla.incaworld.fr/1211.png\" id=\"i1211\" style=\"display:none;\" />").insertBefore(div);
$("<img src=\"https://gobzilla.incaworld.fr/0200.png\" id=\"i0200\" style=\"display:none;\" />").insertBefore(div);
$("<img src=\"https://gobzilla.incaworld.fr/0201.png\" id=\"i0201\" style=\"display:none;\" />").insertBefore(div);
$("<img src=\"https://gobzilla.incaworld.fr/0210.png\" id=\"i0210\" style=\"display:none;\" />").insertBefore(div);
$("<img src=\"https://gobzilla.incaworld.fr/0211.png\" id=\"i0211\" style=\"display:none;\" />").insertBefore(div);
$("<img src=\"https://fzffz.000webhostapp.com/images/1300.png\" id=\"i1300\" style=\"display:none;\" />").insertBefore(div);
$("<img src=\"https://fzffz.000webhostapp.com/images/1301.png\" id=\"i1301\" style=\"display:none;\" />").insertBefore(div);
$("<img src=\"https://fzffz.000webhostapp.com/images/1310.png\" id=\"i1310\" style=\"display:none;\" />").insertBefore(div);
$("<img src=\"https://fzffz.000webhostapp.com/images/1311.png\" id=\"i1311\" style=\"display:none;\" />").insertBefore(div);
$("<img src=\"https://fzffz.000webhostapp.com/images/0300.png\" id=\"i0300\" style=\"display:none;\" />").insertBefore(div);
$("<img src=\"https://fzffz.000webhostapp.com/images/0301.png\" id=\"i0301\" style=\"display:none;\" />").insertBefore(div);
$("<img src=\"https://fzffz.000webhostapp.com/images/0310.png\" id=\"i0310\" style=\"display:none;\" />").insertBefore(div);
$("<img src=\"https://fzffz.000webhostapp.com/images/0311.png\" id=\"i0311\" style=\"display:none;\" />").insertBefore(div);
$("<img src=\"https://fzffz.000webhostapp.com/images/0400.png\" id=\"i0400\" style=\"display:none;\" />").insertBefore(div);
$("<img src=\"https://fzffz.000webhostapp.com/images/0401.png\" id=\"i0401\" style=\"display:none;\" />").insertBefore(div);
$("<img src=\"https://fzffz.000webhostapp.com/images/0410.png\" id=\"i0410\" style=\"display:none;\" />").insertBefore(div);
$("<img src=\"https://fzffz.000webhostapp.com/images/0411.png\" id=\"i0411\" style=\"display:none;\" />").insertBefore(div);
$("<img src=\"https://fzffz.000webhostapp.com/images/1410.png\" id=\"i1410\" style=\"display:none;\" />").insertBefore(div);
$("<img src=\"https://fzffz.000webhostapp.com/images/1411.png\" id=\"i1411\" style=\"display:none;\" />").insertBefore(div);
$("<img src=\"https://fzffz.000webhostapp.com/images/1401.png\" id=\"i1401\" style=\"display:none;\" />").insertBefore(div);
$("<img src=\"https://fzffz.000webhostapp.com/images/1400.png\" id=\"i1400\" style=\"display:none;\" />").insertBefore(div);
$("<img src=\"https://fzffz.000webhostapp.com/images/1410.png\" id=\"i1410\" style=\"display:none;\" />").insertBefore(div);
$("<img src=\"https://fzffz.000webhostapp.com/images/0500.png\" id=\"i0500\" style=\"display:none;\" />").insertBefore(div);
$("<img src=\"https://fzffz.000webhostapp.com/images/0501.png\" id=\"i0501\" style=\"display:none;\" />").insertBefore(div);
$("<img src=\"https://fzffz.000webhostapp.com/images/0510.png\" id=\"i0510\" style=\"display:none;\" />").insertBefore(div);
$("<img src=\"https://fzffz.000webhostapp.com/images/0511.png\" id=\"i0511\" style=\"display:none;\" />").insertBefore(div);
$("<img src=\"https://fzffz.000webhostapp.com/images/1500.png\" id=\"i1500\" style=\"display:none;\" />").insertBefore(div);
$("<img src=\"https://fzffz.000webhostapp.com/images/1501.png\" id=\"i1501\" style=\"display:none;\" />").insertBefore(div);
$("<img src=\"https://fzffz.000webhostapp.com/images/1510.png\" id=\"i1510\" style=\"display:none;\" />").insertBefore(div);
$("<img src=\"https://fzffz.000webhostapp.com/images/1511.png\" id=\"i1511\" style=\"display:none;\" />").insertBefore(div);
$("<img src=\"https://fzffz.000webhostapp.com/images/0600.png\" id=\"i0600\" style=\"display:none;\" />").insertBefore(div);
$("<img src=\"https://fzffz.000webhostapp.com/images/0601.png\" id=\"i0601\" style=\"display:none;\" />").insertBefore(div);
$("<img src=\"https://fzffz.000webhostapp.com/images/0610.png\" id=\"i0610\" style=\"display:none;\" />").insertBefore(div);
$("<img src=\"https://fzffz.000webhostapp.com/images/0611.png\" id=\"i0611\" style=\"display:none;\" />").insertBefore(div);
$("<img src=\"https://fzffz.000webhostapp.com/images/1600.png\" id=\"i1600\" style=\"display:none;\" />").insertBefore(div);
$("<img src=\"https://fzffz.000webhostapp.com/images/1601.png\" id=\"i1601\" style=\"display:none;\" />").insertBefore(div);
$("<img src=\"https://fzffz.000webhostapp.com/images/1610.png\" id=\"i1610\" style=\"display:none;\" />").insertBefore(div);
$("<img src=\"https://fzffz.000webhostapp.com/images/1611.png\" id=\"i1611\" style=\"display:none;\" />").insertBefore(div);
//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});
};
///Gob Monstres trésors lieux
var i0001 = document.getElementById("i0001");
var i0010 = document.getElementById("i0010");
var i0011 = document.getElementById("i0011");
var i0100 = document.getElementById("i0100");
var i0101 = document.getElementById("i0101");
var i0110 = document.getElementById("i0110");
var i0111 = document.getElementById("i0111");
var i1000 = document.getElementById("i1000");
var i1001 = document.getElementById("i1001");
var i1010 = document.getElementById("i1010");
var i1011 = document.getElementById("i1011");
var i1100 = document.getElementById("i1100");
var i1101 = document.getElementById("i1101");
var i1101 = document.getElementById("i1110");
var i1111 = document.getElementById("i1111");
///Gob Monstres rouges trésors lieux
var i0200 = document.getElementById("i0200");
var i0201 = document.getElementById("i0201");
var i0210 = document.getElementById("i0210");
var i0211 = document.getElementById("i0211");
var i1200 = document.getElementById("i1200");
var i1201 = document.getElementById("i1201");
var i1210 = document.getElementById("i1210");
var i1211 = document.getElementById("i1211");
///plantes
var i1300 = document.getElementById("i1300");
var i1301 = document.getElementById("i1301");
var i1311 = document.getElementById("i1311");
var i1310 = document.getElementById("i1310");
var i0311 = document.getElementById("i0311");
var i0301 = document.getElementById("i0301");
var i0300 = document.getElementById("i0300");
var i0310 = document.getElementById("i0310");
///monstres orange
var i0400 = document.getElementById("i0400");
var i0401 = document.getElementById("i0401");
var i0410 = document.getElementById("i0410");
var i0411 = document.getElementById("i0411");
var i1400 = document.getElementById("i1400");
var i1410 = document.getElementById("i1410");
var i1401 = document.getElementById("i1401");
var i1411 = document.getElementById("14111");
//monstres orange clair
var i0500 = document.getElementById("i0500");
var i0501 = document.getElementById("i0501");
var i0510 = document.getElementById("i0510");
var i0511 = document.getElementById("i0511");
var i1500 = document.getElementById("i1500");
var i1501 = document.getElementById("i1501");
var i1510 = document.getElementById("i1510");
var i1511 = document.getElementById("i1511");
var i0600 = document.getElementById("i0600");
var i0601 = document.getElementById("i0601");
var i0610 = document.getElementById("i0610");
var i0611 = document.getElementById("i0611");
var i1600 = document.getElementById("i1600");
var i1601 = document.getElementById("i1601");
var i1610 = document.getElementById("i1610");
var i1611 = document.getElementById("i1611");
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":[] };
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;
// Get level
var lvl = lines[8];
if (!(key in cells)) {
// Add the new cell
cells[key] = { "x": x, "y": y, "realx": lines[6], "realy": lines[7] };
cells[key][lvl] = { "gob": [], "monster": [], "violetMonster": [], "redMonster": [], "orangeMonster": [], "yellowMonster": [], "place": [], "object": [], "plant": [] };
}
if (!(lvl in cells[key])) {
// Add a new level for this cell
cells[key][lvl] = { "gob": [], "monster": [], "violetMonster": [], "redMonster": [], "orangeMonster": [], "yellowMonster": [], "place": [], "object": [], "plant": [] };
}
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[3] >= 50) {
cells[key][lvl]["violetMonster"].push(lines[2] + ' - ' + lines[3]);
} else if (lines[3] >= 40) {
cells[key][lvl]["redMonster"].push(lines[2] + ' - ' + lines[3]);
} else if (lines[3] >= 30) {
cells[key][lvl]["orangeMonster"].push(lines[2] + ' - ' + lines[3]);
} else if (lines[3] >= 25) {
cells[key][lvl]["yellowMonster"].push(lines[2] + ' - ' + lines[3]);
} else {
cells[key][lvl]["monster"].push(lines[2] + ' - ' + lines[3]);
}
}
});
// Get all 'lieux' to display
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;
// Get level
var lvl = lines[6];
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":[] };
}
if (!(lvl in cells[key]))
{
cells[key][lvl] = { "gob":[], "monster":[], "violetMonster": [], "redMonster":[], "place":[], "orangeMonster":[], "yellowMonster":[], "object":[], "plant":[] };
}
cells[key][lvl]["place"].push(lines[2]);
}
});
// Get all 'tresor' to display
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;
// Get level
var lvl = lines[5];
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":[] };
}
if (!(lvl in cells[key]))
{
cells[key][lvl] = { "gob":[], "monster":[], "violetMonster": [], "redMonster":[], "orangeMonster":[], "yellowMonster":[], "place":[], "object":[], "plant":[] };
}
cells[key][lvl]["object"].push(lines[2]);
}
});
// Get all 'plantes' to display
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;
// Get level
var lvl = lines[5];
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":[] };
}
if (!(lvl in cells[key]))
{
cells[key][lvl] = { "gob":[], "monster":[], "violetMonster": [], "redMonster":[], "orangeMonster":[], "yellowMonster":[], "place":[], "object":[], "plant":[] };
}
cells[key][lvl]["plant"].push(lines[2]);
}
});
alllieux = {};
for( var key in cells ) {
x = cells[key].x;
y = cells[key].y;
mapping = "i" + getMapping(key) + ".src";
alllieux[key] = R.image(eval(mapping), x, y, carre-1, carre-1);
}
for (var key in alllieux) {
(function (st, key) {
if (st[0]) {
st[0].style.cursor = "pointer";
var tooltipOpen = false; // Variable to track the state of the tooltip
st[0].onclick = function () {
x = cells[key].x; // X Co-Ords
y = cells[key].y; // Y Co-Ords
// Compute tic position
tic = "";
tic += (y >= (Math.floor(nbCase / 2)) * carre) ? "bottom" : "top";
tic += (x > (Math.floor(nbCase / 2)) * carre) ? "left" : "right";
var s = compute_text(key);
if (tooltipOpen) {
// If the tooltip is already open, close it with a double-click
draw_tooltip(this, 0);
tooltipOpen = false;
} else {
if (s != "") {
// If the tooltip is not open, open it with a single-click
draw_tooltip(this, 1, s, x, y, carre, tic);
tooltipOpen = true;
}
}
};
st[0].onmouseover = function () {
x = cells[key].x; // X Co-Ords
y = cells[key].y; // Y Co-Ords
// Compute tic position
tic = "";
tic += (y >= (Math.floor(nbCase / 2)) * carre) ? "bottom" : "top";
tic += (x > (Math.floor(nbCase / 2)) * carre) ? "left" : "right";
var s = compute_text(key);
// Show the tooltip by setting `show` to 1
draw_tooltip(this, 1, s, x, y, carre, tic);
};
st[0].ondblclick = function () {
// Double-click event to close the tooltip
draw_tooltip(this, 0);
tooltipOpen = false;
};
st[0].onmouseout = function () {
draw_tooltip(this, 0);
};
}
})(alllieux[key], key);
}
vue2DBuilt = true;
}
function getMapping(k) {
var result = "";
var cptGob = 0, cptMob = 0, cptPlace = 0, cptObj = 0, cptVioletMobs = 0, cptRedMobs = 0, cptorandedMobs = 0, cptyellowedMobs = 0 , cptplants = 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;
}
} 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;
}
}
}
result += (cptGob > 0)? "1" : "0" ;
if ((cptplants > 0) && ($('input[name=ckbplants]').is(':checked'))) {
result += "3";
} 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 += ((cptMob > 0) && ($('input[name=ckbMonster]').is(':checked')))? "1" : "0";
result += ((cptObj > 0) && ($('input[name=ckbObject]').is(':checked')))? "1" : "0";
result += ((cptPlace > 0) && ($('input[name=ckbPlace]').is(':checked')))? "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( i = 0; i<n.length; i++ ) {
k2 = n[i];
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"]);
if ($('input[name=ckbObject]').is(':checked'))
{
data += getString(cells[k][k2]["object"],true);
}
if (data != "")
{
result += " \nNiveau: " + k2 + "\n" + data;
data = "";
}
}
return result;
}
//=======================================================================================
// 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;
}
var tooltipOpen = false;
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.PV/30) ) + 'D3' + ' (' + Math.floor((skills.PV/30) )*2 + ')' + "\n" +
'Compagnon ' + Math.floor((skills.PV/25) ) + 'D3' + ' (' + Math.floor((skills.PV/25) )*2 + ')' + "\n" +
'Maître ' + Math.floor((skills.PV/20) ) + 'D3' + ' (' + Math.floor((skills.PV/20) )*2 + ')' + "\n" +
'Grand Maître ' + Math.floor((skills.PV/15) )+ 'D3' + ' (' + Math.floor((skills.PV/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() {
// calcul du nombre d'entrainements pour passer au lvl sup
var gobExperience = $('th:contains("Expérience")').parent().closest('tr');
var tdExp = $('td:first', gobExperience);
var sExp = tdExp.html();
res = sExp.match(/: (\d+) \((\d+) PI \| Niveau (\d+) : (\d+)/);
var nbTrain = Math.ceil((res[4].valueOf() - res[2].valueOf())/( 2 * res[1].valueOf()));
var pExp = sExp.indexOf(")");
var sTrain = (nbTrain > 1) ? " entraînements" : " entraînement";
tdExp.html(sExp.substr(0, pExp + 1 ) + " ---> Il te reste " + nbTrain + sTrain + sExp.substr(pExp + 1));
};
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
};
}
/// 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|http:\/\/(.*\.)?gobland\.fr\/ProfilPerso\.php/i)) {
const words = {
// Clan et CM
'((50125|346|330|286|388|386|387|407|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))' : '🥰',
// méchants
'((50|104|151691|270|267))' : '🔴',
// 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 👁️ ',
'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 🙈',
'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 🙈 ',
'Rakshah ' : 'Rakshah 👁️👁️ ',
'Rat-garou ' : 'Rat-garou 🙈 ',
'Rat Géant ' : 'Rat Géant 🙈 ',
'Rocketeux ' : 'Rocketeux 🙈 ',
'Sagouin ' : 'Sagouin 🙈 ',
'Scarabée Géant ' : 'Scarabée Géant 🙈 💉 ',
'Scorpion Géant ' : 'Scorpion 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 ' : 'Vampire 👁️👁️ 😵 ',
'Vampire Archaïque ' : 'Vampire Archaïque 👁️👁️ 😵 ',
'Viverne ' : 'Viverne 🙈 💉💉 ',
'Worg ' : 'Worg 🙈 ',
'Yéti ' : 'Yéti 🙈 ',
'Zombi ' : 'Zombi 👁️ ',
// 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 ⏰',
'Suivants' : 'Suivants 🦙',
'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();
});
};