// ==UserScript== // @name Inventaire tools // @namespace http://userscripts.org/scripts/show/138760 // @version 4 // @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 // @include http*://*.ogame.gameforge.com/game/index.php?page=shop* // @include http*://*.ogame.gameforge.com/game/index.php?page=resourceSettings* // @copyright 19 juillet 2012, nitneuc -- Libre d'être modifié ou reproduit, tant que cette ligne @copyright reste identique // @downloadURL none // ==/UserScript==111 /* // ****** Informations ****** Inventaire tools ---------------- Installation: ------------- http://userscripts.org/scripts/show/138760 compatible chrome et firefox Variables persistantes stockées: -------------------------------- *booléen= texte.script + "_" + pseudoJeu + "_" + universJeu + "_" + langue + "_premiereExecution" *array= texte.script + "_" + pseudoJeu + "_" + universJeu + "_" + langue + "_proprietesPlanetes_production" ChangeLog: ---------- v1.0: 19 juillet 2012 *première version stable v1.1: *Correction bug affichage *Correction: le tableau ne s'affichait pas si on passait de la boutique à l'inventaire v1.2: *Simplification du code *Amélioration de l'affichage v2.0: *intégration du changelog dans le script *nom du script = Inventaire tools *séparation de la fonction afficherSurPage() et constructionElementHTML() *ajout du tableau de production hebdomadaire des boosters *tableau des productions sur planète se MAJ si changement quantité production/déménagement/renommage v2.1: 25 juillet 2012 *les 2 tableaux sont mis-en-page et réunis en bas *nouvel emplacement pour les variables persistantes *simplification du code v2.1.1: 26 juillet 2012 *compatible Firefox v2.1.2: 27 juillet 2012 *correction: initialisation programme v2.1.3: 27 juillet 2012 *correction: les productions nulles étaient exclues *correction: les lunes étaient incluses (production nulle) v2.2: 28 juillet 2012 *ajout du 3ème tableau: cumul des gains booster (en nombre de ressources) *simplification du code du 1er tableau (temps cumulés) *nouvelle mise-en-page du 1er tableau (temps cumulés) v2.3: *utilisation d'un CSS *travail de compatibilité avec autres script (uniformisation) *modification de la structure de la variable permanente des propriétés v2.4: 29 septembre 2012 *compatibilité v5 *modification de l'affichage des alertes v3: 23 octobre 2012 *modification du stockage des variables *transformation de fonctions en prototypes *Refonte et grande simplification de l'affichage v3.1: 24 octobre 2012 *Correction bug d'affichage v3.2: 24 octobre 2012 *rétablissement de l'affichage après 'contentWrapper' en raisons de retours de bugs v3.2.1: 24 octobre 2012 *réctification mineure v3.2.2 : 25 octobre 2012 *correction de l'affichage ********************************************************************************** ** ** ** Suspension de la maintenance du script ** ** ** Pas de repreneur ** ** ** ********************************************************************************** v3.3 : 23 mai 2016. *HTTP et HTTPS tolérés *document.getElementById = $ *lecture de la production par planète sur la page 'resourceSettings' au lieu de la page 'resource'. Modifier la doc au passage *affichage d'alerte sur la page 'resourceSettings' au lieu de la page 'resource' *simplification de la fonction d'affichage d'alerte *correction sytaxes css v3.3.1 : 24 mai 2016 *@include modifié pour chrome : *.ogame.* -> *.ogame.gameforge.com v3.4 : 30 mai 2016 *prototypes *fonction get_buildLevel() et get_temp() *inclue la page 'resources' et 'overview' **Suppression de la ligne document.body.appendChild() qui faisait s(exécuter 2 fois le script si avec window.onload v4 : 03 juin 2016 *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, ... *les tableaux affichés dans l'onglet 'Inventaire' s'effacent bien en retournant sur l'onglet 'Boutique' *modification du caractère "séparateur de milliers" *les alertes positives s'affichent en vert *page inventaire : alerte si les productions de toutes les planètes ne sont pas renseignées *la remise à zéro des productions se fait désormais par un bouton, plus besoin de décommenter la ligne *désactivation du script sur le pages 'resources' et 'overview' *border-radius sur les alertes *les planètes s'affichent dans le même ordre que dans ogame */ // var strFunc = (window.onload = function(){ // Fait s'exécuter 2 fois le script var strFunc = (function(){ // ****** Prototypes ****** Storage.prototype.setObj = function(key, obj) { return this.setItem(key, JSON.stringify(obj)); }; Storage.prototype.getObj = function(key) { return JSON.parse(this.getItem(key)); }; Number.prototype.ajoutSeparateurMilliers = function(car) { // v1: fonction ; v2: prototype ; v2.1: prise en charge des nombres négatifs ; v2.2: prise en charge des nombre décimaux var dec = ""; if ( this < 0 ) var neg = true; if ( this != Math.floor(this) ) { dec = ((this-Math.floor(this))+"").substr(1, (this+"").length-(Math.floor(this)+"").length); var str = Math.floor(this)+""; } else { var str = this+""; } if (neg) str = str.substring(1); var str_decoupe = new Array(); for (var tmp=0; tmp=0; tmp--) str_2 = str_2 + car + str_decoupe[tmp]; if (neg) str_2 = "-"+str_2; return str_2+dec; }; Number.prototype.divEuclidienne = function(diviseur) { return new Array(Math.floor(this/diviseur) , this-Math.floor(this/diviseur)*diviseur); }; Array.prototype.niemeValeurDifferenteDe = function(n, val) { var tmp_2=0; for (var tmp=0; tmp 1 ) ? str_plu : str_sin; } function positionPlanete2nombre(position) { // Convertit la position de planète en nombre (pour le stockage) return 1000000*parseInt(position.split(":")[0])+1000*parseInt(position.split(":")[1])+parseInt(position.split(":")[2]); } // ****** fonctions affichage ****** function creer_CSS() { // ajoute des classes CSS document.getElementsByTagName("head")[0].innerHTML = '' + document.getElementsByTagName("head")[0].innerHTML; } function affichageAlerte(texteAAfficher, type) { // affiche alerte. Type prend comme valeur "green" ou "red" $("inhalt").innerHTML = '
' +texteAAfficher +'
'+$("inhalt").innerHTML; } function alerte_planetesNonVisitees(nb) { // Agfiche une alerte disant qu'il reste nb planètes sans production enregistrée affichageAlerte('Attention : La production de '+ nb +' '+ accord_pluriel(nb, 'planète', 'planètes')+' reste inconnue !', 'red'); } function afficherTable(tout, affichageTempsCumules, affichageGainBooster, affichageProdBooster) { var ajoutHTML_2 = ""; // Déclaration var ajoutHTML_1 = '
[ Effacer données Inventaire tools ]
'; if ( affichageProdBooster == undefined ) { // Si aucune production sauvegardée pour l'instant alerte_planetesNonVisitees(get_nbCol().split("/")[0]); } else { // Si des productions sont sauvegardées, mais pas toutes var nbPlaneteInconnues = get_nbCol().split("/")[0] - affichageProdBooster.length; if ( nbPlaneteInconnues > 0 ) alerte_planetesNonVisitees(nbPlaneteInconnues); } if (tout) { var nombre_type_booster = nombre_booster.nbOccurencesDifferentDe(0);; // définit le nombre de colonnes à fabriquer dans le grand tableau ajoutHTML_2 = ''; } document.getElementsByClassName("footer")[0].innerHTML += ajoutHTML_1+ajoutHTML_2; $('eraseDataInventaireTools').addEventListener("click", function(event) { // Bouton de RAZ data if ( confirm('Attention, Les valeurs de production de toutes les planètes seront remises à zéro.') ) { localStorage.removeItem(texte.script + "_" + pseudoJeu + "_" + universJeu + "_" + langue + "_premiereExecution"); window.location.reload(); } }, true); } // ****** Fonctions 'get' ****** function get_infoInventaire() { var inventaire = $("js_inventorySlider").getElementsByClassName("item_img_box"); // On récupère un élément HTML de la page var liste = new Array(); for (var i=0 ; i < inventaire.length ; i++) { // fais le tour des objets de la page var inventaire2 = inventaire[i].getElementsByTagName("a"); var nbObjet = inventaire2[0].getElementsByClassName("level amount")[0].innerHTML; // récupère le nombre de l'objet var attributObjet = inventaire2[0].getAttribute("title").split("|")[0]; // récupère le titre de l'objet liste[i] = (attributObjet.split(" en ")[0] + ":" + attributObjet.split(" en ")[1] + ":" + nbObjet).toLowerCase(); } return liste; } function get_nbCol() { return $("countColonies").getElementsByTagName("span")[0].innerHTML; } function get_infoPlaneteCourante() { var ensembleBaliseMeta = document.getElementsByTagName("meta"); // récupère toutes les balises meta du var info = new Array(); for (var i=0 ; i maxProd_temp[j]) maxProd_temp[j] = parseInt(tableProprietes[i][1][j]); return maxProd_temp; } function gainTotalBooster(tableProprietes) { var maxProd_temp = maxProdEmpire(tableProprietes); var gain_parRessource = new Array(0,0,0); 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); return gain_parRessource; } function initialiserDonneesUtilisateur() { // initialise les données utilisateur du script var proprietes = new Array(); localStorage.setObj(texte.script + "_" + pseudoJeu + "_" + universJeu + "_" + langue + "_proprietesPlanetes_production",proprietes); localStorage.setObj(texte.script + "_" + pseudoJeu + "_" + universJeu + "_" + langue + "_premiereExecution",false); return proprietes; } // ****** Initialisations valeurs ****** const langue = location.href.split("/")[2].split(".")[2]; const universJeu = location.href.split("/")[2].split(".")[0].replace("uni",""); const pseudoJeu = document.getElementsByName("ogame-player-name")[0].getAttribute("content"); var pageCouranteEstInventaire = false; var nombre_booster = new Array(0,0,0,0,0,0,0,0,0); // array() contenant le nombre de chaque booster // ****** Paramètres utilisateur ****** var config = { duree_bronze:30, duree_argent:120, duree_or:360, header2_fontColor:"#FFFFFF", header2_fontSize:"9", header2_fontBold:"bold", header2_bgColor:"#00002D", header2_textAlign:"center", header3_fontColor:"#FFFF00", header3_fontSize:"9", header3_fontBold:"bold", header3_bgColor:"#00002D", header3_textAlign:"center", headerLigne_fontColor:"#FF8000", headerLigne_fontSize:"9", headerLigne_fontBold:"bold", headerLigne_bgColor:"#000000", valeur_fontColor:"#FFFFFF", valeur_fontSize:"9", valeur_fontBold:"normal", valeur_bgColor:"#000000", valeur_textAlign:"center", valeursMax_fontColor:"#FFFFFF", valeursMax_fontSize:"9", valeursMax_fontBold:"normal", valeursMax_bgColor:"#FF0000", prodBooster_largeurColonne:70, alerte_fontColor:"#FFFFFF", alerte_fontSize:"9", alerte_fontBold:"bold", alerte_red_bgColor:"#FF0000", alerte_green_bgColor:"#009900", alerte_textAlign:"center", }; var texte = { script:"Inventaire tools", alerte_planeteAjoutee:"Inventaire tools: Planète ajoutée", alerte_proprietesModifiees:"Inventaire tools: Propriétés modifiees", }; var ressource = new Array( new Array("Métal","Cristal","Deutérium"), new Array("mét","cri","deut") ); // ****** script ****** creer_CSS(); if ( localStorage.getObj(texte.script + "_" + pseudoJeu + "_" + universJeu + "_" + langue + "_premiereExecution") != false ) { // teste si l'utilisateur est à sa première exécution ou non var proprietesPlanetes_production = initialiserDonneesUtilisateur(); } else { var proprietesPlanetes_production = localStorage.getObj(texte.script + "_" + pseudoJeu + "_" + universJeu + "_" + langue + "_proprietesPlanetes_production"); } var url = location.href.split("page=")[1].split("&")[0].split("#")[0]; if ( url == "resourceSettings" ) { // si la page courante est la page 'ressourcesSettings' // Récuperation des infos sur la planète courante var infoPlanete = get_infoPlaneteCourante(); var productionPlaneteCourante = get_prodCourante(); if ( infoPlanete[3] == "planet" ) { // teste si la planète courante n'est pas une lune var n_planete = proprietesPlanetes_production.testPlaneteExiste(infoPlanete[0]); // teste si la planète courante a déjà été enregistrée if ( n_planete == -1 ) { // si la planète n'existe pas dans la liste ajouterPlanete(infoPlanete, productionPlaneteCourante, proprietesPlanetes_production, "proprietesPlanetes_production"); } else { // si la planète est déjà dans la liste if (( proprietesPlanetes_production[n_planete][0][1] != infoPlanete[1] ) || ( proprietesPlanetes_production[n_planete][0][2] != infoPlanete[2] ) || ( proprietesPlanetes_production[n_planete][1][0] != productionPlaneteCourante[0] ) || ( proprietesPlanetes_production[n_planete][1][1] != productionPlaneteCourante[1] ) || ( proprietesPlanetes_production[n_planete][1][2] != productionPlaneteCourante[2] )) { // on test si les valeurs des productions+nom+emplacement ont changées proprietesPlanetes_production[n_planete] = new Array(infoPlanete,productionPlaneteCourante); localStorage.setObj(texte.script + "_" + pseudoJeu + "_" + universJeu + "_" + langue + "_proprietesPlanetes_production",proprietesPlanetes_production); affichageAlerte(texte.alerte_proprietesodifiees, 'green'); } } } } if ( url == "shop" ) setInterval(affichageInventaire,500); }).toString(); var script = document.createElement("script"); script.setAttribute("type","text/javascript"); script.text = "(" + strFunc + ")();"; document.body.appendChild(script);
' +''; for (var i=0; i<=2 ; i++) ajoutHTML_1 += ''; ajoutHTML_1 += ''; for (var i=0; i<=2 ; i++) ajoutHTML_1 += ''; ajoutHTML_1 += ''; if (tout) { // si tous les tableaux doivent être affichés ajoutHTML_1 += ''; for (var i=0; i<=2 ; i++) ajoutHTML_1 += ''; ajoutHTML_1 += ''; for (var i=0; i<=2 ; i++) ajoutHTML_1 += ''; ajoutHTML_1 += ''; } ajoutHTML_1 += '
CUMULS DES GAINS
'+affichageTempsCumules[i].split(":")[0] +'
'+affichageTempsCumules[i].split(":")[1] +'
'+ressource[0][i] +'
'+affichageGainBooster[i].ajoutSeparateurMilliers("'")+'
'; for (var i=0; i<=nombre_type_booster+1; i++) { ajoutHTML_2 += ''; if ( i==1 ) ajoutHTML_2 += '"45px">position'; if ( i>=2 ) { var j = nombre_booster.niemeValeurDifferenteDe(i-1,0); ajoutHTML_2 += '"'+ config.prodBooster_largeurColonne +'px">'+ (j-3*Math.ceil((j+1)/3)+4) + '0% '+ ressource[1][Math.floor(j/3)] +'/' + nombre_booster[j] +''; } } ajoutHTML_2 += ''; var maxProd = affichageProdBooster.max_prod(); // Maximum de production entre les planètes for (var i=0; i' + affichageProdBooster[i][0][2].cutLongString(14) + '';; for (var k=0; k<=2; k++) { // k= chaque ressource for (var l=1 ; l<=3 ; l++) { if ( nombre_booster[3*k+l-1] != 0 ) { // le contenu du td est nul si le booster n'est pas dans l'inventaire ajoutHTML_2 += ''; } } } ajoutHTML_2 += ''; } ajoutHTML_2 += '
GAIN SUR 1 SEMAINE
'+ affichageProdBooster.length + "/" + get_nbCol().split("/")[0] + ' planètes
'+ affichageProdBooster[i][0][1] +'