MH - H2P - Bricol' Trolls

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

  1. // ==UserScript==
  2. // @name MH - H2P - Bricol' Trolls
  3. // @namespace bricoltrolls
  4. // @description Eléments supplémentaires pour le Système Tactique des Bricol' Trolls
  5. // @include http*://trolls.ratibus.net/*
  6. // @include https://it.mh.raistlin.fr/*
  7. // @icon https://xballiet.github.io/ImagesMH/BricolTrolls.png
  8. // @version 2.5
  9. // @author 43406 - H2P
  10. // ==/UserScript==
  11.  
  12. // Variables globales
  13. var checkDate;
  14. var indexHref;
  15. var indexProfil;
  16. var nodesHref;
  17. var nodesProfil;
  18. var timeout;
  19. var now = new Date();
  20. var one_day = 1000 * 60 * 60 * 24;
  21. var one_month = 31 * one_day;
  22.  
  23. // Récupération de la date de la veille
  24. yesterday = new Date(now.getTime() - one_day);
  25. yyyy = yesterday.getFullYear();
  26. mm = yesterday.getMonth() + 1;
  27. if (mm < 10) {
  28. mm = '0' + mm;
  29. }
  30. dd = yesterday.getDate();
  31. if (dd < 10) {
  32. dd = '0' + dd;
  33. }
  34. hh = yesterday.getHours();
  35. if (hh < 10) {
  36. hh = '0' + hh;
  37. }
  38. mi = yesterday.getMinutes();
  39. if (mi < 10) {
  40. mi = '0' + mi;
  41. }
  42. ss = yesterday.getSeconds();
  43. if (ss < 10) {
  44. ss = '0' + ss;
  45. }
  46. var yesterdayString = '' + yyyy + mm + dd + hh + mi + ss;
  47.  
  48. // Récupération de la date d'il y a un mois
  49. yestermonth = new Date(now.getTime() - one_month);
  50. yyyy = yestermonth.getFullYear();
  51. mm = yestermonth.getMonth() + 1;
  52. if (mm < 10) {
  53. mm = '0' + mm;
  54. }
  55. dd = yestermonth.getDate();
  56. if (dd < 10) {
  57. dd = '0' + dd;
  58. }
  59. hh = yestermonth.getHours();
  60. if (hh < 10) {
  61. hh = '0' + hh;
  62. }
  63. mi = yestermonth.getMinutes();
  64. if (mi < 10) {
  65. mi = '0' + mi;
  66. }
  67. ss = yestermonth.getSeconds();
  68. if (ss < 10) {
  69. ss = '0' + ss;
  70. }
  71. var yestermonthString = '' + yyyy + mm + dd + hh + mi + ss;
  72.  
  73. // Fonction d'appel récursif aux liens de mises à jour
  74. function nextNodeHref() {
  75. if (checkDate) {
  76. // Récupération de la date de dernière mise à jour
  77. node = document.evaluate("../../td[@class='date']", nodesHref.snapshotItem(indexHref), null, XPathResult.STRING_TYPE, null).stringValue;
  78. dateMAJ = node.substring(node.indexOf('MAJ : ') + 6);
  79. yyyy = dateMAJ.substring(6, 10);
  80. mm = dateMAJ.substring(3, 5);
  81. dd = dateMAJ.substring(0, 2);
  82. hh = dateMAJ.substring(11, 13);
  83. mi = dateMAJ.substring(14, 16);
  84. ss = dateMAJ.substring(17);
  85. dateMAJString = yyyy + mm + dd + hh + mi + ss;
  86.  
  87. // 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
  88. majOK = (dateMAJString == '' || (yestermonthString < dateMAJString && dateMAJString < yesterdayString));
  89. //alert("hiddenFrame.src = _" + nodesHref.snapshotItem(indexHref).href + "_\r\nyestermonth = " + yestermonthString + ", dateMAJ = " + dateMAJString + " et yesterday = " + yesterdayString + " => majOK = " + majOK);
  90. } else {
  91. majOK = true;
  92. }
  93. if (majOK) {
  94. hiddenFrame.src = nodesHref.snapshotItem(indexHref).href;
  95. }
  96.  
  97. // On passe au lien de mise à jour suivant s'il y en a un, sinon on rafraîchit la page
  98. indexHref++;
  99. if (indexHref < nodesHref.snapshotLength) {
  100. if (majOK) {
  101. setTimeout(nextNodeHref, timeout);
  102. } else {
  103. nextNodeHref();
  104. }
  105. } else {
  106. setTimeout("location.href = '" + location.href + "'", 1000);
  107. alert("Mise à jour terminée.");
  108. }
  109. }
  110.  
  111. // Fonction d'appel récursif aux liens de profils (pas implémenté pour le moment)
  112. function nextNodeProfil() {
  113. hiddenFrameProfils.src = nodesProfil.snapshotItem(indexProfil).href;
  114. //alert(document.getElementById('iFrameProfils').src);
  115. alert(document.getElementById('iFrameProfils').getElementsByTagName('btnUpdateProfil'));
  116.  
  117. //alert("hiddenFrameProfils.src = _" + nodesProfil.snapshotItem(indexProfil).href + "_");
  118.  
  119. // On passe au lien de mise à jour suivant s'il y en a un, sinon on rafraîchit la page
  120. indexProfil++;
  121. if (indexProfil < nodesProfil.snapshotLength) {
  122. setTimeout(nextNodeProfil, timeout);
  123. } else {
  124. setTimeout("location.href = '" + location.href + "'", 1000);
  125. }
  126. }
  127.  
  128. // Fonction générique de mise à jour
  129. function updateAll(href, notHref, tempo, doubleHidden) {
  130. // Récupération de tous les liens dont le href contient <href> et ne contient pas <notHref>
  131. nodes = document.evaluate("//a[contains(@href, '" + href + "')][not(contains(@href, '" + notHref + "'))]", document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
  132.  
  133. // Appels récursifs dans la frame cachée des liens récupérés
  134. timeout = tempo;
  135. if (doubleHidden) {
  136. indexProfil = 0;
  137. nodesProfil = nodes;
  138. nextNodeProfil();
  139. } else {
  140. indexHref = 0;
  141. nodesHref = nodes;
  142. nextNodeHref();
  143. }
  144. }
  145.  
  146. // Fonction de mise à jour de tous les trolls depuis la page d'accueil
  147. function updateAllTrolls() {
  148. checkDate = true;
  149. updateAll('update_info.php?id=', 'XBT', 3000);
  150. }
  151.  
  152. // Fonction de mise à jour de tous les trolls depuis la page d'accueil sans vérification de la date de dernière mise à jour
  153. function updateAllTrollsWithoutDateTest() {
  154. if (confirm("Voulez-vous vraiment tout mettre à jour ?\r\n(attention à la limite d'appel des scripts publics)")) {
  155. checkDate = false;
  156. updateAll('update_info.php?id=', 'XBT', 3000);
  157. }
  158. }
  159.  
  160. // Fonction de mise à jour de tous les profils depuis la page d'accueil (pas implémenté pour le moment)
  161. function updateAllProfils() {
  162. checkDate = true;
  163. updateAll('profil.php?id=', 'XBT', 10000, true);
  164. }
  165.  
  166. // Fonction de mise à jour de tous les trolls et leurs profils depuis la page d'accueil (pas implémenté pour le moment)
  167. function updateAllTrollsAndProfils() {
  168. checkDate = true;
  169. alert("MàJ de tout");
  170. }
  171.  
  172. // Fonction de mise à jour générique
  173. function updateAllBroll() {
  174. checkDate = true;
  175. updateAll('update_', 'id_mouche', 3000);
  176. }
  177.  
  178. // Fonction d'ajout d'un élément (bouton, frame cachée...)
  179. function makeElement(type, appendto, attributes, checked, chkdefault) {
  180. var element = document.createElement(type);
  181. if (attributes != null) {
  182. for (var i in attributes) {
  183. element.setAttribute(i, attributes[i]);
  184. }
  185. }
  186. if (checked != null) {
  187. if (GM_getValue(checked, chkdefault) == 'checked') {
  188. element.setAttribute('checked', 'checked');
  189. }
  190. }
  191. if (appendto) {
  192. appendto.appendChild(element);
  193. }
  194. return element;
  195. }
  196.  
  197. // Pour le lien vers la page des compétences et sortilèges, on enlève les compétences/sortilèges que personne n'a
  198. document.evaluate("//a[@href='competences-sortileges.php']", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.href = "competences-sortileges.php?cleanEmpty=1";
  199.  
  200. // Suppression des publicités de bas de page
  201. document.getElementById("footer").outerHTML = "";
  202.  
  203. // Suppression des cadres News (et Diplomatie) et réduction du cadre Mémo
  204. if (document.getElementById("news") != null) {
  205. document.getElementById("news").outerHTML = "";
  206. }
  207. /*if (document.getElementById("diplomatie") != null) {
  208. document.getElementById("diplomatie").outerHTML = "";
  209. }*/
  210. if (document.getElementById("memoContent") != null) {
  211. document.getElementById("memoContent").style = "display: none;";
  212. }
  213.  
  214. // Frame cachée pour les mises à jour des profils depuis la page générale
  215. 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'});
  216.  
  217. // Frame cachée pour les mises à jour
  218. 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'});
  219.  
  220. // Traitements pour la page d'accueil
  221. if (location.href.indexOf('index.php') != -1) {
  222. // Récupération de tous les liens des vues
  223. var hrefVues = document.evaluate("//a[contains(@href, 'vue.php?vue=15&id=')]", document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
  224.  
  225. // Parcours des liens des vues et remplacements avec des vues plus adéquates (vue max, pas de gowaps, pas de composants, pas de GG)
  226. for (var index = 0 ; index < hrefVues.snapshotLength ; index++) {
  227. 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=');
  228. }
  229.  
  230. // Bouton de mise à jour de tout
  231. //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;'});
  232. //updateAllTrollsButton.addEventListener('click', updateAllTrollsAndProfils, false);
  233.  
  234. // Bouton de mise à jour des trolls
  235. 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;'});
  236. updateAllTrollsButton.addEventListener('click', updateAllTrolls, false);
  237.  
  238. // Bouton de mise à jour des trolls sans tester la date de dernière mise à jour
  239. 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;'});
  240. updateAllTrollsWithoutDateTestButton.addEventListener('click', updateAllTrollsWithoutDateTest, false);
  241.  
  242. // Bouton de mise à jour de tous les profils
  243. //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;'});
  244. //updateAllProfilsButton.addEventListener('click', updateAllProfils, false);
  245. }
  246.  
  247. // Traitements pour les pages de profils
  248. if (location.href.indexOf('profil.php') != -1) {
  249. // Bouton de mise à jour
  250. 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;'});
  251. updateAllProfilButton.addEventListener('click', updateAllBroll, false);
  252. }
  253.  
  254. // Traitements pour les pages de gowaps et tanières
  255. if (location.href.indexOf('gowaps_tanieres.php') != -1) {
  256. // Bouton de mise à jour
  257. 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;'});
  258. updateAllGowapsTanieresButton.addEventListener('click', updateAllBroll, false);
  259. }
  260.  
  261. // Traitements pour les pages de possessions
  262. if (location.href.indexOf('possessions.php') != -1) {
  263. // Bouton de mise à jour
  264. 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;'});
  265. updateAllPossessionsButton.addEventListener('click', updateAllBroll, false);
  266. }
  267.  
  268. // Traitements pour les pages de listes de vente
  269. if (location.href.indexOf('listes_vente.php') != -1) {
  270. // Bouton de mise à jour
  271. 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;'});
  272. updateAllListesVenteButton.addEventListener('click', updateAllBroll, false);
  273. }

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址