Inventaire tools

Recupere les informations sur la page inventaire d'ogame et affiche le temps de reduction possible ainsi que la production supplémentaire acquise par les boosters

  1. // ==UserScript==
  2. // @name Inventaire tools
  3. // @namespace http://userscripts.org/scripts/show/138760
  4. // @version 4
  5. // @description Recupere les informations sur la page inventaire d'ogame et affiche le temps de reduction possible ainsi que la production supplémentaire acquise par les boosters
  6. // @include http*://*.ogame.gameforge.com/game/index.php?page=shop*
  7. // @include http*://*.ogame.gameforge.com/game/index.php?page=resourceSettings*
  8. // @copyright 19 juillet 2012, nitneuc -- Libre d'être modifié ou reproduit, tant que cette ligne @copyright reste identique
  9. // ==/UserScript==11
  10.  
  11. /*
  12. // ****** Informations ******
  13. Inventaire tools
  14. ----------------
  15.  
  16. Installation:
  17. -------------
  18. http://userscripts.org/scripts/show/138760
  19. compatible chrome et firefox
  20.  
  21.  
  22. Variables persistantes stockées:
  23. --------------------------------
  24. *booléen= texte.script + "_" + pseudoJeu + "_" + universJeu + "_" + langue + "_premiereExecution"
  25. *array= texte.script + "_" + pseudoJeu + "_" + universJeu + "_" + langue + "_proprietesPlanetes_production"
  26.  
  27.  
  28. ChangeLog:
  29. ----------
  30.  
  31. v1.0: 19 juillet 2012
  32. *première version stable
  33.  
  34. v1.1:
  35. *Correction bug affichage
  36. *Correction: le tableau ne s'affichait pas si on passait de la boutique à l'inventaire
  37.  
  38. v1.2:
  39. *Simplification du code
  40. *Amélioration de l'affichage
  41.  
  42. v2.0:
  43. *intégration du changelog dans le script
  44. *nom du script = Inventaire tools
  45. *séparation de la fonction afficherSurPage() et constructionElementHTML()
  46. *ajout du tableau de production hebdomadaire des boosters
  47. *tableau des productions sur planète se MAJ si changement quantité production/déménagement/renommage
  48.  
  49. v2.1: 25 juillet 2012
  50. *les 2 tableaux sont mis-en-page et réunis en bas
  51. *nouvel emplacement pour les variables persistantes
  52. *simplification du code
  53.  
  54. v2.1.1: 26 juillet 2012
  55. *compatible Firefox
  56.  
  57. v2.1.2: 27 juillet 2012
  58. *correction: initialisation programme
  59.  
  60. v2.1.3: 27 juillet 2012
  61. *correction: les productions nulles étaient exclues
  62. *correction: les lunes étaient incluses (production nulle)
  63.  
  64. v2.2: 28 juillet 2012
  65. *ajout du 3ème tableau: cumul des gains booster (en nombre de ressources)
  66. *simplification du code du 1er tableau (temps cumulés)
  67. *nouvelle mise-en-page du 1er tableau (temps cumulés)
  68.  
  69. v2.3:
  70. *utilisation d'un CSS
  71. *travail de compatibilité avec autres script (uniformisation)
  72. *modification de la structure de la variable permanente des propriétés
  73.  
  74. v2.4: 29 septembre 2012
  75. *compatibilité v5
  76. *modification de l'affichage des alertes
  77.  
  78. v3: 23 octobre 2012
  79. *modification du stockage des variables
  80. *transformation de fonctions en prototypes
  81. *Refonte et grande simplification de l'affichage
  82.  
  83. v3.1: 24 octobre 2012
  84. *Correction bug d'affichage
  85.  
  86. v3.2: 24 octobre 2012
  87. *rétablissement de l'affichage après 'contentWrapper' en raisons de retours de bugs
  88.  
  89. v3.2.1: 24 octobre 2012
  90. *réctification mineure
  91.  
  92. v3.2.2 : 25 octobre 2012
  93. *correction de l'affichage
  94.  
  95. **********************************************************************************
  96. ** ** ** Suspension de la maintenance du script ** ** ** Pas de repreneur ** ** **
  97. **********************************************************************************
  98.  
  99. v3.3 : 23 mai 2016.
  100. *HTTP et HTTPS tolérés
  101. *document.getElementById = $
  102. *lecture de la production par planète sur la page 'resourceSettings' au lieu de la page 'resource'. Modifier la doc au passage
  103. *affichage d'alerte sur la page 'resourceSettings' au lieu de la page 'resource'
  104. *simplification de la fonction d'affichage d'alerte
  105. *correction sytaxes css
  106.  
  107. v3.3.1 : 24 mai 2016
  108. *@include modifié pour chrome : *.ogame.* -> *.ogame.gameforge.com
  109.  
  110. v3.4 : 30 mai 2016
  111. *prototypes
  112. *fonction get_buildLevel() et get_temp()
  113. *inclue la page 'resources' et 'overview'
  114. **Suppression de la ligne document.body.appendChild() qui faisait s(exécuter 2 fois le script si avec window.onload
  115.  
  116. v4 : 03 juin 2016
  117. *réécriture partielle du code : simplifications de parties du code écrit à l'époque où je débutais le js. Ajout de fonctions, transformations de fonctions en prototypes, simplification des syntaxes, concaténations, simplification des noms de variables, ...
  118. *les tableaux affichés dans l'onglet 'Inventaire' s'effacent bien en retournant sur l'onglet 'Boutique'
  119. *modification du caractère "séparateur de milliers"
  120. *les alertes positives s'affichent en vert
  121. *page inventaire : alerte si les productions de toutes les planètes ne sont pas renseignées
  122. *la remise à zéro des productions se fait désormais par un bouton, plus besoin de décommenter la ligne
  123. *désactivation du script sur le pages 'resources' et 'overview'
  124. *border-radius sur les alertes
  125. *les planètes s'affichent dans le même ordre que dans ogame
  126.  
  127. */
  128.  
  129. // var strFunc = (window.onload = function(){ // Fait s'exécuter 2 fois le script
  130. var strFunc = (function(){
  131.  
  132. // ****** Prototypes ******
  133. Storage.prototype.setObj = function(key, obj) {
  134. return this.setItem(key, JSON.stringify(obj));
  135. };
  136. Storage.prototype.getObj = function(key) {
  137. return JSON.parse(this.getItem(key));
  138. };
  139. Number.prototype.ajoutSeparateurMilliers = function(car) {
  140. // v1: fonction ; v2: prototype ; v2.1: prise en charge des nombres négatifs ; v2.2: prise en charge des nombre décimaux
  141. var dec = "";
  142. if ( this < 0 ) var neg = true;
  143. if ( this != Math.floor(this) ) {
  144. dec = ((this-Math.floor(this))+"").substr(1, (this+"").length-(Math.floor(this)+"").length);
  145. var str = Math.floor(this)+"";
  146. } else {
  147. var str = this+"";
  148. }
  149. if (neg) str = str.substring(1);
  150. var str_decoupe = new Array();
  151. for (var tmp=0; tmp<Math.ceil(str.length/3) ; tmp++) str_decoupe[tmp] = str.substring(str.length-3*tmp-3,str.length-3*tmp); // on remplit un array() de groupes de 3 chiffres
  152. var str_2 = str_decoupe[str_decoupe.length-1]; // on cree une string composée des groupes de 3 chiffres + du signe
  153. for (var tmp = str_decoupe.length-2; tmp>=0; tmp--) str_2 = str_2 + car + str_decoupe[tmp];
  154. if (neg) str_2 = "-"+str_2;
  155. return str_2+dec;
  156. };
  157. Number.prototype.divEuclidienne = function(diviseur) {
  158. return new Array(Math.floor(this/diviseur) , this-Math.floor(this/diviseur)*diviseur);
  159. };
  160. Array.prototype.niemeValeurDifferenteDe = function(n, val) {
  161. var tmp_2=0;
  162. for (var tmp=0; tmp<this.length; tmp++) {
  163. if ( this[tmp] != val ) tmp_2++;
  164. if ( tmp_2 == n ) return tmp;
  165. }
  166. return -1;
  167. };
  168. Array.prototype.max = function() {
  169. return Math.max.apply(null, this);
  170. };
  171. Array.prototype.nbOccurences = function(val) { // Compte le nombre d'occurences de val
  172. var incr = 0;
  173. for (var i=0; i<this.length; i++) if ( this[i] == val ) incr++;
  174. return incr;
  175. };
  176. Array.prototype.nbOccurencesDifferentDe = function(val) { // Compte le nombre d'occurences de toute valeur sauf val.
  177. // *** *** Dépendance : Array.prototype.nbOccurences(val)
  178. return this.length - this.nbOccurences(val);
  179. };
  180. // !!!!!!!!!!!!!!!!!!!!!!!!!
  181. // !!! PROTOTYPES LOCAUX !!!
  182. // !!!!!!!!!!!!!!!!!!!!!!!!!
  183.  
  184. // !! J'utilise ici des prototypes, n'ayant pas réussi à définir une méthode propre aux objets Array sans passer par un prototype. Cependant, et contrairement aux autres prototypes, ceux-cis sont spécifiques à ce script et n'ont pas vocation à être réutilisable !!
  185. Array.prototype.testPlaneteExiste = function(el) {
  186. for ( var i=0 ; i<this.length ; i++ ) if ( this[i][0][0] == el ) return i;
  187. return -1;
  188. };
  189. Array.prototype.max_prod = function() { // Renvoie un tableau des 3 maximums de ressources pour toutes les planètes (this)
  190. var tabl_max = new Array();
  191. for (var ress=0; ress<=2; ress++) {
  192. var tabl_temp = new Array();
  193. for (var i=0; i<this.length; i++) tabl_temp[i] = this[i][1][ress];
  194. tabl_max[ress] = tabl_temp.max();
  195. }
  196. return tabl_max;
  197. };
  198. Array.prototype.reorgPlanete = function() { // Réorganise le tableau enregistré des planètes, afin de placer les planètes dans le même ordre que le volet droite d'ogame. Cette réorganisation est à exécuter avant chaque affichage (page 'shop'), et son résultat n'a donc pas à être sauvegardé.
  199. var liste = $('planetList').getElementsByClassName('smallplanet');
  200. var tabl_temp = new Array(); // La table dans laquelle sera transférée this, éléments positionnés pour l'affichage
  201. for (var i=0; i<liste.length; i++) for (var j=0; j<this.length; j++) if ( this[j][0][1] == liste[i].getElementsByClassName('planet-koords')[0].innerHTML.supprNonNumEtDeuxPoints() ) tabl_temp.push(this[j]); // Parcours les planètes dans le volet de droite et réécrit la table this en les repositionnant, dans tabl_temp
  202. return tabl_temp;
  203. };
  204. // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  205. // !!! FIN PROTOTYPES LOCAUX !!!
  206. // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  207.  
  208. String.prototype.supprSpaces = function() {
  209. // Supprime le ou les espaces se trouvant en fin de chaîne
  210. return this.replace(/\s/g,'');
  211. };
  212.  
  213. String.prototype.cutLongString = function(lmax) {
  214. // Coupe la chaîne en remplaçant les caractères de la position lmmax jusqu'à la fin de la chaîne par '...'
  215. return ( this.length <= lmax ) ? this : this.substr(0,lmax)+"...";
  216. };
  217. String.prototype.supprNonNum = function() { // Supprime tous les caractères non numériques d'une chaîne
  218. return this.replace(/[^0-9-]/g,'');
  219. };
  220. String.prototype.supprNonNumEtDeuxPoints = function() { // Supprime tous les caractères non numériques d'une chaîne
  221. return this.replace(/[^0-9-:]/g,'');
  222. };
  223. Element.prototype.remove_HTML = function() {
  224. this.parentNode.removeChild(this);
  225. };
  226.  
  227.  
  228. // ****** fonctions 'hard' ******
  229. function $(id) { // Abrégé de document.getElementById(id);
  230. return document.getElementById(id);
  231. }
  232.  
  233. function minutes2hhmm(minutes) {
  234. var div = minutes.divEuclidienne(60);
  235. if ( div[1] == 0 ) div[1] = '';
  236. return div;
  237. }
  238. function accord_pluriel(nb, str_sin, str_plu) { // Selon le nombre, renvoie la chaîne singulier ou pluriel (typiquement avec un 's' final)
  239. return ( nb > 1 ) ? str_plu : str_sin;
  240. }
  241.  
  242. function positionPlanete2nombre(position) { // Convertit la position de planète en nombre (pour le stockage)
  243. return 1000000*parseInt(position.split(":")[0])+1000*parseInt(position.split(":")[1])+parseInt(position.split(":")[2]);
  244. }
  245.  
  246. // ****** fonctions affichage ******
  247. function creer_CSS() { // ajoute des classes CSS
  248. document.getElementsByTagName("head")[0].innerHTML = '<style type="text/css">'
  249. +'.table1 { width:'+ config.table1_width +'px; padding-top: 20px; padding-bottom: 20px;} '
  250. +'.table { width:100%; border-width: 3px; border-style: double; border-color: #666666; text-align: center; font-size:' +config.valeur_fontSize +'px;} '
  251. +'.header2 { background-color:'+ config.header2_bgColor+ '; color:'+ config.header2_fontColor +'; font-size:'+ config.header2_fontSize +'px; font-weight:'+ config.header2_fontBold +'; text-align:'+ config.header2_textAlign +';} '
  252. +'.header3 { background-color:'+ config.header3_bgColor+ '; color:'+ config.header3_fontColor +'; font-size:'+ config.header3_fontSize +'px; font-weight:'+ config.header3_fontBold +'; text-align:'+ config.header3_textAlign +';} '
  253. +'.headerLigne { background-color:'+ config.headerLigne_bgColor+ '; color:'+ config.headerLigne_fontColor +'; font-size:'+ config.headerLigne_fontSize +'px; font-weight:'+ config.headerLigne_fontBold +';} '
  254. +'.valeur { background-color:'+ config.valeur_bgColor+ '; color:'+ config.valeur_fontColor +'; font-size:'+ config.valeur_fontSize +'px; font-weight:'+ config.valeur_fontBold +'; text-align:'+ config.valeur_textAlign +';} '
  255. +'.valeursMax { background-color:'+ config.valeursMax_bgColor+ '; color:'+ config.valeursMax_fontColor +'; font-size:'+ config.valeursMax_fontSize +'px; font-weight:'+ config.valeursMax_fontBold +';} '
  256. +'.alerte_red { background-color:'+ config.alerte_red_bgColor+ '; color:'+ config.alerte_fontColor +'; font-size:'+ config.alerte_fontSize +'px; font-weight:'+ config.alerte_fontBold +'; text-align:'+ config.alerte_textAlign +'; border-radius: 4px;} '
  257. +'.alerte_green { background-color:'+ config.alerte_green_bgColor+ '; color:'+ config.alerte_fontColor +'; font-size:'+ config.alerte_fontSize +'px; font-weight:'+ config.alerte_fontBold +'; text-align:'+ config.alerte_textAlign +'; border-radius: 4px;} '
  258. +'</style>' + document.getElementsByTagName("head")[0].innerHTML;
  259. }
  260. function affichageAlerte(texteAAfficher, type) { // affiche alerte. Type prend comme valeur "green" ou "red"
  261. $("inhalt").innerHTML = '<div id="InventaireToolsAlert" class="alerte_'+type+'">' +texteAAfficher +'</div>'+$("inhalt").innerHTML;
  262. }
  263. function alerte_planetesNonVisitees(nb) { // Agfiche une alerte disant qu'il reste nb planètes sans production enregistrée
  264. affichageAlerte('Attention : La production de '+ nb +' '+ accord_pluriel(nb, 'planète', 'planètes')+' reste inconnue !', 'red');
  265. }
  266. function afficherTable(tout, affichageTempsCumules, affichageGainBooster, affichageProdBooster) {
  267. var ajoutHTML_2 = ""; // Déclaration
  268. var ajoutHTML_1 = '<div align="center" id="inventairetoolstable"><div id="eraseDataInventaireTools" style="margin-top: 20px;">[ Effacer données Inventaire tools ]</div><table class="table1"><tr><td style="padding-bottom: 12px;" align="center"><table style="width:250px; align: center;" class="table">'
  269. +'<tr><td colspan="3" style="padding-top: 5px, padding-bottom: 5px;" class="header2">CUMULS DES GAINS</td></tr><tr>';
  270. for (var i=0; i<=2 ; i++) ajoutHTML_1 += '<td class="header3" width="33%">'+affichageTempsCumules[i].split(":")[0] +'</td>';
  271. ajoutHTML_1 += '</tr><tr>';
  272. for (var i=0; i<=2 ; i++) ajoutHTML_1 += '<td class="valeur">'+affichageTempsCumules[i].split(":")[1] +'</td>';
  273. ajoutHTML_1 += '</tr>';
  274. if (tout) { // si tous les tableaux doivent être affichés
  275. ajoutHTML_1 += '<tr>';
  276. for (var i=0; i<=2 ; i++) ajoutHTML_1 += '<td class="header3" width="33%">'+ressource[0][i] +'</td>';
  277. ajoutHTML_1 += '</tr><tr>';
  278. for (var i=0; i<=2 ; i++) ajoutHTML_1 += '<td class="valeur">'+affichageGainBooster[i].ajoutSeparateurMilliers("'")+'</td>';
  279. ajoutHTML_1 += '</tr>';
  280. }
  281. ajoutHTML_1 += '</table></td></tr>';
  282. if ( affichageProdBooster == undefined ) { // Si aucune production sauvegardée pour l'instant
  283. alerte_planetesNonVisitees(get_nbCol().split("/")[0]);
  284. } else { // Si des productions sont sauvegardées, mais pas toutes
  285. var nbPlaneteInconnues = get_nbCol().split("/")[0] - affichageProdBooster.length;
  286. if ( nbPlaneteInconnues > 0 ) alerte_planetesNonVisitees(nbPlaneteInconnues);
  287. }
  288. if (tout) {
  289. var nombre_type_booster = nombre_booster.nbOccurencesDifferentDe(0);; // définit le nombre de colonnes à fabriquer dans le grand tableau
  290.  
  291. ajoutHTML_2 = '<tr><td style="padding-bottom: 30px;" align="center"><table class="valeur table" width="'+ (142+nombre_type_booster*(config.prodBooster_largeurColonne+2)) +'px"><tr><td colspan="'+(nombre_type_booster+2)+'" style="padding-top: 5px; padding-bottom: 5px;" class="header2">GAIN SUR 1 SEMAINE</td></tr><tr>';
  292. for (var i=0; i<=nombre_type_booster+1; i++) {
  293. ajoutHTML_2 += '<td class="header3" width=';
  294. if ( i==0 ) ajoutHTML_2 += '"91px" align="left">'+ affichageProdBooster.length + "/" + get_nbCol().split("/")[0] + ' planètes</td>';
  295. if ( i==1 ) ajoutHTML_2 += '"45px">position</td>';
  296. if ( i>=2 ) {
  297. var j = nombre_booster.niemeValeurDifferenteDe(i-1,0);
  298. ajoutHTML_2 += '"'+ config.prodBooster_largeurColonne +'px">'+ (j-3*Math.ceil((j+1)/3)+4) + '0% '+ ressource[1][Math.floor(j/3)] +'/' + nombre_booster[j] +'</td>';
  299. }
  300. }
  301. ajoutHTML_2 += '</tr>';
  302. var maxProd = affichageProdBooster.max_prod(); // Maximum de production entre les planètes
  303. for (var i=0; i<affichageProdBooster.length; i++) { // i = les lignes du tableau
  304. ajoutHTML_2 += '<tr><td class="headerLigne" align="left">' + '<a href="http://uni'+ universJeu +'.ogame.'+ langue +'/game/index.php?page=shop&cp='+ affichageProdBooster[i][0][0] + '#page=inventory" style="color:'+ config.headerLigne_fontColor +'; text-decoration:none;">' + affichageProdBooster[i][0][2].cutLongString(14) + '</a></td><td class="headerLigne">'+ affichageProdBooster[i][0][1] +'</td>';;
  305. for (var k=0; k<=2; k++) { // k= chaque ressource
  306. for (var l=1 ; l<=3 ; l++) {
  307. if ( nombre_booster[3*k+l-1] != 0 ) { // le contenu du td est nul si le booster n'est pas dans l'inventaire
  308. ajoutHTML_2 += '<td';
  309. if ( affichageProdBooster[i][1][k] == maxProd[k] ) ajoutHTML_2 += ' class="valeursMax"';
  310. ajoutHTML_2 += '>'+ Math.ceil((affichageProdBooster[i][1][k])*l*.1*168).ajoutSeparateurMilliers("'") +'</td>';
  311. }
  312. }
  313. }
  314. ajoutHTML_2 += '</tr>';
  315. }
  316. ajoutHTML_2 += '</table></td></tr>';
  317. }
  318. document.getElementsByClassName("footer")[0].innerHTML += ajoutHTML_1+ajoutHTML_2;
  319. $('eraseDataInventaireTools').addEventListener("click", function(event) { // Bouton de RAZ data
  320. if ( confirm('Attention, Les valeurs de production de toutes les planètes seront remises à zéro.') ) {
  321. localStorage.removeItem(texte.script + "_" + pseudoJeu + "_" + universJeu + "_" + langue + "_premiereExecution");
  322. window.location.reload();
  323. }
  324. }, true);
  325. }
  326. // ****** Fonctions 'get' ******
  327. function get_infoInventaire() {
  328. var inventaire = $("js_inventorySlider").getElementsByClassName("item_img_box"); // On récupère un élément HTML de la page
  329. var liste = new Array();
  330. for (var i=0 ; i < inventaire.length ; i++) { // fais le tour des objets de la page
  331. var inventaire2 = inventaire[i].getElementsByTagName("a");
  332. var nbObjet = inventaire2[0].getElementsByClassName("level amount")[0].innerHTML; // récupère le nombre de l'objet
  333. var attributObjet = inventaire2[0].getAttribute("title").split("|")[0]; // récupère le titre de l'objet
  334. liste[i] = (attributObjet.split(" en ")[0] + ":" + attributObjet.split(" en ")[1] + ":" + nbObjet).toLowerCase();
  335. }
  336. return liste;
  337. }
  338. function get_nbCol() {
  339. return $("countColonies").getElementsByTagName("span")[0].innerHTML;
  340. }
  341. function get_infoPlaneteCourante() {
  342. var ensembleBaliseMeta = document.getElementsByTagName("meta"); // récupère toutes les balises meta du <head>
  343. var info = new Array();
  344. for (var i=0 ; i<ensembleBaliseMeta.length ; i++) { //trouve certaines balises dans la liste
  345. var balise_name = ensembleBaliseMeta[i].getAttribute("name");
  346. var balise_content = ensembleBaliseMeta[i].getAttribute("content");
  347. if ( balise_name == "ogame-planet-id" ) info[0] = balise_content;
  348. if ( balise_name == "ogame-planet-coordinates" ) info[1] = balise_content;
  349. if ( balise_name == "ogame-planet-name" ) info[2] = balise_content;
  350. if ( balise_name == "ogame-planet-type" ) info[3] = balise_content;
  351. }
  352. return info;
  353. }
  354. function get_prodCourante() { // renvoie la production M,C et D, sous forme d'Array(). Attention les objets s'appliquent sur les mines et pas sur la prod totale de la planète (hors plasma, hors prod initiale, hors objets, ...)
  355. var production = new Array();
  356. lignesTabl = $('inhalt').getElementsByClassName('list listOfResourceSettingsPerPlanet')[0].getElementsByTagName('tr');
  357. for (var i=2; i<lignesTabl.length; i++) { // Les 2 premières lignes ne sont concernent en aucun cas les mines (en-têtes)
  358. var txt = lignesTabl[i].getElementsByTagName('td')[0].innerHTML;
  359. if ( txt.indexOf('Mine de métal') != -1 ) production[0] = lignesTabl[i].getElementsByTagName('td')[2].getElementsByTagName('span')[0].innerHTML.supprNonNum()
  360. if ( txt.indexOf('Mine de cristal') != -1 ) production[1] = lignesTabl[i].getElementsByTagName('td')[3].getElementsByTagName('span')[0].innerHTML.supprNonNum();
  361. if ( txt.indexOf('Synthétiseur de deutérium') != -1 ) production[2] = lignesTabl[i].getElementsByTagName('td')[4].getElementsByTagName('span')[0].innerHTML.supprNonNum();
  362. }
  363. return production;
  364. }
  365. // ****** Autres fonctions ******
  366. function affichageInventaire() {
  367. if ( $("js_inventorySlider") ) {
  368. if ( ! pageCouranteEstInventaire ) {
  369. pageCouranteEstInventaire = true;
  370. // Préparation du tableau tempsCumulés
  371. var duree_obj = new Array(0,0,0); // remise à zéro des compteurs de duree/nombre pour chaque type d'items (kraken, detroid, newtron)
  372. var listeItem = get_infoInventaire();
  373. for (var i=0 ; i<listeItem.length ; i++) { // Modifie les compteurs de durée des 3 types d'item
  374. if ( listeItem[i].split(":")[0] == "kraken") duree_obj[0] += niveauItem2temps(listeItem[i].split(":")[1], listeItem[i].split(":")[2]);
  375. if ( listeItem[i].split(":")[0] == "detroid") duree_obj[1] += niveauItem2temps(listeItem[i].split(":")[1], listeItem[i].split(":")[2]);
  376. if ( listeItem[i].split(":")[0] == "newtron") duree_obj[2] += niveauItem2temps(listeItem[i].split(":")[1], listeItem[i].split(":")[2]);
  377. if (( listeItem[i].split(":")[0] == "booster de métal" ) || ( listeItem[i].split(":")[0] == "booster de cristal" ) || ( listeItem[i].split(":")[0] == "booster de deutérium" )) {
  378. // Calcule l'emplacement de la case de l'array() à incrémenter
  379. if ( listeItem[i].split(":")[0] == "booster de métal" ) var a = 1;
  380. if ( listeItem[i].split(":")[0] == "booster de cristal" ) var a = 2;
  381. if ( listeItem[i].split(":")[0] == "booster de deutérium" ) var a = 3;
  382. if ( listeItem[i].split(":")[1] == "bronze" ) var b = 1;
  383. if ( listeItem[i].split(":")[1] == "argent" ) var b = 2;
  384. if ( listeItem[i].split(":")[1] == "or" ) var b = 3;
  385. nombre_booster[3*a+b-4] = listeItem[i].split(":")[2];
  386. }
  387. }
  388. var affichage = new Array(// les valeurs à afficher à l'écran sont entrées dans un array()
  389. "Bâtiments : "+ minutes2hhmm(duree_obj[0])[0]+ "h"+ minutes2hhmm(duree_obj[0])[1],
  390. "Chantier spatial : "+ minutes2hhmm(duree_obj[1])[0]+ "h"+ minutes2hhmm(duree_obj[1])[1],
  391. "Recherche : "+ minutes2hhmm(duree_obj[2])[0]+ "h"+ minutes2hhmm(duree_obj[2])[1]
  392. );
  393. if (( nombre_booster.nbOccurencesDifferentDe(0) != 0 ) && ( typeof proprietesPlanetes_production[0] != 'undefined' )) { // si on affiche les 3 tables
  394. afficherTable(true, affichage, gainTotalBooster(proprietesPlanetes_production), proprietesPlanetes_production.reorgPlanete());
  395. } else { // si on affiche qu'une table
  396. afficherTable(false, affichage);
  397. }
  398. }
  399. }
  400. else { // si la page courante n'est pas l'inventaire, la div contenant les tableaux affichés précédemment doit être efffacée
  401. pageCouranteEstInventaire = false;
  402. if ( $('InventaireToolsAlert') != undefined ) $('InventaireToolsAlert').remove_HTML();
  403. $('inventairetoolstable').remove_HTML();
  404. }
  405. }
  406. function niveauItem2temps(niveau, nombre) { // renvoie la durée associée à chaque item en fonction de son nombre
  407. if ( niveau == "bronze" ) return nombre*config.duree_bronze;
  408. if ( niveau == "argent" ) return nombre*config.duree_argent;
  409. if ( niveau == "or" ) return nombre*config.duree_or;
  410. }
  411. function ajouterPlanete(info, proprietesAAjouter, tableProprietes, nomVariablePersistante) { // ajout d'une planète (id) +ses proprietes (array de 3 cases) à la liste
  412. var pos = 0;
  413. if ( tableProprietes.length != 0 ) for (var pos=0; pos<tableProprietes.length; pos++) if ( positionPlanete2nombre(info[1]) < positionPlanete2nombre(tableProprietes[pos][0][1]) ) break;
  414. tableProprietes.splice(pos, 0, new Array(info,proprietesAAjouter));
  415. localStorage.setObj(texte.script+ "_"+ pseudoJeu+ "_"+ universJeu+ "_"+ langue+ "_"+ nomVariablePersistante,tableProprietes);
  416. affichageAlerte(texte.alerte_planeteAjoutee, 'green'); // affiche alerte de confirmation
  417. }
  418. function maxProdEmpire(tableProprietes) { // trouve les meilleures productions de l'empire, pour trouver les meilleures planètes où appliquer les boosters
  419. var maxProd_temp = new Array(0,0,0);
  420. for (var i=0 ; i<tableProprietes.length ; i++) for (var j=0 ; j<=2 ; j++) if (parseInt(tableProprietes[i][1][j]) > maxProd_temp[j]) maxProd_temp[j] = parseInt(tableProprietes[i][1][j]);
  421. return maxProd_temp;
  422. }
  423. function gainTotalBooster(tableProprietes) {
  424. var maxProd_temp = maxProdEmpire(tableProprietes);
  425. var gain_parRessource = new Array(0,0,0);
  426. for (var i=0 ; i<=2 ; i++) for (var j=3*i ; j<=3*i+2 ; j++) gain_parRessource[i] = gain_parRessource[i] + nombre_booster[j]*Math.ceil(maxProd_temp[i]*168*(j+1-3*Math.floor(j/3))/10);
  427. return gain_parRessource;
  428. }
  429. function initialiserDonneesUtilisateur() { // initialise les données utilisateur du script
  430. var proprietes = new Array();
  431. localStorage.setObj(texte.script + "_" + pseudoJeu + "_" + universJeu + "_" + langue + "_proprietesPlanetes_production",proprietes);
  432. localStorage.setObj(texte.script + "_" + pseudoJeu + "_" + universJeu + "_" + langue + "_premiereExecution",false);
  433. return proprietes;
  434. }
  435. // ****** Initialisations valeurs ******
  436. const langue = location.href.split("/")[2].split(".")[2];
  437. const universJeu = location.href.split("/")[2].split(".")[0].replace("uni","");
  438. const pseudoJeu = document.getElementsByName("ogame-player-name")[0].getAttribute("content");
  439. var pageCouranteEstInventaire = false;
  440. var nombre_booster = new Array(0,0,0,0,0,0,0,0,0); // array() contenant le nombre de chaque booster
  441. // ****** Paramètres utilisateur ******
  442. var config = {
  443. duree_bronze:30,
  444. duree_argent:120,
  445. duree_or:360,
  446. header2_fontColor:"#FFFFFF",
  447. header2_fontSize:"9",
  448. header2_fontBold:"bold",
  449. header2_bgColor:"#00002D",
  450. header2_textAlign:"center",
  451. header3_fontColor:"#FFFF00",
  452. header3_fontSize:"9",
  453. header3_fontBold:"bold",
  454. header3_bgColor:"#00002D",
  455. header3_textAlign:"center",
  456. headerLigne_fontColor:"#FF8000",
  457. headerLigne_fontSize:"9",
  458. headerLigne_fontBold:"bold",
  459. headerLigne_bgColor:"#000000",
  460. valeur_fontColor:"#FFFFFF",
  461. valeur_fontSize:"9",
  462. valeur_fontBold:"normal",
  463. valeur_bgColor:"#000000",
  464. valeur_textAlign:"center",
  465. valeursMax_fontColor:"#FFFFFF",
  466. valeursMax_fontSize:"9",
  467. valeursMax_fontBold:"normal",
  468. valeursMax_bgColor:"#FF0000",
  469. prodBooster_largeurColonne:70,
  470. alerte_fontColor:"#FFFFFF",
  471. alerte_fontSize:"9",
  472. alerte_fontBold:"bold",
  473. alerte_red_bgColor:"#FF0000",
  474. alerte_green_bgColor:"#009900",
  475. alerte_textAlign:"center",
  476. };
  477. var texte = {
  478. script:"Inventaire tools",
  479. alerte_planeteAjoutee:"Inventaire tools: Planète ajoutée",
  480. alerte_proprietesModifiees:"Inventaire tools: Propriétés modifiees",
  481. };
  482. var ressource = new Array(
  483. new Array("Métal","Cristal","Deutérium"),
  484. new Array("mét","cri","deut")
  485. );
  486. // ****** script ******
  487. creer_CSS();
  488. if ( localStorage.getObj(texte.script + "_" + pseudoJeu + "_" + universJeu + "_" + langue + "_premiereExecution") != false ) { // teste si l'utilisateur est à sa première exécution ou non
  489. var proprietesPlanetes_production = initialiserDonneesUtilisateur();
  490. } else {
  491. var proprietesPlanetes_production = localStorage.getObj(texte.script + "_" + pseudoJeu + "_" + universJeu + "_" + langue + "_proprietesPlanetes_production");
  492. }
  493. var url = location.href.split("page=")[1].split("&")[0].split("#")[0];
  494. if ( url == "resourceSettings" ) { // si la page courante est la page 'ressourcesSettings'
  495. // Récuperation des infos sur la planète courante
  496. var infoPlanete = get_infoPlaneteCourante();
  497. var productionPlaneteCourante = get_prodCourante();
  498. if ( infoPlanete[3] == "planet" ) { // teste si la planète courante n'est pas une lune
  499. var n_planete = proprietesPlanetes_production.testPlaneteExiste(infoPlanete[0]); // teste si la planète courante a déjà été enregistrée
  500. if ( n_planete == -1 ) { // si la planète n'existe pas dans la liste
  501. ajouterPlanete(infoPlanete, productionPlaneteCourante, proprietesPlanetes_production, "proprietesPlanetes_production");
  502. } else { // si la planète est déjà dans la liste
  503. if (( proprietesPlanetes_production[n_planete][0][1] != infoPlanete[1] )
  504. || ( proprietesPlanetes_production[n_planete][0][2] != infoPlanete[2] )
  505. || ( proprietesPlanetes_production[n_planete][1][0] != productionPlaneteCourante[0] )
  506. || ( proprietesPlanetes_production[n_planete][1][1] != productionPlaneteCourante[1] )
  507. || ( proprietesPlanetes_production[n_planete][1][2] != productionPlaneteCourante[2] )) { // on test si les valeurs des productions+nom+emplacement ont changées
  508. proprietesPlanetes_production[n_planete] = new Array(infoPlanete,productionPlaneteCourante);
  509. localStorage.setObj(texte.script + "_" + pseudoJeu + "_" + universJeu + "_" + langue + "_proprietesPlanetes_production",proprietesPlanetes_production);
  510. affichageAlerte(texte.alerte_proprietesodifiees, 'green');
  511. }
  512. }
  513. }
  514. }
  515. if ( url == "shop" ) setInterval(affichageInventaire,500);
  516. }).toString();
  517.  
  518. var script = document.createElement("script");
  519. script.setAttribute("type","text/javascript");
  520. script.text = "(" + strFunc + ")();";
  521. document.body.appendChild(script);