MH - H2P - Bricol' Trolls

Eléments supplémentaires pour le Système Tactique des Bricol' Trolls

// ==UserScript==
// @name           MH - H2P - Bricol' Trolls
// @namespace      bricoltrolls
// @description    Eléments supplémentaires pour le Système Tactique des Bricol' Trolls
// @include        http*://trolls.ratibus.net/*
// @include        https://it.mh.raistlin.fr/*
// @icon           https://xballiet.github.io/ImagesMH/BricolTrolls.png
// @version        2.5
// @author         43406 - H2P
// ==/UserScript==

// Variables globales
var checkDate;
var indexHref;
var indexProfil;
var nodesHref;
var nodesProfil;
var timeout;
var now = new Date();
var one_day = 1000 * 60 * 60 * 24;
var one_month = 31 * one_day;

// Récupération de la date de la veille
yesterday = new Date(now.getTime() - one_day);
yyyy = yesterday.getFullYear();
mm = yesterday.getMonth() + 1;
if (mm < 10) {
	mm = '0' + mm;
}
dd = yesterday.getDate();
if (dd < 10) {
	dd = '0' + dd;
}
hh = yesterday.getHours();
if (hh < 10) {
	hh = '0' + hh;
}
mi = yesterday.getMinutes();
if (mi < 10) {
	mi = '0' + mi;
}
ss = yesterday.getSeconds();
if (ss < 10) {
	ss = '0' + ss;
}
var yesterdayString = '' + yyyy + mm + dd + hh + mi + ss;

// Récupération de la date d'il y a un mois
yestermonth = new Date(now.getTime() - one_month);
yyyy = yestermonth.getFullYear();
mm = yestermonth.getMonth() + 1;
if (mm < 10) {
	mm = '0' + mm;
}
dd = yestermonth.getDate();
if (dd < 10) {
	dd = '0' + dd;
}
hh = yestermonth.getHours();
if (hh < 10) {
	hh = '0' + hh;
}
mi = yestermonth.getMinutes();
if (mi < 10) {
	mi = '0' + mi;
}
ss = yestermonth.getSeconds();
if (ss < 10) {
	ss = '0' + ss;
}
var yestermonthString = '' + yyyy + mm + dd + hh + mi + ss;

// Fonction d'appel récursif aux liens de mises à jour
function nextNodeHref() {
	if (checkDate) {
		// Récupération de la date de dernière mise à jour
		node = document.evaluate("../../td[@class='date']", nodesHref.snapshotItem(indexHref), null, XPathResult.STRING_TYPE, null).stringValue;
		dateMAJ = node.substring(node.indexOf('MAJ : ') + 6);
		yyyy = dateMAJ.substring(6, 10);
		mm = dateMAJ.substring(3, 5);
		dd = dateMAJ.substring(0, 2);
		hh = dateMAJ.substring(11, 13);
		mi = dateMAJ.substring(14, 16);
		ss = dateMAJ.substring(17);
		dateMAJString = yyyy + mm + dd + hh + mi + ss;

		// On ne met à jour que si on a une date de dernière mise à jour et qu'elle est entre hier et il y a un mois
		majOK = (dateMAJString == '' || (yestermonthString < dateMAJString && dateMAJString < yesterdayString));
		//alert("hiddenFrame.src = _" + nodesHref.snapshotItem(indexHref).href + "_\r\nyestermonth = " + yestermonthString + ", dateMAJ = " + dateMAJString + " et yesterday = " + yesterdayString + " => majOK = " + majOK);
	} else {
		majOK = true;
	}
	if (majOK) {
		hiddenFrame.src = nodesHref.snapshotItem(indexHref).href;
	}

	// On passe au lien de mise à jour suivant s'il y en a un, sinon on rafraîchit la page
	indexHref++;
	if (indexHref < nodesHref.snapshotLength) {
		if (majOK) {
			setTimeout(nextNodeHref, timeout);
		} else {
			nextNodeHref();
		}
	} else {
		setTimeout("location.href = '" + location.href + "'", 1000);
		alert("Mise à jour terminée.");
	}
}

// Fonction d'appel récursif aux liens de profils (pas implémenté pour le moment)
function nextNodeProfil() {
	hiddenFrameProfils.src = nodesProfil.snapshotItem(indexProfil).href;
	//alert(document.getElementById('iFrameProfils').src);
	alert(document.getElementById('iFrameProfils').getElementsByTagName('btnUpdateProfil'));

	//alert("hiddenFrameProfils.src = _" + nodesProfil.snapshotItem(indexProfil).href + "_");

	// On passe au lien de mise à jour suivant s'il y en a un, sinon on rafraîchit la page
	indexProfil++;
	if (indexProfil < nodesProfil.snapshotLength) {
		setTimeout(nextNodeProfil, timeout);
	} else {
		setTimeout("location.href = '" + location.href + "'", 1000);
	}
}

// Fonction générique de mise à jour
function updateAll(href, notHref, tempo, doubleHidden) {
	// Récupération de tous les liens dont le href contient <href> et ne contient pas <notHref>
	nodes = document.evaluate("//a[contains(@href, '" + href + "')][not(contains(@href, '" + notHref + "'))]", document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);

	// Appels récursifs dans la frame cachée des liens récupérés
	timeout = tempo;
	if (doubleHidden) {
		indexProfil = 0;
		nodesProfil = nodes;
		nextNodeProfil();
	} else {
		indexHref = 0;
		nodesHref = nodes;
		nextNodeHref();
	}
}

// Fonction de mise à jour de tous les trolls depuis la page d'accueil
function updateAllTrolls() {
	checkDate = true;
	updateAll('update_info.php?id=', 'XBT', 3000);
}

// Fonction de mise à jour de tous les trolls depuis la page d'accueil sans vérification de la date de dernière mise à jour
function updateAllTrollsWithoutDateTest() {
	if (confirm("Voulez-vous vraiment tout mettre à jour ?\r\n(attention à la limite d'appel des scripts publics)")) {
		checkDate = false;
		updateAll('update_info.php?id=', 'XBT', 3000);
	}
}

// Fonction de mise à jour de tous les profils depuis la page d'accueil (pas implémenté pour le moment)
function updateAllProfils() {
	checkDate = true;
	updateAll('profil.php?id=', 'XBT', 10000, true);
}

// Fonction de mise à jour de tous les trolls et leurs profils depuis la page d'accueil (pas implémenté pour le moment)
function updateAllTrollsAndProfils() {
	checkDate = true;
	alert("MàJ de tout");
}

// Fonction de mise à jour générique
function updateAllBroll() {
	checkDate = true;
	updateAll('update_', 'id_mouche', 3000);
}

// Fonction d'ajout d'un élément (bouton, frame cachée...)
function makeElement(type, appendto, attributes, checked, chkdefault) {
	var element = document.createElement(type);
	if (attributes != null) {
		for (var i in attributes) {
			element.setAttribute(i, attributes[i]);
		}
	}
	if (checked != null) {
		if (GM_getValue(checked, chkdefault) == 'checked') {
			element.setAttribute('checked', 'checked');
		}
	}
	if (appendto) {
		appendto.appendChild(element);
	}
	return element;
}

// Pour le lien vers la page des compétences et sortilèges, on enlève les compétences/sortilèges que personne n'a
document.evaluate("//a[@href='competences-sortileges.php']", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.href = "competences-sortileges.php?cleanEmpty=1";

// Suppression des publicités de bas de page
document.getElementById("footer").outerHTML = "";

// Suppression des cadres News (et Diplomatie) et réduction du cadre Mémo
if (document.getElementById("news") != null) {
	document.getElementById("news").outerHTML = "";
}
/*if (document.getElementById("diplomatie") != null) {
	document.getElementById("diplomatie").outerHTML = "";
}*/
if (document.getElementById("memoContent") != null) {
	document.getElementById("memoContent").style = "display: none;";
}

// Frame cachée pour les mises à jour des profils depuis la page générale
var hiddenFrameProfils = makeElement('iframe', document.body, {'style':'position: absolute; top: 50%; left: 1px; width: 100%; height: 25%; border: 2px solid red; display: none;', 'name':'iFrameProfils', 'id':'iFrameProfils'});

// Frame cachée pour les mises à jour
var hiddenFrame = makeElement('iframe', document.body, {'style':'position: absolute; top: 75%; left: 1px; width: 100%; height: 25%; border: 2px solid red; display: none;', 'name':'iFrameHref', 'id':'iFrameHref'});

// Traitements pour la page d'accueil
if (location.href.indexOf('index.php') != -1) {
	// Récupération de tous les liens des vues
	var hrefVues = document.evaluate("//a[contains(@href, 'vue.php?vue=15&id=')]", document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);

	// Parcours des liens des vues et remplacements avec des vues plus adéquates (vue max, pas de gowaps, pas de composants, pas de GG)
	for (var index = 0 ; index < hrefVues.snapshotLength ; index++) {
		hrefVues.snapshotItem(index).href = hrefVues.snapshotItem(index).href.replace('vue.php?vue=15&id=', 'vue.php?vue=100&gowapOff=1&composantOff=1&gigotsOff=1&id=');
	}

	// Bouton de mise à jour de tout
	//var updateAllTrollsButton = makeElement('input', document.body, {'type':'submit', 'value':'MàJ tout', 'style':'font-family: comic; font-size: 16pt; position: absolute; left: 70px; top: 30px; width: 200px; height: 35px; cursor: pointer;'});
	//updateAllTrollsButton.addEventListener('click', updateAllTrollsAndProfils, false);

	// Bouton de mise à jour des trolls
	var updateAllTrollsButton = makeElement('input', document.body, {'type':'submit', 'value':'MàJ tous les trolls', 'style':'font-family: comic; font-size: 16pt; position: absolute; left: 70px; top: 70px; width: 200px; height: 35px; cursor: pointer;'});
	updateAllTrollsButton.addEventListener('click', updateAllTrolls, false);

	// Bouton de mise à jour des trolls sans tester la date de dernière mise à jour
	var updateAllTrollsWithoutDateTestButton = makeElement('input', document.body, {'type':'submit', 'value':'MàJ trolls sans check', 'style':'font-family: comic; font-style: italic; color: red; font-size: 16pt; position: absolute; left: 305px; top: 70px; width: 200px; height: 35px; cursor: pointer;'});
	updateAllTrollsWithoutDateTestButton.addEventListener('click', updateAllTrollsWithoutDateTest, false);

	// Bouton de mise à jour de tous les profils
	//var updateAllProfilsButton = makeElement('input', document.body, {'type':'submit', 'value':'MàJ tous les profils', 'style':'font-family: comic; font-size: 16pt; position: absolute; left: 70px; top: 110px; width: 200px; height: 35px; cursor: pointer;'});
	//updateAllProfilsButton.addEventListener('click', updateAllProfils, false);
}

// Traitements pour les pages de profils
if (location.href.indexOf('profil.php') != -1) {
	// Bouton de mise à jour
	var updateAllProfilButton = makeElement('input', document.body, {'type':'submit', 'name':'btnUpdateProfil', 'id':'btnUpdateProfil', 'value':'MàJ tout le profil', 'style':'font-family: comic; font-size: 16pt; position: absolute; left: 70px; top: 70px; width: 200px; height: 35px; cursor: pointer;'});
	updateAllProfilButton.addEventListener('click', updateAllBroll, false);
}

// Traitements pour les pages de gowaps et tanières
if (location.href.indexOf('gowaps_tanieres.php') != -1) {
	// Bouton de mise à jour
	var updateAllGowapsTanieresButton = makeElement('input', document.body, {'type':'submit', 'name':'btnUpdateGowapsTanieres', 'id':'btnUpdateGowapsTanieres', 'value':'MàJ tous les Gowaps et Tanières', 'style':'font-family: comic; font-size: 16pt; position: absolute; left: 70px; top: 70px; width: 300px; height: 35px; cursor: pointer;'});
	updateAllGowapsTanieresButton.addEventListener('click', updateAllBroll, false);
}

// Traitements pour les pages de possessions
if (location.href.indexOf('possessions.php') != -1) {
	// Bouton de mise à jour
	var updateAllPossessionsButton = makeElement('input', document.body, {'type':'submit', 'name':'btnUpdatePossessions', 'id':'btnUpdatePossessions', 'value':'MàJ les possessions', 'style':'font-family: comic; font-size: 16pt; position: absolute; left: 70px; top: 70px; width: 200px; height: 35px; cursor: pointer;'});
	updateAllPossessionsButton.addEventListener('click', updateAllBroll, false);
}

// Traitements pour les pages de listes de vente
if (location.href.indexOf('listes_vente.php') != -1) {
	// Bouton de mise à jour
	var updateAllListesVenteButton = makeElement('input', document.body, {'type':'submit', 'name':'btnUpdateListesVente', 'id':'btnUpdateListesVente', 'value':'MàJ les listes de vente', 'style':'font-family: comic; font-size: 16pt; position: absolute; left: 70px; top: 70px; width: 300px; height: 35px; cursor: pointer;'});
	updateAllListesVenteButton.addEventListener('click', updateAllBroll, false);
}