NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name O-Table Retro // @namespace http://tampermonkey.net/ // @version 1.0.2 // @description Créateur OddWH // @author OddWH // @grant GM_addStyle // @grant GM_setValue // @grant GM_getValue // @grant GM_deleteValue // @include *ogame1304.de/game/index.php?page=messages* // @include *ogame1304.de/game/index.php?page=flotten* // ==/UserScript== /* jshint -W097 */ 'use strict'; //Don't forget to update the script version in Version variable //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //ZONE CSS ////////////////////////////////////////////////////////////////////////////////////////////////CSS AREA///////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //some lines are useless in epicblue, but useful in other skins var MetaGlobal = MetaDatas(); var Picture = {}; Picture.Attack = '"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAABGdBTUEAAK/INwWK6QAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAA9QTFRF////ERohKT9OGCQt////xekcDAAAAAF0Uk5TAEDm2GYAAAABYktHRACIBR1IAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAUUlEQVQI1z3O0QnAQAiD4XguoO0CV7qAbfbf7S5Cm6ePHwSBb5a9gG0HICgIphINBcGOK4TMOXTl5Bxkwd3fu0oACcHghdjAST4QVDaMvfi/WNC7CBtD82AsAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE2LTA1LTE4VDIxOjQ5OjM1KzAyOjAwxD15VgAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNi0wNS0xOFQyMTo0OTozNSswMjowMLVgweoAAABKdEVYdHNpZ25hdHVyZQA0MDdjN2E2YTVlZjRkNWEwZmQ3YmYzYTZkMjEzZTQxNTc1ZjVmZmVkMWVhZGEwYjVjY2UyZmM0ZWQ2ZjJjMzY4RTAYDAAAAABJRU5ErkJggg=="'; Picture.Delete = '"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAQAgMAAAC0OM2XAAAABGdBTUEAAK/INwWK6QAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAxQTFRF////ERohGCQt////TqQTdwAAAAF0Uk5TAEDm2GYAAAABYktHRACIBR1IAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAO0lEQVQI12NgAAHR0NAABlEH1gAGAQYgYgwNZWAQcXUJYBBxgREaHR0LMIhVK4AEA8MCBqlVqxaATQIAQGARmtdXRBkAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTYtMDUtMTlUMjE6MjY6MDUrMDI6MDD9ZH7qAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE2LTA1LTE5VDIxOjI2OjA1KzAyOjAwjDnGVgAAAEp0RVh0c2lnbmF0dXJlAGYyMjAyNjVlMzFjYjRjODY3NWI5ZWYxNTU2YTVlNGM5OGMwZTg0OTMwZTc0ZWIxMmQxMDk5NjJkNWJmZWJlZDdTCRapAAAAAElFTkSuQmCC"'; Picture.Message = '"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAABGdBTUEAAK/INwWK6QAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAA9QTFRF////ERoh7RwkGCQt////eP04VgAAAAF0Uk5TAEDm2GYAAAABYktHRACIBR1IAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAUElEQVQI11XOUQrAIAwD0NRcwHmC6QkKuf/dlgpuLB/yiIUWOIkxL6d/aGvNP2LcNWm0KmBE+KMbTInZQQpQprGbAuXCgBwYWRv9Ujv5XvEAY0YJ1r8Dex4AAAAldEVYdGRhdGU6Y3JlYXRlADIwMTYtMDUtMTlUMjE6NDE6MjUrMDI6MDC1KKitAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE2LTA1LTE5VDIxOjQxOjI1KzAyOjAwxHUQEQAAAEp0RVh0c2lnbmF0dXJlADAzOGUzY2E5Nzk3N2Y1NzM0MTM2ZTlkMWVlMTBhYmNmMDBlNjhlMmY3ZjdhNjY2N2M1ZDRlM2Q2Y2M4M2YzMTYencQXAAAAAElFTkSuQmCC"'; Picture.RC = '"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAgMAAABinRfyAAAABGdBTUEAAK/INwWK6QAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAxQTFRF////ERohGCQt////TqQTdwAAAAF0Uk5TAEDm2GYAAAABYktHRACIBR1IAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAATklEQVQI12NgAAHR0NAQBpEQgRAGUQYBEQZRxkAgyyHUhUHU0YWFQdSVlYVBYdWqFQwKizpWMGgwMXAwaDE1ALlaTUBiVdcKBi2QLAgAAAiRD+3F7dwlAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE2LTA2LTEyVDE5OjEwOjA1KzAyOjAwtnczDgAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNi0wNi0xMlQxOToxMDowNSswMjowMMcqi7IAAABKdEVYdHNpZ25hdHVyZQA2NWUxNjAxZWY4MzgwMGVjMmZhOTc0NDIxZTIxZjI2MDU2MWM2MTYwZWY2Nzk5MDA2NGZmZTE4MjU0N2U1NDExqdtWPAAAAABJRU5ErkJggg=="'; GM_addStyle(".InfosVague { border: 1px solid #415680; margin-top: 10px } "); //bord du tableau GM_addStyle(".TableauRaid { text-align: center; width: 100%;} "); //bord du tableau //Ligne d'entête GM_addStyle(".FirstLine { text-align: center; height: 30px; font-weight: bold; border-left: 1px solid #415680; cursor:default; background-color: #000000;} "); //lignes de tête GM_addStyle(".FirstLine:hover { text-align: center; height: 30px; font-weight: bold; border-left: 1px solid #333; cursor:default; background-color: #111117;} "); //lignes de tête //Toutes les lignes à l'intérieur du tableau GM_addStyle(".InsideBoard { text-align: center; border-left: 1px solid #333;} "); //lignes contenant les RE //Lignes spécifiques GM_addStyle(".Line {width: 30px; border-left: 1px solid #222;}"); GM_addStyle(".Coord {height: 21px;}"); GM_addStyle(".PTGT {width: 18px ;}"); //Lignes paires et impaires GM_addStyle("Pair {background-color: #111A21;}"); //lignes paires GM_addStyle("Impair {background-color: #18242d;"); //lignes impaires if ((GM_getValue('color0' + MetaGlobal.Universe))) { //Vérifie la présence de contenu sauvegardé GM_addStyle(".Pair:hover { background-image: linear-gradient(to bottom, #" + GM_getValue('color0' + MetaGlobal.Universe) + " 0%, #111A21 30%, #111A21 70%, #" + GM_getValue('color0' + MetaGlobal.Universe) + " 100%); "); //lignes paires, le get value récupère la couleur enregistrée par l'utilisateur GM_addStyle(".Impair:hover {background-image: linear-gradient(to bottom, #" + GM_getValue('color0' + MetaGlobal.Universe) + " 0%, #111A21 30%, #111A21 70%, #" + GM_getValue('color0' + MetaGlobal.Universe) + " 100%); "); //lignes impaires, le get value récupère la couleur enregistrée par l'utilisateur } else { //Lorsque le getvalue renvoie rien, le style par défaut est appliqué (ça arrive lorsque l'utilisateur n'entre rien ou lorsqu'il n'est pas encore passé dans les options GM_addStyle(".Pair:hover { background-image: linear-gradient(to bottom, #0C8528 0%, #111A21 30%, #111A21 70%, #0C8528 100%); "); //attribution du style par défaut lorsqu'aucune préférence n'est enregistrée GM_addStyle(".Impair:hover { background-image: linear-gradient(to bottom, #0C8528 0%, #18242D 30%, #18242D 70%, #0C8528 100%);}"); //lignes impaires } //Boutons attaque if ((GM_getValue('color1' + MetaGlobal.Universe))) { //Vérifie la présence de contenu sauvegardé, le if fait exactement la même chose que pour les lignes paires et impaires juste au dessus (explications dispo à cet endroit-là) GM_addStyle(".AttackButton:link {display: block; width: 16px; height:16px; background-image: url(" + Picture.Attack + "); background-color: #" + GM_getValue('color1' + MetaGlobal.Universe) + ";}"); GM_addStyle(".RCButton:link {display: block; width: 16px; height:16px; background-image: url(" + Picture.RC + "); background-color: #" + GM_getValue('color1' + MetaGlobal.Universe) + ";}"); } else { GM_addStyle(".AttackButton:link {display: block; width: 16px; height:16px; background-image: url(" + Picture.Attack + "); background-color: #ffffff;}"); GM_addStyle(".RCButton {display: block; width: 16px; height:16px; background-image: url(" + Picture.RC + "); background-color: #FFFFFF;}"); } if ((GM_getValue('color2' + MetaGlobal.Universe))) { GM_addStyle(".AttackButton:hover {background-color: #" + GM_getValue('color2' + MetaGlobal.Universe) +";}"); GM_addStyle(".RCButton:hover {background-color: #" + GM_getValue('color2' + MetaGlobal.Universe) +";}"); } else { GM_addStyle(".AttackButton:hover {background-color: #00ff00;}"); GM_addStyle(".RCButton:hover {background-color: #00ff00;}"); } //Lien Galaxie GM_addStyle(".CoordLink:link, .CoordLink:visited, CoordLink:active, CoordLink:hover {text-decoration: none; color: white;}"); GM_addStyle(".TextDefFleet {text-decoration: none; }"); GM_addStyle(".TextDefFleet:hover {text-decoration: underline; color: white !important; }"); GM_addStyle(".PlayerCell:hover {text-decoration: underline; color: white !important; }"); //Bouton supprimer message et bouton plus de détails GM_addStyle("#DeleteA {display: block; width: 15px; height:16px; background-image: url(" + Picture.Delete + "); background-color: #FFFFFF;}"); GM_addStyle("#MoreDetails:link {display: block; width: 16px; height:16px; background-image: url(" + Picture.Message + "); background-color: #FFFFFF;}"); //Tableau d'entête avec tous les boutons GM_addStyle(".TableButton {text-align: center; width: 100%; cursor:default; margin: 30px 0px 30px 0px; font-size:11px;}"); GM_addStyle(".CaseTableButton {display:inline; border: 1px dashed #444; margin-left: 4px; padding: 5px 3px 5px 3px"); GM_addStyle(".CaseTableButton:hover {display:inline; border: 1px solid #666; margin-left: 4px"); //Tableau des options GM_addStyle("#OptionsDiv { border: 1px solid #555; text-align: center; width: 100%; border-radius: 0px 0px 25px 25px; margin-top: 20px; } "); //bord du tableau GM_addStyle("#OptionsMainTable {background-color : #000000; border: 1px solid #222; width: 100%} "); //bord du tableau GM_addStyle(".OptionsMainLine { text-align: center; border-bottom: 1px solid #222; width: 100%; height: 30px;} "); //Lignes principales à dérouler GM_addStyle(".LastMainLine {text-align: center; width: 100%; height: 30px;} "); //Lignes principales à dérouler GM_addStyle("#SauvegarderOptions {text-align: center; width: 100%; height: 30px; border-bottom: 1px solid #222} "); //Bouton sauvegarder en bas des options GM_addStyle("#SauvegarderOptions:hover {text-align: center; width: 100%; height: 30px; background-image: radial-gradient(ellipse closest-corner at center, #242424 0%, #000000 80%, #000000 80%, #FFFFFF 84%, #000000 100%); color: white;} "); //Bouton sauvegarder en bas des options GM_addStyle(".OptionsColonnes {width: 100%;} "); //Lignes principales à dérouler GM_addStyle(".TableauZoneColonnes {width: 100%; display:inline;}"); //Lignes principales à dérouler GM_addStyle(".OptionsColonnesContent {text-align: left; width: 100%; height: 20px; width: 100%; list-style-type: none;} "); //Lignes principales à dérouler GM_addStyle(".OptionsCouleurs {width: 100%;} "); //Lignes principales à dérouler GM_addStyle(".TableauZoneCouleurs {width: 100%; display:inline;}"); //Lignes principales à dérouler GM_addStyle(".OptionsCouleursContent, .OptionsGlobalesContent, .OptionsTechsContent {text-align: left; width: 100%; height: 20px; width: 100%; list-style-type: none;} "); //Lignes principales à dérouler GM_addStyle(".DropDownShipsMore {text-align:center ;width:100px;}"); function PlayerColor(Message) { switch(Message.PlayerColor) { case "0": GM_addStyle("#PL" + Message.Id + ", #PL" + Message.Id + ":hover {color:#505050;}"); break; case "1": GM_addStyle("#PL" + Message.Id + ", #PL" + Message.Id + ":hover {color:#808080;}"); break; case "2": GM_addStyle("#PL" + Message.Id + ", #PL" + Message.Id + ":hover {color:#ffffff;}"); break; case "3": GM_addStyle("#PL" + Message.Id + ", #PL" + Message.Id + ":hover {color:#ffff00;}"); break; case "4": GM_addStyle("#PL" + Message.Id + ", #PL" + Message.Id + ":hover {color:#ff00ff;}"); break; case "5": GM_addStyle("#PL" + Message.Id + ", #PL" + Message.Id + ":hover {color:#00ffff;}"); break; case "6": GM_addStyle("#PL" + Message.Id + ", #PL" + Message.Id + ":hover {color:#00ff00;}"); break; case "7": GM_addStyle("#PL" + Message.Id + ", #PL" + Message.Id + ":hover {color:#ff0000;}"); break; } } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //FONCTION D-AFFICHAGE DU SCRIPT////////////////////////////////////////////////////////DISPLAY BOARD FUNCTIONS///////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function Display() //Cette fonction génère les boutons du haut { var MetaLocal = MetaDatas(); var DisplayButton = document.createElement("div"); //Création d'un élément div DisplayButton.innerHTML = BoardButton(); //Appel de la fonction affichant les boutons du dessus document.querySelectorAll("tbody")[4].insertBefore(DisplayButton, document.querySelectorAll("tbody")[4].firstChild); //Affichage des boutons //Assignation des fonctions des boutons document.getElementById('AfficherTableau').addEventListener("click", function(event) //Création du bouton permettant l'affichage du tableau { InitialisationTableau('',1); //1 = show not deleted spy reports }, true); document.getElementById('CollecterMessages').addEventListener("click", function(event) //Création du bouton permettant la collecte et la sauvegarde des messages { CollectAndStoreRE(); }, true); document.getElementById('MasquerTableau').addEventListener("click", function(event) //Création du bouton permettant la collecte et la sauvegarde des messages { try {//Permet d'effacer le tableau s'il est déjà présent var Empty = ''; var Table = document.querySelector(".InfosVague"); if(Table.outerHTML) { Table.outerHTML = Empty; setTimeout(function() { GM_addStyle("#AfficherTableau { color: inherit;}");}, 10); //Recolorie le bouton afficher dans sa couleur d'origine } TriDone = 0; // Réinisialise le tri à 0 (afin de pouvoir trier à nouveau le tableau automatiquement) -- cette variable passe à 1 lorsque l'utilisateur clique sur un des boutons de tri, ce qui empêche le tableau de se retrier tout seul à ce moment là } catch(err) {} try {//Permet d'effacer le tableau d'informations s'il est déjà présent var Empty = ''; var Table = document.querySelector("#DIVINFO"); if(Table.outerHTML) { Table.outerHTML = Empty; } } catch(err) {} }, true); document.getElementById('OptionsButton').addEventListener("click", function(event) //Création du bouton permettant la collecte et la sauvegarde des messages { OptionsButton(); }, true); document.getElementById('Empty').addEventListener("click", function(event) //Création du bouton permettant la collecte et la sauvegarde des messages { EmptyTable(); }, true); //Si l'utilisateur a choisi de collecter automatiquement les REs, alors on les collecte if (GM_getValue('column22' + MetaLocal.Universe) === true) { CollectAndStoreRE(); } //Si l'utilisateur a choisi d'afficher automatiquement le tableau, alors on l'affiche if (GM_getValue('column21' + MetaLocal.Universe) === true) { InitialisationTableau('',1); //1 = show not deleted spy reports } } ////////////// //Fonction de création des boutons du tableau ///////////// function BoardButton() { var LangueIndex = GetLangue(); var TableauBoutons = '<div class ="TableButton">' + '<ul class ="LigneTableButton">' + '<li class ="CaseTableButton" id="AfficherTableau" title="' + Langue.BoutonAfficherTableauTITLE.split("|||")[LangueIndex] + '"> { ' + Langue.BoutonAfficherTableau.split("|||")[LangueIndex] + ' }</td>' + '<li class ="CaseTableButton" id="CollecterMessages" title="' + Langue.BoutonCollecterMessagesTITLE.split("|||")[LangueIndex] + '"> { ' + Langue.BoutonCollecterMessages.split("|||")[LangueIndex] + ' }</td>' + '<li class ="CaseTableButton" id="MasquerTableau" title="' + Langue.BoutonMasquerTableauTITLE.split("|||")[LangueIndex] + '"> { ' + Langue.BoutonMasquerTableau.split("|||")[LangueIndex] + ' }</td>' + '<li class ="CaseTableButton" id="OptionsButton" title="' + Langue.BoutonOptionsTITLE.split("|||")[LangueIndex] + '"> { ' + Langue.BoutonOptions.split("|||")[LangueIndex] + ' }</td>' + '<li class ="CaseTableButton" id="Empty" title="' + Langue.BoutonViderScriptTITLE.split("|||")[LangueIndex] + '"> { ' + Langue.BoutonViderScript.split("|||")[LangueIndex] + ' }</td>' + //'<li class ="CaseTableButton"></td>' + '</ul></div>'; return TableauBoutons; } /////////////////////////// function InitialisationTableau(TableauRE,DisplayWhat) { if (GetStoredRE(0)) { //Vérifie la présence de RE dans le tableau et n'affiche pas le tableau si rien n'est trouvé ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// try {//Permet d'effacer le tableau s'il est déjà présent var Empty = ''; var Table = document.querySelector(".InfosVague"); if(Table.outerHTML) { Table.outerHTML = Empty; } } catch(err) { } try {//Permet d'effacer le tableau d'informations s'il est déjà présent var Empty = ''; var Table = document.querySelector("#DIVINFO"); if(Table.outerHTML) { Table.outerHTML = Empty; } } catch(err) {} try {//Permet d'effacer le tableau d'options s'il est déjà présent var Empty = ''; var Table = document.querySelector("#OptionsDiv"); if(Table.outerHTML) { Table.outerHTML = Empty; } } catch(err) {} ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// GM_addStyle("#AfficherTableau {color : #FFAA00;}"); //Colorie le bouton en orange pour indiquer que l'affichage est en cours d'execution //Tri du tableau, vérifie si celui-ci a déja été trié ou non (TriDone passe à 1 lorsqu'un tri par l'utilisateur a été effectué) if (TriDone === 0) { TableauRE = MsgBoard(); TableauRE.sort(Tri); GM_addStyle("#" + currentSort + " {color: #00FF00; background-color: #051505;} "); //Colorize selected line to sort the board } TriDone = 0; var NbItemsTableau = TableauRE.length; var MetaLocal = MetaDatas(); //alert(NbItemsTableau); var DisplayInfos = 0; if (GM_getValue('column17' + MetaLocal.Universe) === false || GM_getValue('column17' + MetaLocal.Universe) === true) { //Vérifie si l'utilisateur a choisi d'afficher le tableau d'infos (je sais, l'id dans get value n'est pas explicite) -- Par défaut, le tableau s'affiche if (GM_getValue('column17' + MetaLocal.Universe) === true) { DisplayInfos = 1; } } else { DisplayInfos = 1 } if (DisplayInfos == 1) { var TableauHTMLInfo = InfoDatasBoard(TableauRE); //Tableau d'infos var newElementA = document.createElement("div"); newElementA.innerHTML = TableauHTMLInfo; document.querySelector(".TableButton:first-child").insertBefore(newElementA, document.querySelector(".TableButton:first-child").nextSibling); } var TableauHTML = CreateBoardHTML(TableauRE,DisplayWhat); //Tableau de pillage var Design = TableauHTML; var newElement = document.createElement("div"); // On crée un nouvelle élément div newElement.innerHTML = Design; // On écrit le code source qu'il contient document.querySelector(".TableButton:first-child").insertBefore(newElement, document.querySelector(".TableButton:first-child").nextSibling); GM_addStyle("#AfficherTableau { color: #00FF00;}");//Indique à l'utilisateur que le tableau s'est bien executé en passant la couleur du texte du bouton "afficher tableau" en vert //Boutons présents à l'intérieur du tableau////////////////////////////////////////////////////////////////////////////////////////////////// ////Bouton suppression de chaque ligne for (var i=0; i < NbItemsDisplayed; i++){ try { document.querySelectorAll('#DeleteButton')[i].addEventListener("click", function(event) { var IdLine = this.parentNode.id; this.parentNode.style.display='none'; //Suppression de l'affichage de la ligne var TextStoredLine = GetStoredRE(IdLine); var ObjLine = ConvertStringToObj(TextStoredLine); ObjLine.Display = 0; SetStoredRE(IdLine, ObjLine); }, true); } catch(err) { } try { document.querySelectorAll('#AttackPTButton')[i].addEventListener("click", function(event) { //AttackButton small cargo var PtAttacked = 1; var IdLine = this.parentNode.id; var TextStoredLine = GetStoredRE(IdLine); var ObjLine = ConvertStringToObj(TextStoredLine); ObjLine.PTAttacked = 1; //Mise en mémoire permettant de d'enregistrer en dur que le bouton a été cliqué SetStoredRE(IdLine, ObjLine); if ((GM_getValue('color3' + MetaLocal.Universe))) { GM_addStyle("#PT" + IdLine + ".AttackButton:visited, #PT" + IdLine + ".AttackButton:active { background-color: #" + GM_getValue('color3' + MetaLocal.Universe) + ";}"); //Cette ligne CSS s'applique uniquement lorsque l'utilisateur clique sur le bouton et permet d'afficher sur le tableau que le bouton a été cliqué. Elle ne permet pas de mise ne mémoire et vu qu'à chaque rafraichissement, il faut recliquer sur le bouton pour l'activer, il n'y a pas de mise en mémoire des liens cliqués à proprement parler. } else { GM_addStyle("#PT" + IdLine + ".AttackButton:visited, #PT" + IdLine + ".AttackButton:active { background-color: #00ff00;}"); } }, true); } catch(err){ } try { document.querySelectorAll('#AttackGTButton')[i].addEventListener("click", function(event) { //AttackButton heavy cargo var GtAttacked = 1; var IdLine = this.parentNode.id; var TextStoredLine = GetStoredRE(IdLine); var ObjLine = ConvertStringToObj(TextStoredLine); ObjLine.GTAttacked = 1; //Mise en mémoire permettant de d'enregistrer en dur que le bouton a été cliqué SetStoredRE(IdLine, ObjLine); if ((GM_getValue('color3' + MetaLocal.Universe))) { //If de vérification de présence d'une donnée dans color3 (fonctionne comme les lignes paires et impaires dans la zone css GM_addStyle("#GT" + IdLine + ".AttackButton:visited, #GT" + IdLine + ".AttackButton:active { background-color: #" + GM_getValue('color3' + MetaLocal.Universe) + ";}"); //Cette ligne CSS s'applique uniquement lorsque l'utilisateur clique sur le bouton et permet d'afficher sur le tableau que le bouton a été cliqué. Elle ne permet pas de mise ne mémoire et vu qu'à chaque rafraichissement, il faut recliquer sur le bouton pour l'activer, il n'y a pas de mise en mémoire des liens cliqués à proprement parler. } else { GM_addStyle("#GT" + IdLine + ".AttackButton:visited, #GT" + IdLine + ".AttackButton:active { background-color: #00ff00;}"); } }, true); } catch(err){ } try { document.querySelectorAll('#RecycleRCButton')[i].addEventListener("click", function(event) { //attackbutton recycleurs var RCRecycled = 1; var IdLine = this.parentNode.id; var TextStoredLine = GetStoredRE(IdLine); var ObjLine = ConvertStringToObj(TextStoredLine); ObjLine.RCRecycled = 1; //Mise en mémoire permettant de d'enregistrer en dur que le bouton a été cliqué SetStoredRE(IdLine, ObjLine); if ((GM_getValue('color3' + MetaLocal.Universe))) { //If de vérification de présence d'une donnée dans color3 (fonctionne comme les lignes paires et impaires dans la zone css GM_addStyle("#RC" + IdLine + ".RCButton:visited, #RC" + IdLine + ".RCButton:active { background-color: #" + GM_getValue('color3' + MetaLocal.Universe) + ";}"); //Cette ligne CSS s'applique uniquement lorsque l'utilisateur clique sur le bouton et permet d'afficher sur le tableau que le bouton a été cliqué. Elle ne permet pas de mise ne mémoire et vu qu'à chaque rafraichissement, il faut recliquer sur le bouton pour l'activer, il n'y a pas de mise en mémoire des liens cliqués à proprement parler. } else { GM_addStyle("#RC" + IdLine + ".RCButton:visited, #RC" + IdLine + ".RCButton:active { background-color: #00ff00;}"); } }, true); } catch(err){ } try { document.querySelectorAll('.PlayerCell')[i].addEventListener("click", function(event) { //send probes when you click on spy report player name var IdLine = this.parentNode.id; var TextStoredLine = GetStoredRE(IdLine); var ObjLine = ConvertStringToObj(TextStoredLine); GM_addStyle("#PL" + IdLine + ", #PL" + IdLine + ":hover {text-decoration:underline; color:#FFBF00}"); setTimeout(function() { GM_addStyle("#PL" + IdLine + " { text-decoration:initial;}"); GM_addStyle("#PL" + IdLine + ":hover { text-decoration:underline;}"); PlayerColor(ObjLine);}, 1000); //Recolorie l'âge dans ses paramètres d'origine, d'origine //put back age to its original settings, helps the user to know when it's the best time to launch probes again (avoid spy errors) }, true); } catch(err){ } } NbItemsDisplayed = 0; //Réinitialisation de cette variable, sinon le montant s'additionne à l'ancien et ça génère des erreurs sur les boutons attaque GT, PT et sur le bouton supprimer de chaque RE. Ces erreurs empêchent de pouvoir trier le tableau une seconde fois ou de trier lorsque l'on affiche le tableau sur une autre page de message. //Boutons d'entête du tableau (boutons permettant de trier le tableau par renta, par pseudo, ou autre) for (var j=0; j < NbColumnsDisplayed; j++){ try { document.querySelectorAll('.FirstLine')[j].addEventListener("click", function(event) { var PairImpair = 1; //Variable permettant de faire un tri dans un ordre ou dans l'autre if (GM_getValue('PairImpair' + MetaLocal.Universe)) { PairImpair = GM_getValue('PairImpair' + MetaLocal.Universe); } TriDone = 1; GM_addStyle("#" + currentSort + ", #" + currentID + " {color: #ffffff !important; background-color: #000000 !important;} "); //Colorize selected line to sort the board currentID = this.id; //alert(currentID); var TableauRESec = MsgBoard(); //tri d'un sens ou d'un autre (en fonction de PairImpair) if (PairImpair % 2 === 0) { GM_addStyle("#" + currentID + " {color: #00FF00 !important; background-color: #051505 !important;} "); //Colorize selected line to sort the board TableauRESec.sort(function (a,b) { if (a[currentID] < b[currentID]) return 1; if (a[currentID] > b[currentID]) return -1; return 0; }); } else { GM_addStyle("#" + currentID + " {color: #FF3010 !important; background-color: rgba(255,0,0,0.1) !important;} "); //Colorize selected line to sort the board TableauRESec.sort(function (a,b) { if (a[currentID] > b[currentID]) return 1; if (a[currentID] < b[currentID]) return -1; return 0; }); } PairImpair = PairImpair + 1; GM_setValue('PairImpair' + MetaLocal.Universe, PairImpair); InitialisationTableau(TableauRESec,DisplayWhat); }, true); } catch(err) { } } } //Fin du if qui vérifie la présence d'un message }//Fin de la fonction //Fonction de création du tableau HTML function CreateBoardHTML(DatasMsg,DisplayWhat) //mettre un second attribut qui définira si la création concerne la corbeille ou le vrai tableau *-* { var LangueIndex = GetLangue(); //Définit la langue et quelle langue appliquer en fonction de l'utilisateur ou de la langue de l'univers //Toutes les variables ci dessous récupèrent les options dans la partie "affichage des colonnes" des options (fonction OptionsButton) var DisplayLeftLine = true; var DisplayRightLine = false; var DisplayCoord = true; var DisplayMetal = false; var DisplayCristal = false; var DisplayDeut = false; var DisplayTotal = false; var DisplayButinRatio = false; var DisplayFlotte = true; var DisplayDefense = true; var DisplayLoot = true; var DisplayLootUSM = false; var DisplayPlayer = true; var DisplayLinkPT = true; var DisplayLinkGT = true; var DisplayLinkRC = true; var DisplayHour = true; var DisplayDelete = true; var DisplayTravelTime = false; var DisplayArrivalTime = false; var DisplayBackTime = false; var DisplayProfitsHour = false; var TextTravelTime = Langue.RETimeTravel.split("|||")[LangueIndex]; var TextColProfitsHr = Langue.RELootHour.split("|||")[LangueIndex]; var USMHr = ''; //Helps to define profits per hour USM id line in the board var DisplayCoorsdToTravel = false; //Debug column, not activable with script options. Put this variable to true to activate the column. var MetaLocal = MetaDatas(); if (GM_getValue('column0' + MetaLocal.Universe) === false || GM_getValue('column0' + MetaLocal.Universe) === true) { //Si une valeur a été enregistrée /// DisplayLeftLine = GM_getValue('column0' + MetaLocal.Universe); DisplayRightLine = GM_getValue('column1' + MetaLocal.Universe); DisplayCoord = GM_getValue('column2' + MetaLocal.Universe); DisplayMetal = GM_getValue('column3' + MetaLocal.Universe); DisplayCristal = GM_getValue('column4' + MetaLocal.Universe); DisplayDeut = GM_getValue('column5' + MetaLocal.Universe); DisplayTotal = GM_getValue('column6' + MetaLocal.Universe); DisplayButinRatio = GM_getValue('column7' + MetaLocal.Universe); DisplayFlotte = GM_getValue('column8' + MetaLocal.Universe); DisplayDefense = GM_getValue('column9' + MetaLocal.Universe); DisplayLoot = GM_getValue('column10' + MetaLocal.Universe); DisplayLootUSM = GM_getValue('column23' + MetaLocal.Universe); DisplayPlayer = GM_getValue('column11' + MetaLocal.Universe); DisplayLinkPT = GM_getValue('column12' + MetaLocal.Universe); DisplayLinkGT = GM_getValue('column13' + MetaLocal.Universe); DisplayLinkRC = GM_getValue('column25' + MetaLocal.Universe); DisplayHour = GM_getValue('column14' + MetaLocal.Universe); DisplayDelete = GM_getValue('column15' + MetaLocal.Universe); DisplayTravelTime = GM_getValue('column26' + MetaLocal.Universe); DisplayArrivalTime = GM_getValue('column27' + MetaLocal.Universe); DisplayBackTime = GM_getValue('column28' + MetaLocal.Universe); DisplayProfitsHour = GM_getValue('column29' + MetaLocal.Universe); //To know the line title of travel time if (GM_getValue('radio0' + MetaLocal.Universe) === true) { TextTravelTime = Langue.RETimeTravel.split("|||")[LangueIndex] } else { if (GM_getValue('radio1' + MetaLocal.Universe) === true) { TextTravelTime = Langue.RETimeTravelAR.split("|||")[LangueIndex] } } //To know the line title of profits/hour column if (GM_getValue('radio10' + MetaLocal.Universe) === true) { //standard TextColProfitsHr = Langue.RELootHour.split("|||")[LangueIndex] + '<br />' + Langue.Brut.split("|||")[LangueIndex]; } else { if (GM_getValue('radio11' + MetaLocal.Universe) === true) { //MSU TextColProfitsHr = Langue.RELootHour.split("|||")[LangueIndex] + '<br />' + Langue.USM.split("|||")[LangueIndex]; USMHr = "USM"; } } /// } NbColumnsDisplayed = (DisplayLeftLine+DisplayRightLine+DisplayCoord+DisplayMetal+DisplayCristal+DisplayDeut+DisplayTotal+DisplayButinRatio+DisplayFlotte+DisplayDefense+DisplayLoot+DisplayLootUSM+DisplayPlayer+DisplayLinkPT+DisplayLinkGT+DisplayHour+DisplayDelete+DisplayTravelTime+DisplayArrivalTime+DisplayBackTime+DisplayProfitsHour); //alert(DisplayLeftLine+'.'+DisplayRightLine+'.'+DisplayCoord+'.'+DisplayMetal+'.'+DisplayCristal+'.'+DisplayDeut+'.'+DisplayTotal+'.'+DisplayButinRatio+'.'+DisplayFlotte+'.'+DisplayDefense+'.'+DisplayLoot+'.'+DisplayLootUSM+'.'+DisplayPlayer+'.'+DisplayLinkPT+'.'+DisplayLinkGT+'.'+DisplayHour+'.'+DisplayDelete+'.'+DisplayMoreDetails+'.'+DisplayTravelTime+'.'+DisplayArrivalTime+'.'+DisplayBackTime+'.'+DisplayProfitsHour); if (isNaN(NbColumnsDisplayed) === true) { //This is to avoid migration issues (when NbColumnsDisplayed is NotaNumber, it's impossible to sort the board by the head) NbColumnsDisplayed = 100; } //Récupération de la valeur choisie par l'utilisateur pour le non affichage des lignes selon certains critères if (GM_getValue('text5' + MetaLocal.Universe)) { //Vérifie la présence d'une donnée sauvegardée --------------- FLOTTE var FlotteMaxi = parseInt(GM_getValue('text5' + MetaLocal.Universe)); } else { //Si aucune donnée sauvegardée, attribution d'une valeur par défaut var FlotteMaxi = 999999999999; } if (GM_getValue('text6' + MetaLocal.Universe)) { //Vérifie la présence d'une donnée sauvegardée ------------------- DEFENSE var DefenseMaxi = parseInt(GM_getValue('text6' + MetaLocal.Universe)); } else { //Si aucune donnée sauvegardée, attribution d'une valeur par défaut var DefenseMaxi = 999999999999; } if (GM_getValue('text7' + MetaLocal.Universe)) { //Vérifie la présence d'une donnée sauvegardée ------------------- AGE var AgeMaxi = parseInt(GM_getValue('text7' + MetaLocal.Universe)); } else { //Si aucune donnée sauvegardée, attribution d'une valeur par défaut var AgeMaxi = 999; } if (GM_getValue('text28' + MetaLocal.Universe)) { //Vérifie la présence d'une donnée sauvegardée ------------------- MINIMAL AMOUNT OF RESOURCES var RessMin = parseInt(GM_getValue('text28' + MetaLocal.Universe)); } else { //Si aucune donnée sauvegardée, attribution d'une valeur par défaut var RessMin = 0; } //To know if the user want to combine resources or just resources (used for the feature "hide a spy report if resources are less than....") //Used to get the propriety name to use to compare spy reports var ResOrResCDR = 'Loot'; if (GM_getValue('radio12' + MetaLocal.Universe) === true) { //only resources selected if (GM_getValue('radio14' + MetaLocal.Universe) === true) { //Standard resources ResOrResCDR = 'Loot'; } else { if (GM_getValue('radio15' + MetaLocal.Universe) === true) { //MSU resources ResOrResCDR = 'USMPille'; } } } else { if (GM_getValue('radio13' + MetaLocal.Universe) === true) { //resources + debris field if (GM_getValue('radio14' + MetaLocal.Universe) === true) { //Standard resources ResOrResCDR = 'TotalCDRRes'; } else { if (GM_getValue('radio15' + MetaLocal.Universe) === true) { //MSU resources ResOrResCDR = 'TotalCDRResUSM'; } } } } //Récupération du choix utilisateur pour : ouvrir les attaques dans un nouvel onglet if (GM_getValue('column20' + MetaLocal.Universe) === false) { var NewOnglet = ''; } else { var NewOnglet = 'target="_blank"'; } //Récupération du choix utilisateur pour la taille du texte et application d'un style CSS //get user choice for text size and applies CSS style if (GM_getValue('DropDown2' + MetaLocal.Universe)) { //Vérifie la présence d'une donnée sauvegardée ------------------- AGE var TextSize = parseInt(GM_getValue('DropDown2' + MetaLocal.Universe)); } else { //Si aucune donnée sauvegardée, attribution d'une valeur par défaut var TextSize = 70; //Default value is 70 as 70 = 100 on epic blue (???) } var NbItems = DatasMsg.length; //alert(DisplayMoreDetails); //alert(NbItems + ' items html à créer'); var PT = "PT"; var GT = "GT"; var NumeroLigneDisplayed = 0; //Numéro de ligne affiché sur le tableau var ColumnTravelTimeTitle = ''; var ColumnTravelTime = ''; //Première ligne du tableau var Board = '<div class ="InfosVague"><table class ="TableauRaid">' + DisplayColumn(DisplayLeftLine, '<th class ="FirstLine" id="Id" style="font-size: ' + TextSize + '% !important;">' + Langue.RELine.split("|||")[LangueIndex] + '</th>') + DisplayColumn(DisplayCoord, '<th class ="FirstLine" id="RawCoord" style="font-size: ' + TextSize + '% !important;">' + Langue.RECoords.split("|||")[LangueIndex] + '</th>') + DisplayColumn(DisplayPlayer, '<th class ="FirstLine" id="PlayerMin" style="font-size: ' + TextSize + '% !important;">(<span style="color:#ff8080">Act</span>) ' + Langue.REPlanet.split("|||")[LangueIndex] + '</th>')+ DisplayColumn(DisplayHour, '<th class ="FirstLine" id="AgeSec" style="font-size: ' + TextSize + '% !important;">' + Langue.REAge.split("|||")[LangueIndex] + '</th>')+ DisplayColumn(DisplayTravelTime, '<th class ="FirstLine" id="TempsTrajetPT" style="font-size: ' + TextSize + '% !important;">' + TextTravelTime + '</th>')+ DisplayColumn(DisplayArrivalTime, '<th class ="FirstLine" id="HeureArriveePTRaw" style="font-size: ' + TextSize + '% !important;">' + Langue.HeureArrivee.split("|||")[LangueIndex] + '</th>')+ DisplayColumn(DisplayBackTime, '<th class ="FirstLine" id="HeureRetourPTRaw" style="font-size: ' + TextSize + '% !important;">' + Langue.HeureRetour.split("|||")[LangueIndex] + '</th>')+ DisplayColumn(DisplayMetal, '<th class ="FirstLine" id="MetalPille" style="font-size: ' + TextSize + '% !important;">' + Langue.REMetal.split("|||")[LangueIndex] + '</th>')+ DisplayColumn(DisplayCristal, '<th class ="FirstLine" id="CristalPille" style="font-size: ' + TextSize + '% !important;">' + Langue.RECristal.split("|||")[LangueIndex] + '</th>') + DisplayColumn(DisplayDeut, '<th class ="FirstLine" id="DeuteriumPille" style="font-size: ' + TextSize + '% !important;">' + Langue.REDeut.split("|||")[LangueIndex] + '</th>') + DisplayColumn(DisplayTotal, '<th class ="FirstLine" id="Total" style="font-size: ' + TextSize + '% !important;">' + Langue.RETotal.split("|||")[LangueIndex] + '</th>') + DisplayColumn(DisplayLoot, '<th class ="FirstLine" id="Loot" style="font-size: ' + TextSize + '% !important;">' + Langue.RELoot.split("|||")[LangueIndex] + '</th>') + DisplayColumn(DisplayLootUSM, '<th class ="FirstLine" id="USMPille" style="font-size: ' + TextSize + '% !important;">' + Langue.RELootUSM.split("|||")[LangueIndex] + '</th>') + DisplayColumn(DisplayProfitsHour, '<th class ="FirstLine" id="ProfitsPerHour' + USMHr + '" style="font-size: ' + TextSize + '% !important;">' + TextColProfitsHr + '</th>') + DisplayColumn(DisplayButinRatio, '<th class ="FirstLine" id="Butin" style="font-size: ' + TextSize + '% !important;">' + Langue.REButinRatio.split("|||")[LangueIndex] + '</th>') + DisplayColumn(DisplayFlotte, '<th class ="FirstLine" id="FlotteFinal" style="font-size: ' + TextSize + '% !important;">' + Langue.REFlotte.split("|||")[LangueIndex] + '</th>') + DisplayColumn(DisplayDefense, '<th class ="FirstLine" id="DefenseFinal" style="font-size: ' + TextSize + '% !important;">' + Langue.REDefense.split("|||")[LangueIndex] + '</th>') + DisplayColumn(DisplayLinkPT, '<th class ="FirstLine" id="NbPT" style="font-size: ' + TextSize + '% !important;">' + Langue.PT.split("|||")[LangueIndex] + '</th>') + DisplayColumn(DisplayLinkGT, '<th class ="FirstLine" id="NbGT" style="font-size: ' + TextSize + '% !important;">' + Langue.GT.split("|||")[LangueIndex] + '</th>') + DisplayColumn(DisplayLinkRC, '<th class ="FirstLine" id="TotalRC" style="font-size: ' + TextSize + '% !important;">' + Langue.RC.split("|||")[LangueIndex] + '</th>') + DisplayColumn(DisplayDelete, '<th class ="FirstLine"></th>') + DisplayColumn(DisplayRightLine, '<th class ="FirstLine" id="Id" style="font-size: ' + TextSize + '% !important;">' + Langue.RELine.split("|||")[LangueIndex] + '</th>') + DisplayColumn(DisplayCoorsdToTravel, '<th class ="FirstLine" id="Id" style="font-size: ' + TextSize + '% !important;"> Travelled coords </th>');//DEBUG LINE, not activable via options. To activate it, put a true in "DisplayCoorsdToTravel" // Données du tableau for (var j = 0; j < NbItems; j++){ if (DatasMsg[j].Display == DisplayWhat) { //remplacer le 1 par une variable envoyée sur la fonction (lorque l'on affiche la corbeille, display doit être à 0 et lorsque l'on affiche le tableau standard, display doit être à 1 if (DatasMsg[j].FlotteFinal <= FlotteMaxi) { //Vérifie si la flotte du RE est inférieur au montant maximum souhaité par l'utilisateur if (DatasMsg[j].DefenseFinal <= DefenseMaxi) {//Vérifie si la défense du RE est inférieur au montant maximum souhaité par l'utilisateur if (DatasMsg[j].AgeSec <= (AgeMaxi*3600)) { //Vérifie si l'âge du RE est inférieur au montant maximum souhaité par l'utilisateur if (DatasMsg[j][ResOrResCDR] >= (RessMin)) { //Checks if the spy reports has more resources than the minimum wished by user (default value is 0, standard resources without debris field --> Loot) NumeroLigneDisplayed = NumeroLigneDisplayed + 1; NbItemsDisplayed = NbItemsDisplayed + 1; //BEGIN SPY REPORT TABLE///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// var Row =DisplayColumn(DisplayLeftLine, '<td class ="InsideBoard Line tooltipRight" style="font-size: ' + TextSize + '% !important;"' + DatasMsg[j].LineColor + NumeroLigneDisplayed + '</font></td>') + //Si il n'y a pas de crochet > au bout du TD, c'est car il est inclus dans la propriété LineColor DisplayColumn(DisplayCoord, '<td class ="InsideBoard Coord" style="font-size: ' + TextSize + '% !important;">' + '<a class="CoordLink" href="' + DatasMsg[j].LienGalaxie + '">' + DatasMsg[j].CoordPlanete + " " + DatasMsg[j].Moon + '</a></td>') + DisplayColumn(DisplayPlayer, '<td class ="InsideBoard PlayerCell tooltipRight" style="font-size: ' + (TextSize - 10) + '% !important;" title="' + Langue.Sonder.split("|||")[LangueIndex] + '"><a href="' + DatasMsg[j].LienSonde + '" ' + NewOnglet + '>' + DatasMsg[j].Activite + DatasMsg[j].Player + '</a></td>') + DisplayColumn(DisplayHour, '<td class ="InsideBoard" id="AGE' + DatasMsg[j].Id + '" style="font-size: ' + TextSize + '% !important;">' + DatasMsg[j].AgeDisplayed + '</td>') + DisplayColumn(DisplayTravelTime, '<td class ="InsideBoard tooltipRight" id="TRAVTIME' + DatasMsg[j].Id + '" style="font-size: ' + TextSize + '% !important;">' + DatasMsg[j].TempsTrajetDisplayed + '</td>') + DisplayColumn(DisplayArrivalTime, '<td class ="InsideBoard tooltipRight" style="font-size: ' + TextSize + '% !important;">' + DatasMsg[j].HeureArriveeDisplayed.split(" ")[1] + '</td>') + DisplayColumn(DisplayBackTime, '<td class ="InsideBoard tooltipRight" style="font-size: ' + TextSize + '% !important;">' + DatasMsg[j].HeureRetourDisplayed.split(" ")[1] + '</td>') + DisplayColumn(DisplayMetal, '<td class ="InsideBoard" style="font-size: ' + (TextSize - 10) + '% !important;">' + DatasMsg[j].MetalPilleDisplayed + '</td>') + DisplayColumn(DisplayCristal, '<td class ="InsideBoard" style="font-size: ' + (TextSize - 10) + '% !important;">' + DatasMsg[j].CristalPilleDisplayed + '</td>') + DisplayColumn(DisplayDeut, '<td class ="InsideBoard" style="font-size: ' + (TextSize - 10) + '% !important;">' + DatasMsg[j].DeuteriumPilleDisplayed + '</td>') + DisplayColumn(DisplayTotal, '<td class ="InsideBoard" style="font-size: ' + TextSize + '% !important;">' + DatasMsg[j].TotalDisplayed + '</td>') + DisplayColumn(DisplayLoot, '<td class ="InsideBoard tooltipRight" id="LOOT' + DatasMsg[j].Id + '" style="font-size: ' + TextSize + '% !important;" title="[' + DatasMsg[j].MetalPilleDisplayed + ' ' + Langue.REMetal.split("|||")[LangueIndex] + '] [' + DatasMsg[j].CristalPilleDisplayed + ' ' + Langue.RECristal.split("|||")[LangueIndex] + '] [' + DatasMsg[j].DeuteriumPilleDisplayed + ' ' + Langue.REDeut.split("|||")[LangueIndex] + ']">' + DatasMsg[j].LootDisplayed + '</td>') + DisplayColumn(DisplayLootUSM, '<td class ="InsideBoard tooltipRight" id="LOOTUSM' + DatasMsg[j].Id + '" style="font-size: ' + TextSize + '% !important;" title="[' + DatasMsg[j].MetalPilleDisplayed + ' ' + Langue.REMetal.split("|||")[LangueIndex] + '] [' + DatasMsg[j].CristalPilleDisplayed + ' ' + Langue.RECristal.split("|||")[LangueIndex] + '] [' + DatasMsg[j].DeuteriumPilleDisplayed + ' ' + Langue.REDeut.split("|||")[LangueIndex] + ']">' + DatasMsg[j].USMPilleDisplayed + '</td>') + DisplayColumn(DisplayProfitsHour, '<td class ="InsideBoard tooltipRight" id="PH' + DatasMsg[j].Id + '" style="font-size: ' + TextSize + '% !important;" >' + DatasMsg[j].ProfitsPerHourDisplayed + '</td>') + DisplayColumn(DisplayButinRatio, '<td class ="InsideBoard" style="font-size: ' + TextSize + '% !important;">' + DatasMsg[j].Butin + '</td>') + DisplayColumn(DisplayFlotte, '<td class ="InsideBoard tooltipRight" style="font-size: ' + TextSize + '% !important;" title="' + Langue.Simuler.split("|||")[LangueIndex] + DatasMsg[j].GGlider + ' ---- ' + Langue.RECDR.split("|||")[LangueIndex] + ' : ' + DatasMsg[j].CDRFlotteDisplayed + ' --- ' + Langue.Recycleurs.split("|||")[LangueIndex] + ' : ' + DatasMsg[j].CDRFlotteRCDisplayed + '"><a class="TextDefFleet" id="FLT' + DatasMsg[j].Id + '" href="' + DatasMsg[j].Simulation + '" target="_blank">' + DatasMsg[j].FlotteDisplayed + '</a></td>') + DisplayColumn(DisplayDefense, '<td class ="InsideBoard tooltipRight" style="font-size: ' + TextSize + '% !important;" title="' + Langue.Simuler.split("|||")[LangueIndex] + '"><a class="TextDefFleet" id="DEF' + DatasMsg[j].Id + '" href="' + DatasMsg[j].Simulation + '" target="_blank">' + DatasMsg[j].DefenseDisplayed + '</a></td>') + DisplayColumn(DisplayLinkPT, '<td class ="InsideBoard" id="AttackPTButton">' + '<a id="PT' + DatasMsg[j].Id + '" class="AttackButton tooltipRight" title="' + Langue.PT.split("|||")[LangueIndex] + ' : ' + DatasMsg[j].NbPTDisplayed + '" href="' + DatasMsg[j].LienPT + '" ' + NewOnglet + '></a></td>') + //note : ici, certains styles sont appliqués grace à l'id et d'autres grace à la class DisplayColumn(DisplayLinkGT, '<td class ="InsideBoard" id="AttackGTButton">' + '<a id="GT' + DatasMsg[j].Id + '" class="AttackButton tooltipRight" title="' + Langue.GT.split("|||")[LangueIndex] + ' : ' + DatasMsg[j].NbGTDisplayed + '" href="' + DatasMsg[j].LienGT + '" ' + NewOnglet + '></a></td>') + DisplayColumn(DisplayLinkRC, '<td class ="InsideBoard tooltipRight" id="RecycleRCButton" title="' + Langue.Recycler.split("|||")[LangueIndex] + '">' + '<a id="RC' + DatasMsg[j].Id + '"class="RCButton" href="' + DatasMsg[j].LienRC + '" ' + NewOnglet + '></a></td>') + DisplayColumn(DisplayDelete, '<td class ="InsideBoard" id="DeleteButton"><div id="DeleteA"></div>') + DisplayColumn(DisplayRightLine, '<td class ="InsideBoard Line tooltipRight" style="font-size: ' + TextSize + '% !important;" ' + DatasMsg[j].LineColor + NumeroLigneDisplayed + '</font></td>') +//Si il n'y a pas de crochet > au bout du TD, c'est car il est inclus dans la propriété LineColor DisplayColumn(DisplayCoorsdToTravel, '<td class ="InsideBoard Line ">' + DatasMsg[j].Gtraversees + ':' + DatasMsg[j].SStraverses + ':' + DatasMsg[j].Postraversees + '</font></td>') +//DEBUG LINE, not activable via options. To activate it, put a true in "DisplayCoorsdToTravel" '</tr>'; //END OF SPY REPORT TABLE///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Vérification de si la ligne est paire ou impaire et attribution du style CSS correspondant if (NumeroLigneDisplayed % 2 === 0) { Board = Board +'<tr class ="Pair" id="' + DatasMsg[j].Id + '">' + Row; //Board, première partie du code + tr class paire ou impaire + Row (juste au dessus) } else { Board = Board +'<tr class ="Impair" id="' + DatasMsg[j].Id + '">' + Row; //LIGNE A REMETTRE } //Vérification de si les boutons PT ou GT ont déja été cliqués et si c'est le cas, colorisation du bouton en suivant le style css correspondant à l'id+le nom de class de la balise <a> if (DatasMsg[j].PTAttacked == 1){ if ((GM_getValue('color4' + MetaLocal.Universe))) { GM_addStyle("#PT" + DatasMsg[j].Id + ".AttackButton{ background-color: #" + GM_getValue('color4' + MetaLocal.Universe) + ";}"); } else { GM_addStyle("#PT" + DatasMsg[j].Id + ".AttackButton{ background-color: #ff0000;}"); } } if (DatasMsg[j].GTAttacked == 1){ if ((GM_getValue('color4' + MetaLocal.Universe))) { GM_addStyle("#GT" + DatasMsg[j].Id + ".AttackButton{ background-color: #" + GM_getValue('color4' + MetaLocal.Universe) + ";}"); } else { GM_addStyle("#GT" + DatasMsg[j].Id + ".AttackButton{ background-color: #ff0000;}"); } } if (DatasMsg[j].RCRecycled == 1){ if ((GM_getValue('color4' + MetaLocal.Universe))) { GM_addStyle("#RC" + DatasMsg[j].Id + ".RCButton{ background-color: #" + GM_getValue('color4' + MetaLocal.Universe) + ";}"); } else { GM_addStyle("#RC" + DatasMsg[j].Id + ".RCButton{ background-color: #ff0000;}"); } } //Colorisation des textes en fonction des options enregistrées par l'utilisateur (il y a d'abord une vérification de l'enregistrement puis une vérification de si le chiffre est plus important que celui enregistré) Attention : la colorisation aura lieu seulement si l'utilisateur a défni le seuil + la couleur if (GM_getValue('color5' + MetaLocal.Universe)) { if (GM_getValue('text0' + MetaLocal.Universe)) { if (DatasMsg[j].Loot > GM_getValue('text0' + MetaLocal.Universe)) { GM_addStyle("#LOOT" + DatasMsg[j].Id + " { color: #" + GM_getValue('color5' + MetaLocal.Universe) + ";}"); } } } if (GM_getValue('color8' + MetaLocal.Universe)) { if (GM_getValue('text3' + MetaLocal.Universe)) { if ((DatasMsg[j].AgeSec / 3600) > GM_getValue('text3' + MetaLocal.Universe)) { GM_addStyle("#AGE" + DatasMsg[j].Id + " { color: #" + GM_getValue('color8' + MetaLocal.Universe) + ";}"); } } } if (GM_getValue('color6' + MetaLocal.Universe)) { if (GM_getValue('text1' + MetaLocal.Universe)) { try { if (DatasMsg[j].FlotteFinal > parseInt(GM_getValue('text1' + MetaLocal.Universe))) { GM_addStyle("#FLT" + DatasMsg[j].Id + " { color: #" + GM_getValue('color6' + MetaLocal.Universe) + ";}"); } } catch(err) { } } } if (GM_getValue('color7' + MetaLocal.Universe)) { if (GM_getValue('text2' + MetaLocal.Universe)) { try { if (DatasMsg[j].DefenseFinal > parseInt(GM_getValue('text2' + MetaLocal.Universe))) { GM_addStyle("#DEF" + DatasMsg[j].Id + " { color: #" + GM_getValue('color7' + MetaLocal.Universe) + ";}"); } } catch(err) { } } } if (GM_getValue('color10' + MetaLocal.Universe)) { if (GM_getValue('text19' + MetaLocal.Universe)) { try { if (DatasMsg[j].USMPille > parseInt(GM_getValue('text19' + MetaLocal.Universe))) { GM_addStyle("#LOOTUSM" + DatasMsg[j].Id + " { color: #" + GM_getValue('color10' + MetaLocal.Universe) + ";}"); } } catch(err) { } } } if (GM_getValue('color11' + MetaLocal.Universe)) { if (GM_getValue('text27' + MetaLocal.Universe)) { try { if (parseInt(DatasMsg[j].ProfitsPerHourUsed) > parseInt(GM_getValue('text27' + MetaLocal.Universe))) { GM_addStyle("#PH" + DatasMsg[j].Id + " { color: #" + GM_getValue('color11' + MetaLocal.Universe) + ";}"); } } catch(err) { } } } PlayerColor(DatasMsg[j]); } } } } } } Board = Board + '</table></div>'; //alert(Board); return Board; } //Fonction d'affichage des colonnes function DisplayColumn(YesNo, Content) { var FinalContent; if (YesNo) { FinalContent = Content; } else { FinalContent = ''; } return FinalContent; } function InfoDatasBoard(DatasMsg) { GM_addStyle(".TableauInfos { border: 1px solid #415680; text-align: center; width: 100%; margin-top: 15px } "); GM_addStyle(".thTableauInfos { border-left: 1px solid #222; height : 25px;} "); GM_addStyle(".LigneInfoBoard { border-left: 1px solid #222;} "); GM_addStyle(".trinfo1 { background-color: #111A21;}"); //lignes paires GM_addStyle(".trinfo2 { background-color: #18242d;}"); //lignes impaires var i,j,k; //Calcul du nombre de PT, GT, de la renta totale var l,m,n = 0; var FirstWaveSumPT = 0; var SecondWaveSumPT = 0; var ThirdWaveSumPT = 0; var FirstWaveSumGT = 0; var SecondWaveSumGT = 0; var ThirdWaveSumGT = 0; var FirstWaveSumLOOT = 0; var SecondWaveSumLOOT = 0; var ThirdWaveSumLOOT = 0; var FirstWaveSumUSM = 0; var SecondWaveSumUSM = 0; var ThirdWaveSumUSM = 0; var MoyFirstWave = 0; var MoyScndWave = 0; var MoyThirWave = 0; var Msg = 0; var MetaLocal = MetaDatas(); var LangueIndex = GetLangue(); //Définit la langue et quelle langue appliquer en fonction de l'utilisateur ou de la langue de l'univers //Récupération de la valeur choisie par l'utilisateur pour le non affichage des lignes selon certains critères if (GM_getValue('text5' + MetaLocal.Universe)) { //Vérifie la présence d'une donnée sauvegardée --------------- FLOTTE var FlotteMaxi = parseInt(GM_getValue('text5' + MetaLocal.Universe)); } else { //Si aucune donnée sauvegardée, attribution d'une valeur par défaut var FlotteMaxi = 999999999999; } if (GM_getValue('text6' + MetaLocal.Universe)) { //Vérifie la présence d'une donnée sauvegardée ------------------- DEFENSE var DefenseMaxi = parseInt(GM_getValue('text6' + MetaLocal.Universe)); } else { //Si aucune donnée sauvegardée, attribution d'une valeur par défaut var DefenseMaxi = 999999999999; } if (GM_getValue('text7' + MetaLocal.Universe)) { //Vérifie la présence d'une donnée sauvegardée ------------------- AGE var AgeMaxi = parseInt(GM_getValue('text7' + MetaLocal.Universe)); } else { //Si aucune donnée sauvegardée, attribution d'une valeur par défaut var AgeMaxi = 999; } if (GM_getValue('text18' + MetaLocal.Universe)) { //Vérifie la présence d'une donnée sauvegardée ------------------- Nombre de slots par vague var NbSlots = parseInt(GM_getValue('text18' + MetaLocal.Universe)); } else { //Si aucune donnée sauvegardée, attribution d'une valeur par défaut var NbSlots = 20; } if (GM_getValue('column24' + MetaLocal.Universe) === true) { var DisplayUSM = true; } else { var DisplayUSM = false; } for (i = 0; i < NbSlots; i) { //Collecte renta Première vague if (DatasMsg[Msg]) { if (DatasMsg[Msg].Display == 1) { if (DatasMsg[Msg].FlotteFinal < FlotteMaxi) { //Vérifie si la flotte du RE est inférieur au montant maximum souhaité par l'utilisateur if (DatasMsg[Msg].DefenseFinal < DefenseMaxi) {//Vérifie si la défense du RE est inférieur au montant maximum souhaité par l'utilisateur if (DatasMsg[Msg].AgeSec < (AgeMaxi*3600)) { //Vérifie si l'âge du RE est inférieur au montant maximum souhaité par l'utilisateur FirstWaveSumPT = FirstWaveSumPT + DatasMsg[Msg].NbPT; FirstWaveSumGT = FirstWaveSumGT + DatasMsg[Msg].NbGT; FirstWaveSumLOOT = FirstWaveSumLOOT + DatasMsg[Msg].Loot; FirstWaveSumUSM = FirstWaveSumUSM + DatasMsg[Msg].USMPille; i = i + 1; } } } } Msg = Msg + 1; } if (DatasMsg[Msg]) { } else { break; } } l = i; //Colorisation de la ligne de renta si elle dépasse la valeur indiquée par l'utilisateur if (GM_getValue('text4' + MetaLocal.Universe)) { if (FirstWaveSumLOOT > GM_getValue('text4' + MetaLocal.Universe)) { if (GM_getValue('color9' + MetaLocal.Universe)) { GM_addStyle("#Renta1Info {color: #" + GM_getValue('color9' + MetaLocal.Universe) +";}"); } } } MoyFirstWave = FirstWaveSumLOOT / i; for (j = 0; j < NbSlots; j) { //Collecte renta Seconde vague if (DatasMsg[Msg]) { if (DatasMsg[Msg].Display == 1) { if (DatasMsg[Msg].FlotteFinal < FlotteMaxi) { //Vérifie si la flotte du RE est inférieur au montant maximum souhaité par l'utilisateur if (DatasMsg[Msg].DefenseFinal < DefenseMaxi) {//Vérifie si la défense du RE est inférieur au montant maximum souhaité par l'utilisateur if (DatasMsg[Msg].AgeSec < (AgeMaxi*3600)) { //Vérifie si l'âge du RE est inférieur au montant maximum souhaité par l'utilisateur SecondWaveSumPT = SecondWaveSumPT + DatasMsg[Msg].NbPT; SecondWaveSumGT = SecondWaveSumGT + DatasMsg[Msg].NbGT; SecondWaveSumLOOT = SecondWaveSumLOOT + DatasMsg[Msg].Loot; SecondWaveSumUSM = SecondWaveSumUSM + DatasMsg[Msg].USMPille; j = j + 1; } } } } Msg = Msg + 1; } if (DatasMsg[Msg]) { } else { break; } } m = j; if (GM_getValue('text4' + MetaLocal.Universe)) { if (SecondWaveSumLOOT > GM_getValue('text4' + MetaLocal.Universe)) { if (GM_getValue('color9' + MetaLocal.Universe)) { GM_addStyle("#Renta2Info {color: #" + GM_getValue('color9' + MetaLocal.Universe) +";}"); } } } MoyScndWave = SecondWaveSumLOOT / j; for (k = 0; k < NbSlots; k) { //Collecte renta Troisième vague if (DatasMsg[Msg]) { if (DatasMsg[Msg].Display == 1) { if (DatasMsg[Msg].FlotteFinal < FlotteMaxi) { //Vérifie si la flotte du RE est inférieur au montant maximum souhaité par l'utilisateur if (DatasMsg[Msg].DefenseFinal < DefenseMaxi) {//Vérifie si la défense du RE est inférieur au montant maximum souhaité par l'utilisateur if (DatasMsg[Msg].AgeSec < (AgeMaxi*3600)) { //Vérifie si l'âge du RE est inférieur au montant maximum souhaité par l'utilisateur ThirdWaveSumPT = ThirdWaveSumPT + DatasMsg[Msg].NbPT; ThirdWaveSumGT = ThirdWaveSumGT + DatasMsg[Msg].NbGT; ThirdWaveSumLOOT = ThirdWaveSumLOOT + DatasMsg[Msg].Loot; ThirdWaveSumUSM = ThirdWaveSumUSM + DatasMsg[Msg].USMPille; k = k + 1; } } } } Msg = Msg + 1; } if (DatasMsg[Msg]) { } else { break; } } n = k; if (GM_getValue('text4' + MetaLocal.Universe)) { if (ThirdWaveSumLOOT > GM_getValue('text4' + MetaLocal.Universe)) { if (GM_getValue('color9' + MetaLocal.Universe)) { GM_addStyle("#Renta3Info {color: #" + GM_getValue('color9' + MetaLocal.Universe) +";}"); } } } MoyThirWave = ThirdWaveSumLOOT / k; var Board = '<div id="DIVINFO"><table class="TableauInfos">' + '<th class="thTableauInfos"><b>' + Langue.InfoPremiereVague.split("|||")[LangueIndex] + ' </b>(' + l + ' ' + Langue.InfoSlots.split("|||")[LangueIndex] + ')</th>' + '<th class="thTableauInfos"><b>' + Langue.InfoSecondeVague.split("|||")[LangueIndex] + '</b>(' + m + ' ' + Langue.InfoSlots.split("|||")[LangueIndex] + ')</th>' + '<th class="thTableauInfos"><b>' + Langue.InfoTroisiemeVague.split("|||")[LangueIndex] + '</b>(' + n + ' ' + Langue.InfoSlots.split("|||")[LangueIndex] + ')</th>' + '<tr class ="trinfo1"><td class="LigneInfoBoard">' + Langue.PT.split("|||")[LangueIndex] + ' : ' + ThousandSeparator(FirstWaveSumPT) + ' ' + Langue.GT.split("|||")[LangueIndex] + ' : ' + ThousandSeparator(FirstWaveSumGT) + '</td><td class="LigneInfoBoard">' + Langue.PT.split("|||")[LangueIndex] + ' : ' + ThousandSeparator(SecondWaveSumPT) + ' ' + Langue.GT.split("|||")[LangueIndex] + ' : ' + ThousandSeparator(SecondWaveSumGT) + '</td><td class="LigneInfoBoard">' + Langue.PT.split("|||")[LangueIndex] + ' : ' + ThousandSeparator(ThirdWaveSumPT) + ' ' + Langue.GT.split("|||")[LangueIndex] + ' : ' + ThousandSeparator(ThirdWaveSumGT) + '</td>' + '<tr class ="trinfo2"><td class="LigneInfoBoard">' + Langue.InfoRenta.split("|||")[LangueIndex] + ' : <div id="Renta1Info" style="display:inline;">' + ThousandSeparator(FirstWaveSumLOOT) + '</div></td><td class="LigneInfoBoard">' + Langue.InfoRenta.split("|||")[LangueIndex] + ' : <div id="Renta2Info" style="display:inline;">' + ThousandSeparator(SecondWaveSumLOOT) + '</div></td><td class="LigneInfoBoard">' + Langue.InfoRenta.split("|||")[LangueIndex] + ' : <div id="Renta3Info" style="display:inline;">' + ThousandSeparator(ThirdWaveSumLOOT) + '</div></td>' + DisplayColumn(DisplayUSM, '<tr class ="trinfo1"><td class="LigneInfoBoard">' + Langue.InfoRentaUSM.split("|||")[LangueIndex] + ' : <div id="Renta1Info" style="display:inline;">' + ThousandSeparator(FirstWaveSumUSM) + '</div></td><td class="LigneInfoBoard">' + Langue.InfoRentaUSM.split("|||")[LangueIndex] + ' : <div id="Renta2Info" style="display:inline;">' + ThousandSeparator(SecondWaveSumUSM) + '</div></td><td class="LigneInfoBoard">' + Langue.InfoRentaUSM.split("|||")[LangueIndex] + ' : <div id="Renta3Info" style="display:inline;">' + ThousandSeparator(ThirdWaveSumUSM) + '</div></td>') + '<tr class ="trinfo2"><td class="LigneInfoBoard">' + Langue.InfoMoyParSlot.split("|||")[LangueIndex] + ' : <div id="Renta1Info" style="display:inline;">' + ThousandSeparator(parseInt(MoyFirstWave)) + '</div></td><td class="LigneInfoBoard">' + Langue.InfoMoyParSlot.split("|||")[LangueIndex] + ' : <div id="Renta2Info" style="display:inline;">' + ThousandSeparator(parseInt(MoyScndWave)) + '</div></td><td class="LigneInfoBoard">' + Langue.InfoMoyParSlot.split("|||")[LangueIndex] + ' : <div id="Renta3Info" style="display:inline;">' + ThousandSeparator(parseInt(MoyThirWave)) + '</div></td>' + '</tr></table></div>'; return Board } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //FONCTIONS LIEES AUX BOUTONS/////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //Bouton de débug (indique le nombre de messages (et secondes vagues) enregistrés dans le tableau function KnowMessageIndex() { var MetaLocal = MetaDatas(); alert(GM_getValue('MessageIndex' + MetaLocal.Universe, MessageIndex)); } //BOUTON VIDANT LE TABLEAU function EmptyTable() { var Message = {}; var MetaLocal = MetaDatas(); MessageIndex = GM_getValue('MessageIndex'+MetaLocal.Universe, MessageIndex); for (var i = 0; i < MessageIndex + 1; i++){ DelStoredRE(i); } //alert(MessageIndex + ' messages supprimés'); MessageIndex = 0; GM_setValue('MessageIndex'+MetaLocal.Universe, MessageIndex); GM_deleteValue('REIdList'+MetaLocal.Universe, IdMessages); location.reload(); } //BOUTON OPTIONS -- ZONE OPTIONS function OptionsButton() { //Fonction gérant toute la parte options try {//Permet d'effacer le tableau s'il est déjà présent var MetaLocal = MetaDatas(); var Empty = ''; var Table = document.querySelector(".InfosVague"); if(Table.outerHTML) { Table.outerHTML = Empty; } setTimeout(function() { GM_addStyle("#AfficherTableau { color: inherit;}");}, 10); //Recolorie le bouton afficher dans sa couleur d'origine } catch(err) {} try {//Permet d'effacer le tableau d'informations s'il est déjà présent var Empty = ''; var Table = document.querySelector("#DIVINFO"); if(Table.outerHTML) { Table.outerHTML = Empty; } } catch(err) {} try {//Permet d'effacer le tableau d'options s'il est déjà présent var Empty = ''; var Table = document.querySelector("#OptionsDiv"); if(Table.outerHTML) { Table.outerHTML = Empty; } } catch(err) {} var LangueIndex = GetLangue(); //Définit la langue et quelle langue appliquer en fonction de l'utilisateur ou de la langue de l'univers TriDone = 0; //Réinitialise le fait que le tri ait été fait à 0 var ZoneCouleurs = ('<div id="OptionsCouleurs"><table id="TableauZoneCouleurs">' + //Création des options dans la zone couleur '<ul>' + '<li class="OptionsCouleursContent OPT">' + Langue.OptionsCouleurAA.split("|||")[LangueIndex] + ' : <label><input type="text" id="color0" value="0C8528" maxlength="6"></label>' + '<li class="OptionsCouleursContent OPT">' + Langue.OptionsCouleurAB.split("|||")[LangueIndex] + ' : <label><input type="text" id="color1" value="FFFFFF" maxlength="6"></label>' + '<li class="OptionsCouleursContent OPT">' + Langue.OptionsCouleurAC.split("|||")[LangueIndex] + ' : <label><input type="text" id="color2" value="00FF00" maxlength="6"></label>' + '<li class="OptionsCouleursContent OPT">' + Langue.OptionsCouleurAD.split("|||")[LangueIndex] + ' : <label><input type="text" id="color3" value="00FF00" maxlength="6"></label>' + '<li class="OptionsCouleursContent OPT">' + Langue.OptionsCouleurAE.split("|||")[LangueIndex] + ' : <label><input type="text" id="color4" value="FF0000" maxlength="6"></label>' + '<li class="OptionsCouleursContent OPT">' + Langue.OptionsTextesAA.split("|||")[LangueIndex] + ' <label><input type="text" class="BigText" id="text0" value="1000000" maxlength="13"></label>, ' + Langue.OptionsColorierEn.split("|||")[LangueIndex] + ' : <label><input type="text" id="color5" value="00FF00" maxlength="6"></label>' + '<li class="OptionsCouleursContent OPT">' + Langue.OptionsTextesAB.split("|||")[LangueIndex] + ' <label><input type="text" class="BigText" id="text19" value="1000000" maxlength="13"></label>, ' + Langue.OptionsColorierEn.split("|||")[LangueIndex] + ' : <label><input type="text" id="color10" value="00FF00" maxlength="6"></label>' + '<li class="OptionsCouleursContent OPT">' + Langue.OptionsTextesBH.split("|||")[LangueIndex] + ' <label><input type="text" class="BigText" id="text27" value="1000000" maxlength="13"></label>, ' + Langue.OptionsColorierEn.split("|||")[LangueIndex] + ' : <label><input type="text" id="color11" value="00FF00" maxlength="6"></label>' + '<li class="OptionsCouleursContent OPT">' + Langue.OptionsTextesAC.split("|||")[LangueIndex] + ' <label><input type="text" class="BigText" id="text1" value="1000000" maxlength="13"></label>, ' + Langue.OptionsColorierEn.split("|||")[LangueIndex] + ' : <label><input type="text" id="color6" value="FF0000" maxlength="6"></label>' + '<li class="OptionsCouleursContent OPT">' + Langue.OptionsTextesAD.split("|||")[LangueIndex] + ' <label><input type="text" class="BigText" id="text2" value="1000000" maxlength="13"></label>, ' + Langue.OptionsColorierEn.split("|||")[LangueIndex] + ' : <label><input type="text" id="color7" value="FF0000" maxlength="6"></label>' + '<li class="OptionsCouleursContent OPT">' + Langue.OptionsTextesAE.split("|||")[LangueIndex] + ' <label><input type="text" class="SmallText" id="text3" value="2" maxlength="3"></label> heures, ' + Langue.OptionsColorierEn.split("|||")[LangueIndex] + ' : <label><input type="text" id="color8" value="FF0000" maxlength="6"></label>' + '<li class="OptionsCouleursContent OPT">' + Langue.OptionsTextesAF.split("|||")[LangueIndex] + ' <label><input type="text" class="BigText" id="text4" value="17500000" maxlength="10"></label>, ' + Langue.OptionsColorierEn.split("|||")[LangueIndex] + ' : <label><input type="text" id="color9" value="00FF00" maxlength="6"></label>' + '<li class="OptionsCouleursContent OPT">' + '</ul>' + '</table></div>'); var ZoneColonnes = ('<div id="OptionsColonnes"><table id="TableauZoneColonnes">' + //affichage du contenu de la catégorie Affichage des colonnes (1) '<ul>' + '<li class="OptionsColonnesContent OPT"><label><input type="checkbox" id="cbox0">' + Langue.OptionsCBoxAA.split("|||")[LangueIndex] + '</label>' + '<li class="OptionsColonnesContent OPT"><label><input type="checkbox" id="cbox1">' + Langue.OptionsCBoxAB.split("|||")[LangueIndex] + '</label>' + '<li class="OptionsColonnesContent OPT"><label><input type="checkbox" id="cbox2">' + Langue.OptionsCBoxAC.split("|||")[LangueIndex] + '</label>' + '<li class="OptionsColonnesContent OPT"><label><input type="checkbox" id="cbox3">' + Langue.OptionsCBoxAD.split("|||")[LangueIndex] + '</label>' + '<li class="OptionsColonnesContent OPT"><label><input type="checkbox" id="cbox4">' + Langue.OptionsCBoxAE.split("|||")[LangueIndex] + '</label>' + '<li class="OptionsColonnesContent OPT"><label><input type="checkbox" id="cbox5">' + Langue.OptionsCBoxAF.split("|||")[LangueIndex] + '</label>' + '<li class="OptionsColonnesContent OPT"><label><input type="checkbox" id="cbox6">' + Langue.OptionsCBoxAG.split("|||")[LangueIndex] + '</label>' + '<li class="OptionsColonnesContent OPT"><label><input type="checkbox" id="cbox7">' + Langue.OptionsCBoxAH.split("|||")[LangueIndex] + '</label>' + '<li class="OptionsColonnesContent OPT"><label><input type="checkbox" id="cbox8">' + Langue.OptionsCBoxAI.split("|||")[LangueIndex] + '</label>' + '<li class="OptionsColonnesContent OPT"><label><input type="checkbox" id="cbox9">' + Langue.OptionsCBoxAJ.split("|||")[LangueIndex] + ' </label>' + '<li class="OptionsColonnesContent OPT"><label><input type="checkbox" id="cbox10">' + Langue.OptionsCBoxAK.split("|||")[LangueIndex] + '</label>' + '<li class="OptionsColonnesContent OPT"><label><input type="checkbox" id="cbox23">' + Langue.OptionsCBoxAL.split("|||")[LangueIndex] + '</label>' + '<li class="OptionsColonnesContent OPT"><label><input type="checkbox" id="cbox11">' + Langue.OptionsCBoxAM.split("|||")[LangueIndex] + '</label>' + '<li class="OptionsColonnesContent OPT"><label><input type="checkbox" id="cbox12">' + Langue.OptionsCBoxAN.split("|||")[LangueIndex] + '</label>' + '<li class="OptionsColonnesContent OPT"><label><input type="checkbox" id="cbox13">' + Langue.OptionsCBoxAO.split("|||")[LangueIndex] + '</label>' + '<li class="OptionsColonnesContent OPT"><label><input type="checkbox" id="cbox25">' + Langue.OptionsCBoxAS.split("|||")[LangueIndex] + '</label>' + '<li class="OptionsColonnesContent OPT"><label><input type="checkbox" id="cbox14">' + Langue.OptionsCBoxAP.split("|||")[LangueIndex] + '</label>' + '<li class="OptionsColonnesContent OPT"><label><input type="checkbox" id="cbox15">' + Langue.OptionsCBoxAQ.split("|||")[LangueIndex] + '</label>' + '<li class="OptionsColonnesContent OPT"><label><input type="checkbox" id="cbox26">' + Langue.OptionsCBoxAT.split("|||")[LangueIndex] + '</label><form style="display:inline;"> (' + Langue.Aller.split("|||")[LangueIndex] + ' <input id="radio0" type="radio" name="TravBack" checked> ' + Langue.AllerRetour.split("|||")[LangueIndex] + ' <input id="radio1" type="radio" name="TravBack"></form>)<form style="display:inline;"> (' + Langue.PT.split("|||")[LangueIndex] + ' <input id="radio2" type="radio" name="PTGTTRAVTIME" checked> ' + Langue.GT.split("|||")[LangueIndex] + ' <input id="radio3" type="radio" name="PTGTTRAVTIME"></form>)' + '<li class="OptionsColonnesContent OPT"><label><input type="checkbox" id="cbox27">' + Langue.OptionsCBoxAU.split("|||")[LangueIndex] + '</label><form style="display:inline;"> (' + Langue.PT.split("|||")[LangueIndex] + ' <input id="radio4" type="radio" name="ARTIME" checked> ' + Langue.GT.split("|||")[LangueIndex] + ' <input id="radio5" type="radio" name="ARTIME"></form>)' + '<li class="OptionsColonnesContent OPT"><label><input type="checkbox" id="cbox28">' + Langue.OptionsCBoxAV.split("|||")[LangueIndex] + '</label><form style="display:inline;"> (' + Langue.PT.split("|||")[LangueIndex] + ' <input id="radio6" type="radio" name="BATIME" checked> ' + Langue.GT.split("|||")[LangueIndex] + ' <input id="radio7" type="radio" name="BATIME"></form>)' + '<li class="OptionsColonnesContent OPT"><label><input type="checkbox" id="cbox29">' + Langue.OptionsCBoxAW.split("|||")[LangueIndex] + '</label><form style="display:inline;"> (' + Langue.PT.split("|||")[LangueIndex] + ' <input id="radio8" type="radio" name="PTGTHOUR" checked> ' + Langue.GT.split("|||")[LangueIndex] + ' <input id="radio9" type="radio" name="PTGTHOUR"></form>)<form style="display:inline;"> (' + Langue.Brut.split("|||")[LangueIndex] + ' <input id="radio10" type="radio" name="STDMSUHOUR" checked> ' + Langue.USM.split("|||")[LangueIndex] + ' <input id="radio11" type="radio" name="STDMSUHOUR"></form>)' + '<li class="OptionsColonnesContent OPT">' + '</ul>' + '</table></div>'); var ZoneGlobales = ('<div id="OptionsGlobales"><table id="TableauZoneGlobales">' + '<ul>' + '<li class="OptionsGlobalesContent OPT">' + Langue.OptionsOldSchoolAC.split("|||")[LangueIndex] + ' : <label><input type="text" class="SmallText" id="text29" value="5" maxlength="2"></label>' + '<li class="OptionsGlobalesContent OPT">' + Langue.OptionsTextesAG.split("|||")[LangueIndex] + ' <select class="DropDownShipsMore" id="DropDown0" style="visibility:visible"><option value="0"> 0 % </option><option value="5"> 5 % </option><option value="10"> 10 % </option><option value="15"> 15 % </option><option value="20"> 20 % </option><option value="30"> 30 % </option><option value="40"> 40 % </option><option value="50"> 50 % </option><option value="60"> 60 % </option><option value="70"> 70 % </option><option value="80"> 80 % </option><option value="90"> 90 % </option><option value="100"> 100 % </option></select> ' + Langue.OptionsTextesAH.split("|||")[LangueIndex] + '. ' + '<li class="OptionsGlobalesContent OPT">' + Langue.OptionsTextesAI.split("|||")[LangueIndex] + ' <label><input type="text" class="BigText" id="text5" value="999999999999" maxlength="13"></label>' + '<li class="OptionsGlobalesContent OPT">' + Langue.OptionsTextesAJ.split("|||")[LangueIndex] + ' <label><input type="text" class="BigText" id="text6" value="999999999999" maxlength="13"></label>' + '<li class="OptionsGlobalesContent OPT">' + Langue.OptionsTextesBJ.split("|||")[LangueIndex] + '<label><input type="text" class="BigText" id="text28" value="0" maxlength="13"></label><form style="display:inline;">(' + Langue.Ressource.split("|||")[LangueIndex] + '<input id="radio12" type="radio" name="RssCDR" checked>' + Langue.RessourceCDR.split("|||")[LangueIndex] + '<input id="radio13" type="radio" name="RssCDR">)</form><form style="display:inline;">(' + Langue.Brut.split("|||")[LangueIndex] + '<input id="radio14" type="radio" name="HideRESmallSTDUSM" checked>' + Langue.USM.split("|||")[LangueIndex] + '<input id="radio15" type="radio" name="HideRESmallSTDUSM"></form>)' + '<li class="OptionsGlobalesContent OPT">' + Langue.OptionsTextesAK.split("|||")[LangueIndex] + ' <label><input type="text" class="SmallText" id="text7" value="999" maxlength="3"></label> ' + Langue.OptionsTextesAL.split("|||")[LangueIndex] + '' + '<li class="OptionsGlobalesContent OPT">' + Langue.OptionsTextesAM.split("|||")[LangueIndex] + ' : <label><input type="text" class="SmallText" id="text8" value="3" maxlength="4"></label> ' + Langue.OptionsTextesBD.split("|||")[LangueIndex] + ' <label><input type="text" class="SmallText" id="text9" value="2" maxlength="4"></label> ' + Langue.OptionsTextesBE.split("|||")[LangueIndex] + ' <label><input type="text" class="SmallText" id="text10" value="1" maxlength="4"></label> ' + Langue.OptionsTextesBF.split("|||")[LangueIndex] + '' + '<li class="OptionsGlobalesContent OPT">--------------------------------------------------------------------------------------------------------------------------' + '<li class="OptionsGlobalesContent OPT"><font color = "FF0000">[Timezone]</font>' + Langue.OptionsOldSchoolAA.split("|||")[LangueIndex] + ' <select class="DropDownShipsMore" id="DropDown4" style="visibility:visible"><option value="46800"> -13H </option><option value="45000"> -12H30mn </option><option value="43200"> -12H </option><option value="41400"> -11H30mn </option><option value="39600"> -11H </option><option value="37800"> -10H30mn </option><option value="36000"> -10H </option><option value="34200"> -9H30mn </option><option value="32400"> -9H </option><option value="30600"> -8H30mn </option><option value="28800"> -8H </option><option value="27000"> -7H30mn </option><option value="25200"> -7H </option><option value="23400"> -6H30mn </option><option value="21600"> -6H </option><option value="19800"> -5H30mn </option><option value="18000"> -5H </option><option value="16200"> -4H30mn </option><option value="14400"> -4H </option><option value="12600"> -3H30mn </option><option value="10800"> -3H </option><option value="9000"> -2H30mn </option><option value="7200"> -2H </option><option value="5400"> -1H30mn </option><option value="3600"> -1H </option><option value="1800"> -30mn </option><option value="0"> +0mn </option><option value="-1800"> +30mn </option><option value="-3600"> +1H </option><option value="-5400"> +1H30mn </option><option value="-7200"> +2H </option><option value="-9000"> +2H30mn </option><option value="-10800"> +3H </option><option value="-12800"> +3H30mn </option><option value="-14400"> +4H </option><option value="-16200"> +4H30mn </option><option value="-18000"> +5H </option><option value="-19800"> +5H30mn </option><option value="-21600"> +6H </option><option value="-23400"> +6H30mn </option><option value="-25200"> +7H </option><option value="-27000"> +7H30mn </option><option value="-28800"> +8H </option><option value="-30600"> +8H30mn </option><option value="-32400"> +9H </option><option value="-34200"> +9H30mn </option><option value="-36000"> 10H </option><option value="-37800"> +10H30mn </option><option value="-39600"> +11H </option><option value="-41400"> +11H30mn </option><option value="-43200"> +12H </option><option value="-45000"> +12H30mn </option><option value="-46800"> +13H </option></select>' + '<li class="OptionsGlobalesContent OPT">' + Langue.OptionsOldSchoolAB.split("|||")[LangueIndex] + '<li class="OptionsGlobalesContent OPT">' + Langue.OptionsTextesBG.split("|||")[LangueIndex] + ' : <select class="DropDownShipsMore" id="DropDown2" style="visibility:visible"><option value="90"> 120% </option><option value="80"> 110% </option><option value="70"> 100% </option><option value="60"> 90% </option><option value="50"> 80% </option><option value="40"> 70% </option><option value="30"> 60% </option></select>' + '<li class="OptionsGlobalesContent OPT">' + Langue.OptionsTextesAP.split("|||")[LangueIndex] + ' <select class="DropDownShipsMore" id="DropDown1" style="visibility:visible"><option value="0"> FR </option><option value="1"> EN </option></select>' + '<li class="OptionsGlobalesContent OPT">' + Langue.OptionsTextesAQ.split("|||")[LangueIndex] + ' : ' + '<li class="OptionsGlobalesContent OPT">' + Langue.OptionsTextesAR.split("|||")[LangueIndex] + ' : <label><input type="text" class="SmallText" id="text11" value="' + Langue.Milliard.split("|||")[LangueIndex] + '" maxlength="15"></label> ' + Langue.OptionsTextesAS.split("|||")[LangueIndex] + ' : <label><input type="text" class="SmallText" id="text12" value="' + Langue.Million.split("|||")[LangueIndex] + '" maxlength="15"></label> ' + Langue.OptionsTextesAT.split("|||")[LangueIndex] + ' : <label><input type="text" class="SmallText" id="text13" value="" maxlength="15"></label>' + '<li class="OptionsGlobalesContent OPT">--------------------------------------------------------------------------------------------------------------------------' + '<li class="OptionsGlobalesContent OPT">' + Langue.OptionsTextesAU.split("|||")[LangueIndex] + ' : <label><input type="checkbox" id="cbox19"></label>' + '<li class="OptionsGlobalesContent OPT">' + Langue.OptionsTextesAV.split("|||")[LangueIndex] + ' <label><input type="text" class="BigText" id="text17" value="400000" maxlength="9"></label>' + '<li class="OptionsGlobalesContent OPT">--------------------------------------------------------------------------------------------------------------------------' + '<li class="OptionsGlobalesContent OPT">' + Langue.OptionsTextesBI.split("|||")[LangueIndex] + ' : <select class="DropDownShipsMore" id="DropDown3" style="visibility:visible"><option value="RawCoord">' + Langue.RECoords.split("|||")[LangueIndex] + '</option><option value="PlayerMin">' + Langue.REPlanet.split("|||")[LangueIndex] + '</option><option value="AgeSec">' + Langue.REAge.split("|||")[LangueIndex] + '</option><option value="HeureRetourPTRaw">' + Langue.RETimeTravelSec.split("|||")[LangueIndex] + '</option><option value="MetalPille">' + Langue.REMetal.split("|||")[LangueIndex] + '</option><option value="CristalPille">' + Langue.RECristal.split("|||")[LangueIndex] + '</option><option value="DeuteriumPille">' + Langue.REDeut.split("|||")[LangueIndex] + '</option><option value="Total">' + Langue.RETotal.split("|||")[LangueIndex] + '</option><option value="Loot">' + Langue.RELoot.split("|||")[LangueIndex] + '</option><option value="USMPille">' + Langue.RELootUSM.split("|||")[LangueIndex] + '</option><option value="FlotteFinal">' + Langue.REFlotte.split("|||")[LangueIndex] + '</option><option value="DefenseFinal">' + Langue.REDefense.split("|||")[LangueIndex] + '</option><option value="FlotteFinal">' + Langue.REFlotte.split("|||")[LangueIndex] + '</option><option value="HeureArriveePTRaw">' + Langue.HeureArrivee.split("|||")[LangueIndex] + '</option><option value="HeureRetourPTRaw">' + Langue.HeureRetour.split("|||")[LangueIndex] + '</option></select>' + '<li class="OptionsGlobalesContent OPT"><label><input type="checkbox" id="cbox17">' + Langue.OptionsTextesAW.split("|||")[LangueIndex] + '</label>' + '<li class="OptionsGlobalesContent OPT">' + Langue.OptionsTextesAX.split("|||")[LangueIndex] + ' : <label><input type="text" class="SmallText" id="text18" value="20" maxlength="2"></label>' + '<li class="OptionsGlobalesContent OPT">' + Langue.OptionsTextesAY.split("|||")[LangueIndex] + ' <label><input type="checkbox" id="cbox24"></label>' + '<li class="OptionsGlobalesContent OPT"><label><input type="checkbox" id="cbox20">' + Langue.OptionsTextesAZ.split("|||")[LangueIndex] + '</label>' + '<li class="OptionsGlobalesContent OPT"><label><input type="checkbox" id="cbox22">' + Langue.OptionsTextesBA.split("|||")[LangueIndex] + '</label>' + '<li class="OptionsGlobalesContent OPT"><label><input type="checkbox" id="cbox21">' + Langue.OptionsTextesBB.split("|||")[LangueIndex] + '</label>' + '<li class="OptionsGlobalesContent OPT"><label><input type="checkbox" id="cbox18">' + Langue.OptionsTextesBC.split("|||")[LangueIndex] + '</label>' + '<li class="OptionsGlobalesContent OPT">' + '</ul>' + '</table></div>'); var ZoneTechs = ('<div id="OptionsTechs"><table id="TableauZoneTechs">' + '<ul>' + '<li class="OptionsTechsContent OPT">' + Langue.OptionsTechsAA.split("|||")[LangueIndex] + ' : <label><input type="text" class="SmallText" id="text14" value="0" maxlength="2"></label>' + '<li class="OptionsTechsContent OPT">' + Langue.OptionsTechsAB.split("|||")[LangueIndex] + ' : <label><input type="text" class="SmallText" id="text15" value="0" maxlength="2"></label>' + '<li class="OptionsTechsContent OPT">' + Langue.OptionsTechsAC.split("|||")[LangueIndex] + ' : <label><input type="text" class="SmallText" id="text16" value="0" maxlength="2"></label>' + '<li class="OptionsTechsContent OPT">' + Langue.OptionsTechsAF.split("|||")[LangueIndex] + ' : <label><input type="text" class="SmallText" id="text22" value="0" maxlength="2"></label>' + '<li class="OptionsTechsContent OPT">' + Langue.OptionsTechsAG.split("|||")[LangueIndex] + ' : <label><input type="text" class="SmallText" id="text23" value="0" maxlength="2"></label>' + '<li class="OptionsTechsContent OPT">' + Langue.OptionsTechsAH.split("|||")[LangueIndex] + ' : <label><input type="text" class="SmallText" id="text24" value="0" maxlength="2"></label>' + '<li class="OptionsTechsContent OPT">' + '</ul>' + '</table></div>'); var TableauOptions = ('<div id="OptionsDiv"><table id="OptionsMainTable">' + //affichage des catégories des options (0) '<tr>' + '<td id="SauvegarderOptions" style="color:green;" > --> ' + Langue.OptionsMainAB.split("|||")[LangueIndex] + ' <-- </td>' + '</tr><tr>' + '<td class="OptionsMainLine" >' + Langue.OptionsMainAA.split("|||")[LangueIndex] + ' </td>' + '</tr><tr>' + '<td class="OptionsMainLine">' + ZoneCouleurs + '</td>' + '</tr><tr>' + '<td class="OptionsMainLine">' + Langue.OptionsMainAC.split("|||")[LangueIndex] + ' </td>' + '</tr><tr>' + '<td class="OptionsMainLine">' + ZoneColonnes + '</td>' + '</tr><tr>' + '<td class="OptionsMainLine">' + Langue.OptionsMainAD.split("|||")[LangueIndex] + ' </td>' + '</tr></tr>' + '<td class="OptionsMainLine">' + ZoneGlobales + '</td>' + '</tr><tr>' + '<td class="OptionsMainLine">' + Langue.OptionsMainAE.split("|||")[LangueIndex] + ' </td>' + '</tr><tr>' + '<td class="OptionsMainLine">' + ZoneTechs + '</td>' + '</tr><tr>' + '<td class="LastMainLine">' + Langue.Version.split("|||")[LangueIndex] + ' : ' + Version + ' --- <a href="https://openuserjs.org/scripts/OddWH/O-Table" target="_blank">' + Langue.OTABLERedesign.split("|||")[LangueIndex] + '</a></td>' + '</tr><tr>' + '</table></div>'); //Affichage du tableau HTML var newElement = document.createElement("div"); // On crée un nouvelle élément div newElement.innerHTML = TableauOptions; // On écrit le code source qu'il contient //document.querySelector("#ui-id-14 .TableButton:first-child").insertBefore(newElement, document.querySelector("#ui-id-14 .TableButton:first-child").nextSibling); document.querySelector(".TableButton:first-child").insertBefore(newElement, document.querySelector(".TableButton:first-child").nextSibling); GM_addStyle(".OPT:hover { color : #ffffff;} "); //Colorize line in white when user put his mouse hover GM_addStyle("input[type=radio] {-moz-transform: scale(0.9, 0.9); width:10px ; height:10px;} "); //For Oldschool Server, set default values to removed checkboxes (or other things when this causes errors) : GM_setValue('column16' + MetaLocal.Universe, false); //gestion des données (checkbox) : Affichage des colonnes cochées for (var j = 0; j < 30; j++){ try { if (GM_getValue('column' + j + MetaLocal.Universe) === false || GM_getValue('column' + j + MetaLocal.Universe) === true) { //Si une valeur a été enregistrée if (GM_getValue('column' + j + MetaLocal.Universe)) { document.getElementById('cbox' + j ).checked = GM_getValue('column' + j + MetaLocal.Universe); } else { document.getElementById('cbox' + j ).checked = false; } } else { var Nothing = 1; //Vérifie si rien n'est enregistré } } catch(err) { } } if (Nothing == 1) { //Si aucun enregistrement est détecté, on applique les cases à cocher par défaut (ce qui correspond à l'affichage du tableau par défaut dans la fonction CreateBoardHTML) document.getElementById('cbox0').checked = true; document.getElementById('cbox2').checked = true; document.getElementById('cbox8').checked = true; document.getElementById('cbox9').checked = true; document.getElementById('cbox10').checked = true; document.getElementById('cbox11').checked = true; document.getElementById('cbox12').checked = true; document.getElementById('cbox13').checked = true; document.getElementById('cbox14').checked = true; document.getElementById('cbox15').checked = true; document.getElementById('cbox17').checked = true; //Tableau récapitulatif des vagues document.getElementById('cbox19').checked = true; //Secondes vagues par défaut activées document.getElementById('cbox20').checked = true; //Ouvrir les attaques dans un nouvel onglet document.getElementById('cbox25').checked = true; } //Gestion des couleurs, la boucle for ajoute un style CSS à chaque id comprenant "color", puis ajoute une fonction d'écoute et lorsque la longueur du texte inscrit dans le champ atteint 6, met à jour le background en fonction for (var k = 0; k < 12; k++) { try { if (GM_getValue('color' + k + MetaLocal.Universe)) { document.getElementById("color" + k).value = GM_getValue('color' + k + MetaLocal.Universe); } } catch (err) { } GM_addStyle("#color" + k + " { background-color : #" + document.getElementById('color' + k).value + "; padding: 0px 0px 0px 0px; box-shadow:none; border: 1px solid #aaa; height: 15px; width:60px; padding:0px; border-radius: 0px 0px 0px 0px; text-align: center; float: right; clear: both; color : #000000;}"); document.getElementById('color' + k ).addEventListener("keyup", function(event) //Création du bouton permettant la collecte et la sauvegarde des messages { if (document.getElementById(this.id)) { //cette partie s'active plus tard (lorsque l'utilisateur a rempli le champ, du coup, k est bloqué à 8 donc il faut utiliser this var color1 = document.getElementById(this.id).value; GM_addStyle("#" + this.id + " { background-color : #" + color1 + ";} "); } }, true); } //Gestion des textes (rentas, heures, autre...) GM_addStyle(".BigText { width:90px; color : #000000;}"); GM_addStyle(".SmallText { width:30px; color : #000000;}"); for (var m = 0; m < 30; m++){ try { GM_addStyle("#text" + m +" { background-color : #FFFFFF; padding: 0px 0px 0px 0px; box-shadow:none; border: 1px solid #aaa; height: 15px; padding:0px; border-radius: 0px 0px 0px 0px; text-align: center; }"); if (GM_getValue('text' + m + MetaLocal.Universe)) { document.getElementById("text" + m).value = GM_getValue('text' + m + MetaLocal.Universe); } } catch (err) { } } //gestion des données (DropDown) : Affichage des valeurs dropdown for (var o = 0; o < 5; o++){ try { if (GM_getValue('DropDown' + o + MetaLocal.Universe)) { document.getElementById("DropDown" + o).value = GM_getValue('DropDown' + o + MetaLocal.Universe); } else { //puts default values to dropdown if not saved value exists if (o == 0) { document.getElementById("DropDown" + o).value = "20"; ///////////////////////////////////////////////////%ships more } if (o == 1) { document.getElementById("DropDown" + o).value = LangueIndex; ///////////////////////////////////////////////////LANGUE } if (o == 2) { document.getElementById("DropDown" + o).value = "70"; ///////////////////////////////////////////////////text size } if (o == 3) { document.getElementById("DropDown" + o).value = "Loot"; //////////////////////////////////////////////////default sort table } if (o == 4) { document.getElementById("DropDown" + o).value = "0"; //////////////////////////////////////////////////default sort table } } } catch (err) { GM_setValue('DropDown' + o + MetaLocal.Universe, document.getElementById('DropDown' + o).value); //Permet d'inscrire des valeurs dans les enregistrements même si l'utilisateur n'en a jamais mis } } //Gestion des radio button //radio button for (var r = 0; r < 16; r++){ try { if (GM_getValue('radio' + r + MetaLocal.Universe)) { document.getElementById("radio" + r).checked = GM_getValue('radio' + r + MetaLocal.Universe); } } catch (err) { } } //Ecoute le champ Langue et modifie les valeurs des indicateurs millions/milliards si l'utilisateur change de valeur// Rajouter un case lorsqu'on ajoute une langue //ADD A CASE IN THE SWITCH IF YOU ADD A LANGUAGE document.getElementById('DropDown1').addEventListener("change", function(event) { var UserLanguage = document.getElementById('DropDown1').value; switch (UserLanguage) { case "0": //alert("FR"); document.getElementById('text11').value = "Md"; document.getElementById('text12').value = "M"; document.getElementById('text13').value = ""; break; case "1": //alert("EN"); document.getElementById('text11').value = "Bn"; document.getElementById('text12').value = "M"; document.getElementById('text13').value = ""; break; default: //alert("Autre"); break; } }, true); //Mise en mémoire des colonnes cochées dans l'affichage des colonnes (BOUTON ENREGISTRER EN BAS DES OPTIONS) document.getElementById('SauvegarderOptions').addEventListener("click", function(event) //Création du bouton permettant la collecte et la sauvegarde des messages { for (var i = 0; i < 30; i++) { //Boucle pour les checkbox //saves checkboxes try{ GM_setValue('column' + i + MetaLocal.Universe, document.getElementById('cbox' + i).checked); }catch(err){ console.log('[O-Table] : column' + i + ' not found and not saved (this is not an error)'); } } for (var l = 0; l < 12; l++) { //Boucle pour la zone "Couleurs" //saves colors try{ GM_setValue('color' + l + MetaLocal.Universe, document.getElementById('color' + l).value); }catch(err){ console.log('[O-Table] : color' + l + ' not found and not saved (this is not an error)'); } } for (var n = 0; n < 30; n++) { //Boucle pour les datas de type "texte" //saves text values try{ GM_setValue('text' + n + MetaLocal.Universe, document.getElementById('text' + n).value); }catch(err){ console.log('[O-Table] : text' + n + ' not found and not saved (this is not an error)'); } } for (var p = 0; p < 5; p++) { //Boucle pour les dropdown //saves dropdown try{ GM_setValue('DropDown' + p + MetaLocal.Universe, document.getElementById('DropDown' + p).value); }catch(err){ console.log('[O-Table] : DropDown' + p + ' not found and not saved (this is not an error)'); } } for (var q = 0; q < 16; q++) { //Boucle pour les radio //saves radio buttons try{ GM_setValue('radio' + q + MetaLocal.Universe, document.getElementById('radio' + q).checked); }catch(err){ console.log('[O-Table] : radio' + q + ' not found and not saved (this is not an error)'); } } console.log("[O-Table] : Options saved successfully !"); location.reload(); //Rechargement de la page }, true); } ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //FONCTIONS DE GESTION ET RECUPERATION DES DONNEES DES MESSAGES////////////////////////////////GET MESSAGE / COMPUTE DATAS/////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //Fonction de création du tableau 2D (variable contenant tous les messages) function MsgBoard() { var LangueIndex = GetLangue(); //Définit la langue et quelle langue appliquer en fonction de l'utilisateur ou de la langue de l'univers var MetaLocal = MetaDatas(); // initialisation de la variable indiquant le numéro du RE var MessageNumero = 0; // initialisation de la variable indiquant le nombre de RE var IndexDernierMessage = 0; //Numero permet ensuite lorsque l'on crée une seconde vague de récupérer le dernier Message noté var DtMsg = 0; var i; //Récupération des messages var j; //Gestion des secondes vagues var k; //Gestion de la vérif si un message est déjà présent var Meta = MetaDatas(); var Table = new Array(); var Message = {}; var MessageStr; var NbItemsSaved = GM_getValue('MessageIndex' + MetaLocal.Universe, MessageIndex); for (i = 0; i < NbItemsSaved; i++) { DtMsg = GetStoredRE(MessageNumero); Message = ConvertStringToObj(DtMsg); Message = ComputeMessage(Message); if (Message.LineColor == '<font color="red">') { Message.LineColor = 'title="' + Langue.VagueSec.split("|||")[LangueIndex] + '"><font color="red">'; } if (Message.Id) { IndexDernierMessage = IndexDernierMessage + 1; Table.push(Message); } MessageNumero = MessageNumero + 1; Message = null; } //Affichage du tableau sous forme de pop-up : return Table; } function CollectAndStoreRE(){ // initialisation de la variable indiquant le numéro du RE var MessageToCollect = 0; // initialisation de la variable indiquant le nombre de RE var NbRE = NbMessages(); var DtMsg = ''; var i; var j; var k; var Meta = MetaDatas(); var Message = {}; var MessageStr; var TotalRessourcesVagueSecondaire = 0; var IdMessagesSplit = new Array(); var IdMessageSame = 0; //Cette variable passe à 1 si un id message identique est trouvé //Récupération du choix utilisateur concernant les vagues if (GM_getValue('column19' + Meta.Universe) === false || GM_getValue('column19' + Meta.Universe) === true) { //Si une valeur a été enregistrée var VagueSecondaireYesorNo = GM_getValue('column19' + Meta.Universe); } else { //si aucune valeur est enregistrée, par défaut, la variable est true var VagueSecondaireYesorNo = true; } //Récupération du choix utilisateur concernant la renta à partir de laquelle générer des secondes vagues if (GM_getValue('text17' + Meta.Universe)) { var MontantRentaVagueSecondaire = GM_getValue('text17' + Meta.Universe); } else { var MontantRentaVagueSecondaire = 400000; } GM_addStyle("#CollecterMessages { color: #FFAA00;}"); MessageIndex = GM_getValue('MessageIndex' + Meta.Universe, MessageIndex); if (GM_getValue('REIdList' + Meta.Universe, IdMessages)) { IdMessages = GM_getValue('REIdList' + Meta.Universe, IdMessages); IdMessagesSplit = IdMessages.split(":--:"); } else { IdMessages = 0; } ////////console log console.log('[O-Table] : Old school server, using OLDSCHOOL_RecupDataMessage function'); ///////end of console log for (i = 0; i < NbRE; i++) { console.log('[O-Table] : Checking line n°' + i); DtMsg = OLDSCHOOL_RecupDataMessage(MessageToCollect); Message = DtMsg; if (Message) { //Cette boucle vérifie l'id message du message et si aucun id ne correspond, renvoie 0, si un id correspond, renvoie 1 for (k = 0; k < IdMessagesSplit.length + 1; k++) { if (Message.IdIg != IdMessagesSplit[k]) { IdMessageSame = IdMessageSame + 0; } else { IdMessageSame = IdMessageSame + 1; } } if (IdMessageSame === 0) { //Si aucun message n'a correspondu, enregistrement du message Message.Id = MessageIndex; SetStoredRE(MessageIndex, Message); MessageIndex = MessageIndex + 1; IdMessages = (IdMessages + ":--:" + Message.IdIg); //Gestion des secondes vagues if (VagueSecondaireYesorNo) { //Vérifie si l'utilisateur souhaite ou non créer des secondes vagues var VagueSecondaire = clone(Message); //Attention, pour les bandits, il génère quand même une seconde vague de 0 renta étant donné que l'on trouve plus de 600k renta sur la première... for (j = 0; j < 5; j++) { TotalRessourcesVagueSecondaire = parseInt((VagueSecondaire.Metal + VagueSecondaire.Cristal + VagueSecondaire.Deuterium) * VagueSecondaire.Butin / 2); if ( TotalRessourcesVagueSecondaire > (MontantRentaVagueSecondaire)) { if (parseInt(VagueSecondaire.Metal * (1 - VagueSecondaire.Butin)) + parseInt(VagueSecondaire.Cristal * (1 - VagueSecondaire.Butin)) + parseInt(VagueSecondaire.Deuterium * (1 - VagueSecondaire.Butin)) > 0) { VagueSecondaire.Metal = parseInt(VagueSecondaire.Metal * (1 - VagueSecondaire.Butin)); VagueSecondaire.Cristal = parseInt(VagueSecondaire.Cristal * (1 - VagueSecondaire.Butin)); VagueSecondaire.Deuterium = parseInt(VagueSecondaire.Deuterium * (1 - VagueSecondaire.Butin)); VagueSecondaire.LineColor = '<font color="red">'; VagueSecondaire.Id = MessageIndex; SetStoredRE(MessageIndex, VagueSecondaire); MessageIndex = MessageIndex + 1; } } else { j = 10; } } } } } IdMessageSame = 0; GM_setValue('REIdList' + Meta.Universe, IdMessages); MessageToCollect = MessageToCollect + 1; Message = null; } //alert(MessageToCollect + 'Messages Analysés' + ', Valeur du premier message : ' + GetStoredRE(1)); //alert(MessageIndex); GM_setValue('MessageIndex' + Meta.Universe, MessageIndex); //alert(GM_getValue('MessageIndex'+Meta.Universe, MessageIndex)); GM_addStyle("#CollecterMessages { color: #00FF00;}"); setTimeout(function() { GM_addStyle("#CollecterMessages { color: inherit;}");}, 750); } //Fonction de récupération des messages et de leurs infos //This function collects data from a selected spy report function RecupDataMessage(MessageNumber) { var LangueIndex = GetLangue(); //Définit la langue et quelle langue appliquer en fonction de l'utilisateur ou de la langue de l'univers //Récupération des messages var ImproveV6 = 0; var AllMessages = document.querySelectorAll("li.msg"); // Ressources du message var Message; if(AllMessages[MessageNumber].querySelectorAll('.espionageDefText').length === 0) { // Récupération des données Meta (utile pour savoir l'univers) : var Meta = MetaDatas(); // Récupération des data messages Message = AllMessages[MessageNumber].querySelectorAll("span.resspan"); Message.API = (/(sr-[0-9a-z\-]+)/.exec(AllMessages[MessageNumber].querySelectorAll(".icon_apikey")[0].title)[0]); Message.IdIg = AllMessages[MessageNumber].getAttribute('data-msg-id'); Message.Metal = Message[0].textContent; Message.Metal = Message.Metal.split(":"); Message.Metal = Message.Metal[1]; Message.Metal = parseInt(ConvertRENumbers(Message.Metal)); //Appel de la fonction de transformation des nombres Message.Cristal = Message[1].textContent; Message.Cristal = Message.Cristal.split(":"); Message.Cristal = Message.Cristal[1]; Message.Cristal = parseInt(ConvertRENumbers(Message.Cristal)); Message.Deuterium = Message[2].textContent; Message.Deuterium = Message.Deuterium.split(":"); Message.Deuterium = Message.Deuterium[1]; Message.Deuterium = parseInt(ConvertRENumbers(Message.Deuterium)); // Coordonnées de la planète Message.BlueTitle = AllMessages[MessageNumber].querySelector("span.msg_title"); Message.CoordPlanete = Message.BlueTitle.textContent; Message.CoordPlanete = (/[[0-9]+:[0-9]+:[0-9]+]/.exec( Message.CoordPlanete)); Message.CoordPlanete = (/[0-9]+:[0-9]+:[0-9]+/.exec( Message.CoordPlanete)); //I decided to put a double check to prevent wrong planet names (example, a planet named "3:158:8" would generate an error without this double check. Secondary check is only useful to remove the "[""]" inside the coordinates. //Message.CoordPlanete = Message.CoordPlanete.split("["); //Message.CoordPlanete = Message.CoordPlanete[1].split("]"); //Message.CoordPlanete = Message.CoordPlanete[0]; //Butin Possible, Activité, Nom du joueur, Flotte/Def Message.CTN = AllMessages[MessageNumber].querySelectorAll("span.ctn.ctn4"); try { //Vérification de la présence de ImproveV6 - Initialisation de la variable ImproveV6 indispensable aux vérifications suivantes if (AllMessages[MessageNumber].querySelectorAll("span.addGT")[0].textContent) { Message.Butin = Message.CTN[5].textContent; ImproveV6 = 1; } } catch(err) { Message.Butin = Message.CTN[4].textContent; } //Transformation de la flotte, try permet d'analyser si la flotte est visible ou non try { if (ImproveV6 === 0) { //Vérifie la présence de ImproveV6 Message.Flotte = Message.CTN[5].textContent; } else { Message.Flotte = Message.CTN[6].textContent; } Message.Flotte = Message.Flotte.split(":"); Message.Flotte = Message.Flotte[1]; Message.FlotteFinal = parseInt(ConvertRENumbers(Message.Flotte)); Message.FlotteDisplayed = ThousandSeparator(Message.FlotteFinal); } catch(err) { Message.FlotteFinal = -1; //Permet de quand même afficher le RE et de faire des tris dessus Message.FlotteDisplayed = '<span style="color:#ff0000">?</span>'; } //Transformation des défenses, try permet d'analyser si la défense est visible ou non try { if (ImproveV6 === 0) { //Vérifie la présence de ImproveV6 Message.Defense = Message.CTN[6].textContent; } else { Message.Defense = Message.CTN[7].textContent; } Message.Defense = Message.Defense.split(":"); Message.Defense = Message.Defense[1]; Message.DefenseFinal = parseInt(ConvertRENumbers(Message.Defense)); Message.DefenseDisplayed = ThousandSeparator(Message.DefenseFinal); } catch(err) { Message.DefenseFinal = -1;//Permet de quand même afficher le RE et de faire des tris dessus Message.DefenseDisplayed = '<span style="color:#ff0000">?</span>'; } //Transformation du butin (ratio de butin, attention) ex : 0.5 Message.Butin = Message.Butin.replace(/[^0-9.]/g, ""); Message.Butin = Message.Butin / 100; //Transformation de l'activité if (ImproveV6 === 0) { //Vérifie la présence de ImproveV6 Message.Activite = Message.CTN[1].textContent.split(":")[1].split(" ")[1]; } else { Message.Activite = Message.CTN[2].textContent.split(":")[1].split(" ")[1]; } switch (Message.Activite) { case ">60": Message.Activite = ''; break; case "<15": Message.Activite = '(<span style="color:#ff0000"><15</span>)'; break; default: Message.Activite = '(<span style="color:#ff8080">' + Message.Activite +'</span>)'; break; } //Récupération de la date et de l'age du RE Message.Date = AllMessages[MessageNumber].querySelectorAll("span.msg_date"); Message.Date = Message.Date[0].textContent; Message.Player= AllMessages[MessageNumber].querySelectorAll(".compacting")[0].querySelectorAll("span")[1].textContent; //Récupération du joueur //Elimination des espaces devant le joueur Message.Player = Message.Player.substring(2); Message.PlayerStatus= AllMessages[MessageNumber].querySelectorAll(".compacting")[0].querySelectorAll("span")[1].className; //Récupération du status joueur //Vérification du status du joueur afin de lui attribuer la bonne couleur dans le tableau switch(Message.PlayerStatus) { case "status_abbr_longinactive": //alert("Long Inactif"); Message.PlayerColor = 0; break; case "status_abbr_inactive": //alert("Inactif"); Message.PlayerColor = 1; break; case "status_abbr_active": //alert("Actif non honorable"); Message.PlayerColor = 2; break; case "status_abbr_honorableTarget": //alert("Actif honorable"); Message.PlayerColor = 3; break; case "status_abbr_outlaw": //alert("Actif Hors la loi"); Message.PlayerColor = 4; break; case "status_abbr_vacation": //alert("Joueur en MV"); Message.PlayerColor = 5; break; case "status_abbr_noob": //alert("Joueur débutant"); Message.PlayerColor = 6; break; case "status_abbr_strong": //alert("Joueur fort"); Message.PlayerColor = 7; break; } //Recherche d'un statut honorifique et attribue "Nothing" lorsqu'il ne trouve rien try { Message.PlayerIcon = ' <span class="' + AllMessages[MessageNumber].querySelectorAll("span.honorRank")[0].className.split(" tooltip")[0] +'"> </span>'; //Récupère les deux premiers noms de class attribués à ce span pour attribuer l'icône correspondant au statut joueur Message.Player = Message.Player.substring(1); //Elimine l'espace supplémentaire qu'il y a devant un joueur ayant un icône } catch(err) { Message.PlayerIcon = ''; //Lorsque qu'aucun icône est trouvé, on laisse cet attribut vide } //Récupération de l'icône lune try { Message.ClassMoon = AllMessages[MessageNumber].querySelectorAll("figure.planetIcon.moon")[0].className; Message.Moon = 3; } catch(err) { Message.Moon = 1; } Message.LineColor = 'title="' + Langue.VaguePri.split("|||")[LangueIndex] + '"><font color="white">'; //Permet d'attribuer une couleur au numéro de ligne, blanc lorsqu'il s'agit d'une première vague et jaune quand il s'agit d'une vague secondaire (pas géré ici) //Appel de la fonction qui effectue les calculs dans les messages Message.Display = 1; //Permet d'indiquer si le message doit être affiché ou non sur le tableau final, Message.PTAttacked = 0; Message.GTAttacked = 0; Message.RCRecycled = 0; //Sortie des variables return Message; } } function OLDSCHOOL_RecupDataMessage(MessageNumber) { var Message; Message = document.querySelectorAll("tbody")[5].rows[MessageNumber].querySelectorAll("td")[1]; var LangueIndex = GetLangue(); //Définit la langue et quelle langue appliquer en fonction de l'utilisateur ou de la langue de l'univers try { //alert(MessageNumber + '-----' + Message.textContent.split(" ")[0]); if (Message.textContent.split(" ")[0] == "Resources") { var CurrentDate = new Date(); //used to create the good date format for Message.Date console.log('[O-Table] : Spy report found ! :) --- Line Number : ' + MessageNumber); Message.API = ''; Message.Metal = Message.querySelectorAll("table")[0].querySelectorAll("td")[2].textContent; Message.Metal = parseInt(ConvertRENumbers(Message.Metal)); //Appel de la fonction de transformation des nombres Message.Cristal = Message.querySelectorAll("table")[0].querySelectorAll("td")[4].textContent; Message.Cristal = parseInt(ConvertRENumbers(Message.Cristal)); //Appel de la fonction de transformation des nombres Message.Deuterium = Message.querySelectorAll("table")[0].querySelectorAll("td")[6].textContent; Message.Deuterium = parseInt(ConvertRENumbers(Message.Deuterium)); //Appel de la fonction de transformation des nombres Message.CoordPlanete = Message.querySelectorAll("table")[0].querySelectorAll("a")[0].textContent; Message.CoordPlanete = (/[0-9]+:[0-9]+:[0-9]+/.exec( Message.CoordPlanete)); //regex to remove "[]" Message.Butin = 0.5; //Fleet Part //Initializing values Message.PT = 0; Message.GT = 0; Message.Cle = 0; Message.Clo = 0; Message.Cruz = 0; Message.VB = 0; Message.VC = 0; Message.BB = 0; Message.Dest = 0; Message.RIP = 0; Message.GGlider = 0; Message.RC = 0; Message.Sonde = 0; Message.Sat = 0; try { //Try is used to avoid errors when no defs are found Message.FleetPart = Message.querySelectorAll("table")[2]; //Select the fleet part message var td = Message.FleetPart.getElementsByTagName("td").length; for (var i = 0; i < td; i++) {//checks all td on fleet part and search text values Message.FleetCell = Message.FleetPart.querySelectorAll("td")[i].textContent; switch(Message.FleetCell) { case "Small Cargo": Message.PT = Message.FleetPart.querySelectorAll("td")[i + 1].textContent.replace(".",""); break; case "Large Cargo": Message.GT = Message.FleetPart.querySelectorAll("td")[i + 1].textContent.replace(".",""); break; case "Light Fighter": Message.Cle = Message.FleetPart.querySelectorAll("td")[i + 1].textContent.replace(".",""); break; case "Heavy Fighter": Message.Clo = Message.FleetPart.querySelectorAll("td")[i + 1].textContent.replace(".",""); break; case "Cruiser": Message.Cruz = Message.FleetPart.querySelectorAll("td")[i + 1].textContent.replace(".",""); break; case "Battleship": Message.VB = Message.FleetPart.querySelectorAll("td")[i + 1].textContent.replace(".",""); break; case "Colony Ship": Message.VC = Message.FleetPart.querySelectorAll("td")[i + 1].textContent.replace(".",""); break; case "Recycler": Message.RC = Message.FleetPart.querySelectorAll("td")[i + 1].textContent.replace(".",""); break; case "Espionage Probe": Message.Sonde = Message.FleetPart.querySelectorAll("td")[i + 1].textContent.replace(".",""); break; case "Bomber": Message.BB = Message.FleetPart.querySelectorAll("td")[i + 1].textContent.replace(".",""); break; case "Solar Satellite": Message.Sat = Message.FleetPart.querySelectorAll("td")[i + 1].textContent.replace(".",""); break; case "Destroyer": Message.Dest = Message.FleetPart.querySelectorAll("td")[i + 1].textContent.replace(".",""); break; case "Deathstar": Message.RIP = Message.FleetPart.querySelectorAll("td")[i + 1].textContent.replace(".",""); break; case "Gammaglider": Message.GGlider = Message.FleetPart.querySelectorAll("td")[i + 1].textContent.replace(".",""); break; } } Message.Flotte = (Message.PT * 4000 + Message.GT * 12000 + Message.Cle * 4000 + Message.Clo * 10000 + Message.Cruz * 27000 + Message.VB * 60000 + Message.VC * 30000 + Message.RC * 16000 + Message.Sonde * 1000 + Message.BB * 75000 + Message.Sat * 2000 + Message.Dest * 110000 + Message.RIP * 9000000 + Message.GGlider * 1000); Message.FlotteFinal = Message.Flotte; Message.FlotteDisplayed = ThousandSeparator(Message.FlotteFinal); } catch(err) { console.log("[O-Table] : No fleet part found on this message"); Message.Flotte = -1; Message.FlotteFinal = -1; Message.FlotteDisplayed = '<span style="color:#ff0000">?</span>'; } //End of fleet part //Defense part //Initializing values Message.LM = 0; Message.LL = 0; Message.LLo = 0; Message.Gauss = 0; Message.Ion = 0; Message.Plasma = 0; Message.PB = 0; Message.GB = 0; try { //Try is used to avoid errors when no defs are found Message.DefPart = Message.querySelectorAll("table")[3]; //Select the def part message var td = Message.DefPart.getElementsByTagName("td").length; for (var i = 0; i < td; i++) {//checks all td on fleet part and search text values Message.DefCell = Message.DefPart.querySelectorAll("td")[i].textContent; switch(Message.DefCell) { case "Rocket Launcher": Message.LM = Message.DefPart.querySelectorAll("td")[i + 1].textContent.replace(".",""); break; case "Light Laser": Message.LL = Message.DefPart.querySelectorAll("td")[i + 1].textContent.replace(".",""); break; case "Heavy Laser": Message.LLo = Message.DefPart.querySelectorAll("td")[i + 1].textContent.replace(".",""); break; case "Gauss Cannon": Message.Gauss = Message.DefPart.querySelectorAll("td")[i + 1].textContent.replace(".",""); break; case "Ion Cannon": Message.Ion = Message.DefPart.querySelectorAll("td")[i + 1].textContent.replace(".",""); break; case "Plasma Turret": Message.Plasma = Message.DefPart.querySelectorAll("td")[i + 1].textContent.replace(".",""); break; case "Small Shield Dome": Message.PB = Message.DefPart.querySelectorAll("td")[i + 1].textContent.replace(".",""); break; case "Large Shield Dome": Message.GB = Message.DefPart.querySelectorAll("td")[i + 1].textContent.replace(".",""); break; } } Message.Defense = (Message.LM * 2000 + Message.LL * 2000 + Message.LLo * 8000 + Message.Gauss * 35000 + Message.Ion * 8000 + Message.Plasma * 100000 + Message.PB * 20000 + Message.GB * 100000); Message.DefenseFinal = Message.Defense; Message.DefenseDisplayed = ThousandSeparator(Message.DefenseFinal); //End of Def part } catch(err) { console.log("[O-Table] : No defs part found on this message"); Message.Defense = -1; Message.DefenseFinal = -1; Message.DefenseDisplayed = '<span style="color:#ff0000">?</span>'; } //Techs part //Initializing values Message.Weapons = 0; Message.Shield = 0; Message.Armour = 0; try { //Try is used to avoid errors when no techs are found Message.TechPart = Message.querySelectorAll("table")[5]; //Select the def part message //Initializing values var td = Message.TechPart.getElementsByTagName("td").length; for (var i = 0; i < td; i++) {//checks all td on fleet part and search text values Message.TechCell = Message.TechPart.querySelectorAll("td")[i].textContent; switch(Message.TechCell) { case "Weapons Technology": Message.Weapons = Message.TechPart.querySelectorAll("td")[i + 1].textContent; break; case "Shielding Technology": Message.Shield = Message.TechPart.querySelectorAll("td")[i + 1].textContent; break; case "Armour Technology": Message.Armour = Message.TechPart.querySelectorAll("td")[i + 1].textContent; break; } } } catch(err) { console.log("[O-Table] : No techs part found on this message"); } try { Message.Activite = '(<span style="color:#ff8080">' + Message.querySelectorAll("table")[1].querySelectorAll("font")[0].textContent + '</span>)'; } catch(err) { Message.Activite = ''; } Message.Date = Message.querySelectorAll("table")[0].querySelectorAll("td")[0].textContent.split(/[[0-9]+:[0-9]+:[0-9]+]/)[1].replace(" at ","").replace("-",".").replace(" ", "." + CurrentDate.getFullYear() + " "); Message.Jour = Message.Date.split(".")[1]; Message.Mois = Message.Date.split(".")[0]; Message.DatePart = Message.Jour + "." + Message.Mois; Message.Date = Message.Date.replace(Message.Mois + "." + Message.Jour, Message.DatePart); Message.Player = Message.querySelectorAll("table")[0].querySelectorAll("td")[0].textContent.split(/[[0-9]+:[0-9]+:[0-9]+]/)[0].replace("Resources on ", ""); //player ===== planet name here as there is no player name on old school spy reports Message.PlayerStatus = "status_abbr_active"; Message.PlayerColor = 2;//as it's impossible to know the playerstatus, the value is set to "not honorable active player" to make the planet name white Message.PlayerIcon = ''; //PlayerIcon doesn't exist in old school Message.Moon = 1; //Has to be verified Message.LineColor = 'title="' + Langue.VaguePri.split("|||")[LangueIndex] + '"><font color="white">'; Message.Display = 1; //Permet d'indiquer si le message doit être affiché ou non sur le tableau final, Message.PTAttacked = 0; Message.GTAttacked = 0; Message.RCRecycled = 0; Message.IdIg = Message.Metal + Message.Cristal + Message.Deuterium + Message.CoordPlanete + Message.CoordPlanete; //To make it unique, as there is not id in messages on old school, it's using the amount of resources + time + coords to create an unique ID console.log('[O-Table] : [' + Message.CoordPlanete + ']---[Metal : ' + Message.Metal + '|||Cristal : ' + Message.Cristal + '|||Deuterium : ' + Message.Deuterium + ']---[Date : ' + Message.Date + ']---[Activity : ' + Message.Activite + ']'); return Message; } else { console.log('[O-Table] : Not a SR, going to check next line'); } } catch(err) { console.log('[O-Table] : Not a SR, going to check next line'); } } //Fonction utilisée pour effectuer les calculs de données dans les messages //This function is used to compute datas inside messages function ComputeMessage(Message) { var Meta = MetaDatas(); var LangueIndex = GetLangue(); //Définit la langue et quelle langue appliquer en fonction de l'utilisateur ou de la langue de l'univers //Récupération du choix qu'a mis l'utilisateur dans "envoyer plus de flotte que nécessaire" if (GM_getValue('DropDown0' + Meta.Universe)) { var ShipMore = GM_getValue('DropDown0' + Meta.Universe); } else { var ShipMore = 20; //Valeur par défaut } //Récupération des techs de l'utilisateur if (GM_getValue('text14' + Meta.Universe)) { // Réacteur à combu var Combu = GM_getValue('text14' + Meta.Universe); } else { var Combu = 0; //Valeur par défaut } if (GM_getValue('text15' + Meta.Universe)) { // Réacteur à impu var Impu = GM_getValue('text15' + Meta.Universe); } else { var Impu = 0; //Valeur par défaut } if (GM_getValue('text16' + Meta.Universe)) { // Prop var Prop = GM_getValue('text16' + Meta.Universe); } else { var Prop = 0; //Valeur par défaut } if (GM_getValue('text22' + Meta.Universe)) { //Armes var Weapons = GM_getValue('text22' + Meta.Universe); } else { var Weapons = 0; //Valeur par défaut } if (GM_getValue('text23' + Meta.Universe)) { //Bouclier var Shield = GM_getValue('text23' + Meta.Universe); } else { var Shield = 0; //Valeur par défaut } if (GM_getValue('text24' + Meta.Universe)) { //Protection var Armour = GM_getValue('text24' + Meta.Universe); } else { var Armour = 0; //Valeur par défaut } //Récupération du *taux de commerce* définis par l'utilisateur if (GM_getValue('text8' + Meta.Universe)) { // Métal var TxX = GM_getValue('text8' + Meta.Universe); } else { var TxX = 3; //Valeur par défaut } if (GM_getValue('text9' + Meta.Universe)) { //Cristal var TxY = GM_getValue('text9' + Meta.Universe); } else { var TxY = 2; //Valeur par défaut } if (GM_getValue('text10' + Meta.Universe)) { //Deut var TxZ = GM_getValue('text10' + Meta.Universe); } else { var TxZ = 1; //Valeur par défaut } var NbSS = 499;//Default value NbSS = parseInt(NbSS); var NbG = 9;//Default value NbG = parseInt(NbG); //Get user selected amount of probes if (GM_getValue('text29' + Meta.Universe)) { var SpyProbes = GM_getValue('text29' + Meta.Universe); } else { var SpyProbes = 5; //Valeur par défaut } var TravelTimeType = 1; //This variable is used to know if we want to display the travel or the travel+back time (1=travel, 2=travel+back) //If to to know, on the travel time column, if we display only the travel time or if we display the travel + back time (1=travel, 2=travel+back) if (GM_getValue('radio0' + Meta.Universe) === true) { TravelTimeType = 1; } else { if (GM_getValue('radio1' + Meta.Universe) === true) { TravelTimeType = 2; } } //Gestion du nombre de galaxies et de SS de l'univers //Gestion des ressources Message.MetalDisplayed = ThousandSeparator(Message.Metal); Message.MetalPille = parseInt(Message.Metal * Message.Butin) Message.MetalPilleDisplayed = ThousandSeparator(Message.MetalPille); Message.CristalDisplayed = ThousandSeparator(Message.Cristal); Message.CristalPille = parseInt(Message.Cristal * Message.Butin) Message.CristalPilleDisplayed = ThousandSeparator(Message.CristalPille); Message.DeuteriumDisplayed = ThousandSeparator(Message.Deuterium); Message.DeuteriumPille = parseInt(Message.Deuterium * Message.Butin); Message.DeuteriumPilleDisplayed = ThousandSeparator(Message.DeuteriumPille); Message.Total = parseInt(Message.Metal) + parseInt(Message.Cristal) + parseInt(Message.Deuterium); Message.TotalDisplayed = ThousandSeparator(Message.Total); //Gestion des CDR et du nombre de recycleurs Message.CDRFlotte = parseInt(Message.FlotteFinal * (Meta.TxCDRFleet / 100)); Message.CDRFlotteDisplayed = ThousandSeparator(Message.CDRFlotte); Message.CDRFlotteRC = parseInt(Message.CDRFlotte / 20000); if (Message.CDRFlotte > 0) { //Adds 1 more recycler needed when debris field is bigger than 0 Message.CDRFlotteRC = Message.CDRFlotteRC + 1; } Message.CDRFlotteRCDisplayed = ThousandSeparator(Message.CDRFlotteRC); Message.CDRDefense = (Message.DefenseFinal * (Meta.TxCDRDef / 100)); Message.CDRDefRC = parseInt(Message.CDRDefense / 20000); if (Message.CDRDef > 0) { //Adds 1 more recycler needed when debris field is bigger than 0 Message.CDRDefRC = Message.CDRDefRC + 1; } Message.TotalRC = Message.CDRFlotteRC + Message.CDRDefRC; Message.TotalCDR = Message.CDRFlotte + Message.CDRDefense; Message.CDRDefenseRCDisplayed = ThousandSeparator(Message.CDRDefRC); Message.CDRDefenseDisplayed = ThousandSeparator(Message.CDRDefense); //Gestion de la galaxie de provenance du joueur Message.CoordSplit = Message.CoordPlanete.split(":"); Message.CoordGalaxie = parseInt(Message.CoordSplit[0]); Message.CoordSS = parseInt(Message.CoordSplit[1]); Message.CoordPos = parseInt(Message.CoordSplit[2]); Message.RawCoord = (Number(Message.CoordGalaxie) * 1000000 + Number(Message.CoordSS) * 100 + Number(Message.CoordPos)); //Mise en minuscule du nom du joueur (utile pour le tri) Message.PlayerMin = Message.Player.toLowerCase(); //Gestion de l'âge Message.Annee = Message.Date.split(" ")[0].split(".")[2]; Message.Mois = Message.Date.split(" ")[0].split(".")[1]; Message.Jour = Message.Date.split(" ")[0].split(".")[0]; Message.Heure = Message.Date.split(" ")[1].split(":")[0]; Message.Minute = Message.Date.split(" ")[1].split(":")[1]; Message.Seconde = Message.Date.split(" ")[1].split(":")[2]; Message.DateStamp = (new Date(Message.Annee + "/" + Message.Mois + "/" + Message.Jour + " " + Message.Heure + ":" + Message.Minute + ":" + Message.Seconde).getTime()) / 1000; Message.AgeSec = parseInt(Meta.Timestamp) - parseInt(Message.DateStamp); Message.AgeDisplayed = secondsToHms(Message.AgeSec); //Calcul du pillage Message.Loot = parseInt((Message.Total * Message.Butin)); Message.LootDisplayed = ThousandSeparator(Message.Loot); //calcul du nombre PT et GT Message.NbPT = parseInt(Message.Loot / 5000 * (1 + ShipMore / 100) + 1); Message.NbPTDisplayed = ThousandSeparator(Message.NbPT); Message.NbGT = parseInt(Message.Loot / 25000 * (1 + ShipMore / 100) + 1); Message.NbGTDisplayed = ThousandSeparator(Message.NbGT); //Création des liens PT et GT et galaxie Message.LienPT = ('http://' + Meta.Universe + '/game/index.php?page=flotten1&session=' + OgameSessionID + '&am202=' + Message.NbPT + '&galaxy=' + Message.CoordGalaxie + '&system=' + Message.CoordSS + '&planet=' + Message.CoordPos + '&planettype=' + Message.Moon + '&target_mission=1'); Message.LienGT = ('http://' + Meta.Universe + '/game/index.php?page=flotten1&session=' + OgameSessionID + '&am203=' + Message.NbGT + '&galaxy=' + Message.CoordGalaxie + '&system=' + Message.CoordSS + '&planet=' + Message.CoordPos + '&planettype=' + Message.Moon + '&target_mission=1'); Message.LienSonde = ('http://' + Meta.Universe + '/game/index.php?page=flotten1&session=' + OgameSessionID + '&am210=' + SpyProbes + '&galaxy=' + Message.CoordGalaxie + '&system=' + Message.CoordSS + '&planet=' + Message.CoordPos + '&planettype=' + Message.Moon + '&target_mission=6'); Message.LienRC = ('http://' + Meta.Universe + '/game/index.php?page=flotten1&session=' + OgameSessionID + '&am209=' + Message.TotalRC + '&galaxy=' + Message.CoordGalaxie + '&system=' + Message.CoordSS + '&planet=' + Message.CoordPos + '&planettype=2&target_mission=8'); Message.LienGalaxie = ('http://' + Meta.Universe + '/game/index.php?page=galaxy&no_header=1&galaxy' + Message.CoordGalaxie + '&system=' + Message.CoordSS + '&position=' + Message.CoordPos + '&session=' + OgameSessionID); Message.LienDetails = ('http://' + Meta.Universe + '/game/index.php?page=messages&messageId=' + Message.IdIg + '&tabid=20&ajax=1'); //not used in old school Message.Simulation = ('https://websim.speedsim.net/index.php?version=1&lang=en&uni_speed=1&perc-df=30&def_to_df=0&rf=1&start_pos=' + Meta.PlayerCoord + '&engine0_0=' + Combu + '&engine0_1=' + Impu + '&engine0_2=' + Prop + '&tech_a0_0=' + Weapons + '&tech_a0_1=' + Shield + '&tech_a0_2=' + Armour + '&tech_d0_0=' + Message.Weapons + '&tech_d0_1=' + Message.Shield + '&tech_d0_02=' + Message.Armour + '&ship_a0_0_b=' + Message.NbPT + '&ship_d0_0_b=' + Message.PT + '&ship_d0_1_b=' + Message.GT + '&ship_d0_2_b=' + Message.Cle + '&ship_d0_3_b=' + Message.Clo + '&ship_d0_4_b=' + Message.Cruz + '&ship_d0_5_b=' + Message.VB + '&ship_d0_6_b=' + Message.VC + '&ship_d0_7_b=' + Message.RC + '&ship_d0_8_b=' + Message.Sonde + '&ship_d0_9_b=' + Message.BB + '&ship_d0_10_b=' + Message.Sat + '&ship_d0_11_b=' + Message.Dest + '&ship_d0_12_b=' + Message.RIP + '&ship_d0_14_b=' + Message.LM + '&ship_d0_15_b=' + Message.LL + '&ship_d0_16_b=' + Message.LLo + '&ship_d0_17_b=' + Message.Gauss + '&ship_d0_18_b=' + Message.Ion + '&ship_d0_19_b=' + Message.Plasma + '&ship_d0_20_b=' + Message.PB + '&ship_d0_21_b=' + Message.GB); //Vérification de si la planète est une lune ou non - - Checks if the planet is a moon or not Message.IsPlanetOrMoon = Message.Moon if (Message.Moon == 3) { Message.Moon = '(M)'; } else { Message.Moon = ''; } //Valeur USM Message.USMPille = parseInt(Message.MetalPille + Message.CristalPille * (TxX / TxY) + Message.DeuteriumPille * (TxX / TxZ)); Message.USMPilleDisplayed = ThousandSeparator(Message.USMPille); //Total amount of resources that is possible to get with this spy report Message.TotalCDRRes = Message.TotalCDR + Message.Loot; Message.TotalCDRResUSM = Message.TotalCDR + Message.USMPille; //Gestion vitesse PT if (Impu >= 5) { var PTSpeed = 10000 * (1 + 2 * Impu / 10); } else { var PTSpeed = 10000 * (1 + Combu / 10); } //Gestion vitesse GT var GTSpeed = 7500 * (1 + Combu / 10); Message.TempsTrajetPT = 0; //Récupération de la galaxie, ss et pos actuels var PlayerG = parseInt(Meta.PlayerCoord.toString().split(":")[0]); //Meta.PlayerCoord can't be split as it's an object var PlayerSS = parseInt(Meta.PlayerCoord.toString().split(":")[1]); var PlayerPos = parseInt(Meta.PlayerCoord.toString().split(":")[2]); var FleetSpeed = parseInt(Meta.UniverseFleetSpeed); //alert(typeof PlayerG + typeof PlayerSS + typeof PlayerPos); //////////////////////////////////////////////////////////////////////////////// //Calcule la distance parcourue (Amount of galaxies//solar systems//positions travelled //I know this part of the script is hard to follow, if you want to manually test, take a sheet of paper and try it :) var Gtraversees = Math.abs(PlayerG - Message.CoordGalaxie); //Nombre de galaxies traversées pour arriver à destination (ne tient pas en compte les unis circulaires) //amount of galaxies travelled to go to the desintation (don't care of circular universes) var SStraverses = Math.abs(PlayerSS - Message.CoordSS); //amount of SS travelled to go to the desintation (don't care of circular universes) var Postraversees = Math.abs(PlayerPos - Message.CoordPos); //amount of SS travelled to go to the desintation (don't care of circular universes) //alert(typeof Gtraversees + typeof SStraverses + typeof Postraversees + typeof NbG); Message.Gtraversees = Gtraversees; Message.SStraverses = SStraverses; Message.Postraversees = Postraversees; //alert(typeof Message.Gtraversees + typeof Message.SStraverses + typeof Message.Postraversees); if (Gtraversees != 0) { if (Meta.GalaxiesCirculaires == 1) { //Checks if the universe has circular galaxies or not //If the amount of galaxies to travel is longer than half of the universe, that means the fleet has to use the circular universe functionality, for this, we need to check the value //Example : PlayerG (current player coord) = G9, Message.CoordGalaxie (current spy report coord) = G1, amount of galaxies = 11. var NbG_if = NbG / 2 //Example : 11/2 if (Gtraversees > NbG_if) { //Example : Gtraversees = 9-1 = 8, 8 > (11/2), IF OK //if the script is here, that means the amount of galaxies to travel is bigger than half of the universe Gtraversees = 0; if (PlayerG > Message.CoordGalaxie) { //Example : 9 > 1 Gtraversees = NbG + Message.CoordGalaxie; //Example : Gtraversees = 11 + 1 = 12 Message.Gtraversees = Gtraversees - PlayerG; //Example : Gtraversses = 12 - 9 = 3 >>>> G9>G10>G11>G1 = 3 galaxies traveled } else { if (PlayerG < Message.CoordGalaxie) { Gtraversees = NbG - Message.CoordGalaxie; Message.Gtraversees = Gtraversees + PlayerG; //alert(Gtraversees + ',' + NbG + ',' + PlayerG + ',' + Message.CoordGalaxie); } } } } //If Gtraversees hasn't been modified yet, that's because the amount of galaxies to travel is smaller than half of the universe. By the way, at this part of the script, Gtraversees is always smaller than half of the universe if we are in a circular universe. Message.SStraverses = 0; Message.Postraversees = 0; Message.TempsTrajetPT = Math.round(Math.round((10 + (35000 / 100 * Math.sqrt((Message.Gtraversees * 20000) * 1000 / PTSpeed)))) / FleetSpeed) * TravelTimeType; //Travel time for small cargo //TravelTimeType is configured by user : you can select a travel or a travel+back time Message.TempsTrajetPT_A = Math.round(Math.round((10 + (35000 / 100 * Math.sqrt((Message.Gtraversees * 20000) * 1000 / PTSpeed)))) / FleetSpeed); Message.TempsTrajetPT_AR = Math.round(Math.round((10 + (35000 / 100 * Math.sqrt((Message.Gtraversees * 20000) * 1000 / PTSpeed)))) / FleetSpeed) * 2; Message.TempsTrajetGT = Math.round(Math.round((10 + (35000 / 100 * Math.sqrt((Message.Gtraversees * 20000) * 1000 / GTSpeed)))) / FleetSpeed) * TravelTimeType; //Travel time for heavy cargo //TravelTimeType is configured by user : you can select a travel or a travel+back time Message.TempsTrajetGT_A = Math.round(Math.round((10 + (35000 / 100 * Math.sqrt((Message.Gtraversees * 20000) * 1000 / GTSpeed)))) / FleetSpeed); Message.TempsTrajetGT_AR = Math.round(Math.round((10 + (35000 / 100 * Math.sqrt((Message.Gtraversees * 20000) * 1000 / GTSpeed)))) / FleetSpeed) * 2; } else { if (SStraverses != 0) { if (Meta.SystemesCirculaires == 1) { //Checks if the universe has circular systems or not var NbSS_if = NbSS / 2; if (SStraverses > NbSS_if) { SStraverses = 0; if (PlayerSS > Message.CoordSS) { SStraverses = NbSS + Message.CoordSS; Message.SStraverses = SStraverses - PlayerSS; } else { if (PlayerSS < Message.CoordSS) { SStraverses = NbSS - Message.CoordSS; Message.SStraverses = SStraverses + PlayerSS; } } } } Message.Postraversees = 0; Message.TempsTrajetPT = Math.round(Math.round(10 + (35000 / 100 * Math.sqrt((2700 + 95 * Number(Message.SStraverses)) * 1000 / Number(PTSpeed)))) / FleetSpeed) * TravelTimeType; //Travel time for small cargo //TravelTimeType is configured by user : you can select a travel or a travel+back time Message.TempsTrajetPT_A = Math.round(Math.round(10 + (35000 / 100 * Math.sqrt((2700 + 95 * Number(Message.SStraverses)) * 1000 / Number(PTSpeed)))) / FleetSpeed); Message.TempsTrajetPT_AR = Math.round(Math.round(10 + (35000 / 100 * Math.sqrt((2700 + 95 * Number(Message.SStraverses)) * 1000 / Number(PTSpeed)))) / FleetSpeed) * 2; Message.TempsTrajetGT = Math.round(Math.round(10 + (35000 / 100 * Math.sqrt((2700 + 95 * Number(Message.SStraverses)) * 1000 / Number(GTSpeed)))) / FleetSpeed) * TravelTimeType; //Travel time for heavy cargo //TravelTimeType is configured by user : you can select a travel or a travel+back time Message.TempsTrajetGT_A = Math.round(Math.round(10 + (35000 / 100 * Math.sqrt((2700 + 95 * Number(Message.SStraverses)) * 1000 / Number(GTSpeed)))) / FleetSpeed); Message.TempsTrajetGT_AR = Math.round(Math.round(10 + (35000 / 100 * Math.sqrt((2700 + 95 * Number(Message.SStraverses)) * 1000 / Number(GTSpeed)))) / FleetSpeed) * 2; } else { if (Postraversees != 0) { if (PlayerPos > Message.CoordPos) { Message.Postraversees = PlayerPos - Message.CoordPos; } else { if (PlayerPos < Message.CoordPos) { Postraversees = 0; Message.Postraversees = Message.CoordPos - PlayerPos; } } Message.TempsTrajetPT = Math.round(Math.round(10 + ((35000 / 100) * Math.sqrt((1000000 + Message.Postraversees * 5000) / PTSpeed))) / FleetSpeed) * TravelTimeType; //Travel time for small cargo //TravelTimeType is configured by user : you can select a travel or a travel+back time Message.TempsTrajetPT_A = Math.round(Math.round(10 + ((35000 / 100) * Math.sqrt((1000000 + Message.Postraversees * 5000) / PTSpeed))) / FleetSpeed); Message.TempsTrajetPT_AR = Math.round(Math.round(10 + ((35000 / 100) * Math.sqrt((1000000 + Message.Postraversees * 5000) / PTSpeed))) / FleetSpeed) * 2; Message.TempsTrajetGT = Math.round(Math.round(10 + ((35000 / 100) * Math.sqrt((1000000 + Message.Postraversees * 5000) / GTSpeed))) / FleetSpeed) * TravelTimeType; //Travel time for heavy cargo //TravelTimeType is configured by user : you can select a travel or a travel+back time Message.TempsTrajetGT_A = Math.round(Math.round(10 + ((35000 / 100) * Math.sqrt((1000000 + Message.Postraversees * 5000) / GTSpeed))) / FleetSpeed); Message.TempsTrajetGT_AR = Math.round(Math.round(10 + ((35000 / 100) * Math.sqrt((1000000 + Message.Postraversees * 5000) / GTSpeed))) / FleetSpeed) * 2; } } } //alert(Message.CoordPlanete + '-----------------' + Message.Gtraversees +':'+ Message.SStraverses+':'+ Message.Postraversees + '--' + PTSpeed); ////////////////////////////////////////////////////////////////////////////////////////////////////// //Time to travel to the destination (user defined, takes care of TravelTimeType (time travel, or time travel+back)//If the user selected nothing, this will be not computed (and it's not displayed by default, so it's ok) //Displayed in infoboxes, convert timestamps in these proprieties in human readable hours Message.TempsTrajetPT_ADisplayed = secondsToHms(Message.TempsTrajetPT_A); Message.TempsTrajetPT_ARDisplayed = secondsToHms(Message.TempsTrajetPT_AR); Message.TempsTrajetGT_ADisplayed = secondsToHms(Message.TempsTrajetGT_A); Message.TempsTrajetGT_ARDisplayed = secondsToHms(Message.TempsTrajetGT_AR); //checks if the user has selected small or large cargo if (GM_getValue('radio2' + Meta.Universe) === true) { //small cargo selected //Title = Html title for the column where is displayed item Message.TempsTrajetDisplayed = secondsToHms(Message.TempsTrajetPT); } else { if (GM_getValue('radio3' + Meta.Universe) === true) { //heavy cargo selected Message.TempsTrajetDisplayed = secondsToHms(Message.TempsTrajetGT); } } //Compute the clock when your ships arrive to the destination Message.HeureArriveePTRaw = Message.TempsTrajetPT_A + Meta.Timestamp; Message.HeureArriveeGTRaw = Message.TempsTrajetGT_A + Meta.Timestamp; Message.HeureArriveeGTDisplayed = timeConverter(Message.HeureArriveeGTRaw); //Used in infoboxes Message.HeureArriveePTDisplayed = timeConverter(Message.HeureArriveePTRaw); //Used in infoboxes Message.HeureArriveeDisplayed = timeConverter(Message.HeureArriveePTRaw); //Default value, needed because without this, the script doesn't display spy report table if the user never came into the options (it's because of the split) //checks if the user has selected small or large cargo if (GM_getValue('radio4' + Meta.Universe) === true) { //small cargo selected Message.HeureArriveeDisplayed = timeConverter(Message.HeureArriveePTRaw); //Title = Html title for the column where is displayed item } else { if (GM_getValue('radio5' + Meta.Universe) === true) { //heavy cargo selected Message.HeureArriveeDisplayed = timeConverter(Message.HeureArriveeGTRaw); } } //Comput the clocks when your ships comes back Message.HeureRetourGTRaw = Message.TempsTrajetGT_AR + Meta.Timestamp; Message.HeureRetourPTRaw = Message.TempsTrajetPT_AR + Meta.Timestamp; Message.HeureRetourGTDisplayed = timeConverter(Message.HeureRetourGTRaw); //Used in infoboxes Message.HeureRetourPTDisplayed = timeConverter(Message.HeureRetourPTRaw); //Used in infoboxes Message.HeureRetourDisplayed = timeConverter(Message.HeureRetourPTRaw);//Default value, needed because without this, the script doesn't display spy report table if the user never came into the options (it's because of the split) //checks if the user has selected small or large cargo if (GM_getValue('radio6' + Meta.Universe) === true) { //small cargo selected Message.HeureRetourDisplayed = timeConverter(Message.HeureRetourPTRaw); //Title = Html title for the column where is displayed item } else { if (GM_getValue('radio7' + Meta.Universe) === true) { //heavy cargo selected Message.HeureRetourDisplayed = timeConverter(Message.HeureRetourGTRaw); } } //alert(Message.HeureArriveePTDisplayed); //alert(Message.TempsTrajetPTDisplayed); //Compute the profit/hour and profit/hour USM value Message.ProfitsPerHour = parseInt(Message.Loot / (Message.TempsTrajetPT_AR / 3600)); Message.ProfitsPerHour_GT = parseInt(Message.Loot / (Message.TempsTrajetGT_AR / 3600)); Message.ProfitsPerHourUSM = parseInt(Message.USMPille / (Message.TempsTrajetPT_AR / 3600)); Message.ProfitsPerHourUSM_GT = parseInt(Message.USMPille / (Message.TempsTrajetGT_AR / 3600)); //checks if the user has selected small or large cargo, and after, checks if the user has selected MSU or not if (GM_getValue('radio8' + Meta.Universe) === true) { //small cargo selected if (GM_getValue('radio10' + Meta.Universe) === true) { //standard values Message.ProfitsPerHourDisplayed = ThousandSeparator(Message.ProfitsPerHour); Message.ProfitsPerHourUsed = Message.ProfitsPerHour; } else { if (GM_getValue('radio11' + Meta.Universe) === true) { //msu values Message.ProfitsPerHourDisplayed = ThousandSeparator(Message.ProfitsPerHourUSM); Message.ProfitsPerHourUsed = Message.ProfitsPerHourUSM; } } //Title = Html title for the column where is displayed item } else { if (GM_getValue('radio9' + Meta.Universe) === true) { //heavy cargo selected if (GM_getValue('radio10' + Meta.Universe) === true) { //standard values Message.ProfitsPerHourDisplayed = ThousandSeparator(Message.ProfitsPerHour_GT); Message.ProfitsPerHourUsed = Message.ProfitsPerHour_GT; } else { if (GM_getValue('radio11' + Meta.Universe) === true) { //msu values Message.ProfitsPerHourDisplayed = ThousandSeparator(Message.ProfitsPerHourUSM_GT); Message.ProfitsPerHourUsed = Message.ProfitsPerHourUSM_GT; } } } } //TimeTitle is used to create the tooltip of time related columns Message.TimeTitle = '(<FONT color=#FF8F35>' + Langue.PT.split("|||")[LangueIndex] + '</FONT>) ' + Langue.TempsTrajet_A.split("|||")[LangueIndex] + ' : <FONT color=#FF8F35>' + Message.TempsTrajetPT_ADisplayed + '</FONT><br />(<FONT color=#FF8F35>' + Langue.PT.split("|||")[LangueIndex] + '</FONT>) ' + Langue.TempsTrajet_AR.split("|||")[LangueIndex] + ' : <FONT color=#FF8F35>' + Message.TempsTrajetPT_ARDisplayed + '</FONT><br />(<FONT color=#FF8F35>' + Langue.PT.split("|||")[LangueIndex] + '</FONT>) ' + Langue.HeureArrivee.split("|||")[LangueIndex] + ' : <FONT color=#FF8F35>' + Message.HeureArriveePTDisplayed.split(" ")[1] + '</FONT><br />(<FONT color=#FF8F35>' + Langue.PT.split("|||")[LangueIndex] + '</FONT>) ' + Langue.HeureRetour.split("|||")[LangueIndex] + ' : <FONT color=#FF8F35>' + Message.HeureRetourPTDisplayed.split(" ")[1] + '</FONT><br />' + '(<FONT color=#00A0B6>' + Langue.GT.split("|||")[LangueIndex] + '</FONT>) ' + Langue.TempsTrajet_A.split("|||")[LangueIndex] + ' : <FONT color=#00A0B6>' + Message.TempsTrajetGT_ADisplayed + '</FONT><br />(<FONT color=#00A0B6>' + Langue.GT.split("|||")[LangueIndex] + '</FONT>) ' + Langue.TempsTrajet_AR.split("|||")[LangueIndex] + ' : <FONT color=#00A0B6>' + Message.TempsTrajetGT_ARDisplayed + '</FONT><br />(<FONT color=#00A0B6>' + Langue.GT.split("|||")[LangueIndex] + '</FONT>) ' + Langue.HeureArrivee.split("|||")[LangueIndex] + ' : <FONT color=#00A0B6>' + Message.HeureArriveeGTDisplayed.split(" ")[1] + '</FONT><br />(<FONT color=#00A0B6>' + Langue.GT.split("|||")[LangueIndex] + '</FONT>) ' + Langue.HeureRetour.split("|||")[LangueIndex] + ' : <FONT color=#00A0B6>' + Message.HeureRetourGTDisplayed.split(" ")[1] + '</FONT><br />'; //alert(Message.ProfitsPerHour); return Message; } //Tri Des données function Tri(a,b) { if (a[currentSort] < b[currentSort]) return 1; if (a[currentSort] > b[currentSort]) return -1; return 0; } //Fonction de transformation d'un RE en chaine de caractères OBJ->STR function ConvertObjToString(obj) { var Txt = (obj.Id + ":--:" + obj.Metal + ":--:" + obj.Cristal + ":--:" + obj.Deuterium + ":--:" + obj.CoordPlanete + ":--:" + obj.Butin + ":--:" + obj.Flotte + ":--:" + obj.FlotteFinal + ":--:" + obj.FlotteDisplayed + ":--:" + obj.Defense + ":--:" + obj.DefenseFinal + ":--:" + obj.DefenseDisplayed + ":--:" + obj.Activite + ":--:" + obj.Date + ":--:" + obj.Player + ":--:" + obj.PlayerStatus + ":--:" + obj.PlayerIcon + ":--:" + obj.LineColor + ":--:" + obj.PlayerColor + ":--:" + obj.Display + ":--:" + obj.PTAttacked + ":--:" + obj.GTAttacked + ":--:" + obj.Moon + ":--:" + obj.IdIg + ":--:" + obj.API + ":--:" + obj.RCRecycled + ":--:" + obj.PT + ":--:" + obj.GT + ":--:" + obj.Cle + ":--:" + obj.Clo + ":--:" + obj.Cruz + ":--:" + obj.VB + ":--:" + obj.VC + ":--:" + obj.RC + ":--:" + obj.Sonde + ":--:" + obj.BB + ":--:" + obj.Sat + ":--:" + obj.Dest + ":--:" + obj.RIP + ":--:" + obj.GGlider + ":--:" + obj.LM + ":--:" + obj.LL + ":--:" + obj.LLo + ":--:" + obj.Gauss + ":--:" + obj.Ion + ":--:" + obj.Plasma + ":--:" + obj.PB + ":--:" + obj.GB + ":--:" + obj.Weapons + ":--:" + obj.Shield + ":--:" + obj.Armour); /////////0//////////////////1//////////////////////2//////////////////////////3/////////////////////4//////////////////////////5///////////////////////6////////////////////////7//////////////////8///////////////////////////////9////////////////////////10/////////////////////////11///////////////////////////////12//////////////////13/////////////////////14////////////////////15////////////////////////16///////////////////////17/////////////////////////18/////////////////////////19/////////////////////////20////////////////////////21//////////////////////22/////////////////23//////////////////24///////////////////////25//////////////////26////////////////27////////////////28//////////////////29//////////////////30//////////////////31///////////////32///////////////33//////////////////34//////////////////35///////////////36/////////////////37////////////////////38///////////////////39////////////////40/////////////////41//////////////////42///////////////////////43//////////////44/////////////////45////////////////46////////////////47//////////////////48////////////////////49///////////////////////50 return Txt; } //Fonction de transformation d'un message sous forme de chaine de caractère en objet STR->OBJ function ConvertStringToObj(StrMessage) { var SplitStrMessage = StrMessage.split(":--:"); var Message = {}; Message.Id = SplitStrMessage[0]; Message.Metal = Number(SplitStrMessage[1]); Message.Cristal = Number(SplitStrMessage[2]); Message.Deuterium = Number(SplitStrMessage[3]); Message.CoordPlanete = SplitStrMessage[4]; Message.Butin = Number(SplitStrMessage[5]); Message.Flotte = SplitStrMessage[6]; Message.FlotteFinal = Number(SplitStrMessage[7]); Message.FlotteDisplayed = SplitStrMessage[8]; Message.Defense = SplitStrMessage[9]; Message.DefenseFinal = Number(SplitStrMessage[10]); Message.DefenseDisplayed = SplitStrMessage[11]; Message.Activite = SplitStrMessage[12]; Message.Date = SplitStrMessage[13]; Message.Player = String(SplitStrMessage[14]); Message.PlayerStatus = SplitStrMessage[15]; Message.PlayerIcon = SplitStrMessage[16]; Message.LineColor = SplitStrMessage[17]; Message.PlayerColor = SplitStrMessage[18]; Message.Display = SplitStrMessage[19]; Message.PTAttacked = SplitStrMessage[20]; Message.GTAttacked = SplitStrMessage[21]; Message.Moon = SplitStrMessage[22]; Message.IdIg = SplitStrMessage[23]; Message.API = SplitStrMessage[24]; Message.RCRecycled = SplitStrMessage[25]; Message.PT = SplitStrMessage[26]; Message.GT = SplitStrMessage[27]; Message.Cle = SplitStrMessage[28]; Message.Clo = SplitStrMessage[29]; Message.Cruz = SplitStrMessage[30]; Message.VB = SplitStrMessage[31]; Message.VC = SplitStrMessage[32]; Message.RC = SplitStrMessage[33]; Message.Sonde = SplitStrMessage[34]; Message.BB = SplitStrMessage[35]; Message.Sat = SplitStrMessage[36]; Message.Dest = SplitStrMessage[37]; Message.RIP = SplitStrMessage[38]; Message.GGlider = SplitStrMessage[39]; Message.LM = SplitStrMessage[40]; Message.LL = SplitStrMessage[41]; Message.LLo = SplitStrMessage[42]; Message.Gauss = SplitStrMessage[43]; Message.Ion = SplitStrMessage[44]; Message.Plasma = SplitStrMessage[45]; Message.PB = SplitStrMessage[46]; Message.GB = SplitStrMessage[47]; Message.Weapons = SplitStrMessage[48]; Message.Shield = SplitStrMessage[49]; Message.Armour = SplitStrMessage[50]; return Message; } //Fonction d'enregistrement des RE function SetStoredRE(Index, Message) { var MetaLocal = MetaDatas(); //Appel de la fonction convertissant les objets en chaine de caractères StringMessage = ConvertObjToString(Message); GM_setValue('MessageStoredNumber'+Index + MetaLocal.Universe, StringMessage); } //Fonction de récupération des RE enregistrés function GetStoredRE(Index) { var MetaLocal = MetaDatas(); var Message = GM_getValue('MessageStoredNumber'+Index + MetaLocal.Universe); return Message; } //Fonction de suppression de RE function DelStoredRE(Index) { var MetaLocal = MetaDatas(); GM_deleteValue('MessageStoredNumber'+Index + MetaLocal.Universe); } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //FONCTIONS DE TRANSFORMATION DES CHAINES DE CARACTERES//////////////////////////////////CONVERTERS/////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //Transformation des nombres (nombres transformés en valeurs décimales) function ConvertRENumbers(Nombre) { var Meta = MetaDatas(); var LangueIndex = GetLangue(); //Définit la langue et quelle langue appliquer en fonction de l'utilisateur ou de la langue de l'univers //Récupération du choix utilisateur concernant les indicateurs millions/milliards if (GM_getValue('text11' + Meta.Universe)) { var IndicateurMilliard = GM_getValue('text11' + Meta.Universe); } else { var IndicateurMilliard = Langue.Milliard.split("|||")[LangueIndex]; //Récupère la valeur par défaut (correspond à ce qui est inscrit dans la langue) } if (GM_getValue('text12' + Meta.Universe)) { var IndicateurMillions = GM_getValue('text12' + Meta.Universe); } else { var IndicateurMillions = Langue.Million.split("|||")[LangueIndex]; //Récupère la valeur par défaut (correspond à ce qui est inscrit dans la langue) } //alert(Nombre); var MdFound = Nombre.indexOf(IndicateurMilliard); //ATTENTION LANGUE var MFound = Nombre.indexOf(IndicateurMillions); //ATTENTION LANGUE if (MdFound > -1) { //alert("Miliard trouvé!"); //permet de savoir si un miliard est trouvé Nombre = Nombre.replace(/[^0-9\.,\n]|,[^0-9]/g, ""); Nombre = Nombre.replace(",","."); Nombre = Nombre * 1000000000; } else { if (MFound > -1) { //alert("Million trouvé !"); //permet de savoir si un million est trouvé Nombre = Nombre.replace(/[^0-9\.,\n]|,[^0-9]/g, ""); Nombre = Nombre.replace(",","."); Nombre = Nombre * 1000000; } else { //dans le cas où on a moins d'un million Nombre = Nombre.replace(".",""); } } return Nombre; } //Séparateurs de miliers function ThousandSeparator(num) { return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, "."); } //Conversion de secondes en heures, minutes et secondes function secondsToHms(d) { d = Number(d); var h = Math.floor(d / 3600); var m = Math.floor(d % 3600 / 60); var s = Math.floor(d % 3600 % 60); return ((h > 0 ? h + "h " + (m < 10 ? "0" : "") : "") + m + "m " + (s < 10 ? "0" : "") + s + "s"); } function timeConverter(UNIX_timestamp){ //By Chin, http://stackoverflow.com/a/6078873 - modified to fit with ogame clock style standard var a = new Date(UNIX_timestamp * 1000); var year = a.getFullYear(); var month = a.getMonth(); month = addZero(month); var date = a.getDate(); date = addZero(date); var hour = a.getHours(); hour = addZero(hour); var min = a.getMinutes(); min = addZero(min); var sec = a.getSeconds(); sec = addZero(sec); var time = date + '.' + month + '.' + year + ' ' + hour + ':' + min + ':' + sec ; return time; } function addZero(Numvalue){ //add a 0 before the input value if (Numvalue < 10) { Numvalue = ("0" + Numvalue); } return Numvalue; } ////////////////////////////////////////////////////////////////////////////////////////////////////// //FONCTIONS DIVERSES////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////// //Comptabilisation du nombre de messages function NbMessages() { // var NbMsg = 0; NbMsg = document.querySelectorAll("tbody")[5].rows.length; //count the amount of "tr" inside tbody number 5 (tbody number 5 is the table where messages are) console.log('[O-Table] : Nb Lines : ' + NbMsg); return NbMsg; } //Récupération de l'univers, de ses attributs, de la position actuelle, du timestamp, langue function MetaDatas() { var Meta = {}; Meta.Universe = (window.location.href).split("/")[2]; Meta.UniverseEcoSpeed = 1; Meta.UniverseFleetSpeed = 1; //OLD SCHOOL - GET TIME DIFFERENCE with user and server (user selected) if (GM_getValue('DropDown4' + Meta.Universe)) { var OldSchool_TimeDifference = GM_getValue('DropDown4' + Meta.Universe); } else { var OldSchool_TimeDifference = 0; //Valeur par défaut } Meta.Timestamp = parseInt(Date.now() / 1000) + parseInt(OldSchool_TimeDifference); //Get PC timestamp Clock Meta.Langue = "en"; Meta.PlayerCoord = document.querySelectorAll("#header_top")[0].querySelectorAll("select")[0].textContent; Meta.PlayerCoord = (/[[0-9]+:[0-9]+:[0-9]+]/.exec(Meta.PlayerCoord)); //keeps the "[]" to avoid coord issues when searching coords Meta.PlayerCoord = (/[0-9]+:[0-9]+:[0-9]+/.exec(Meta.PlayerCoord)); //removes the "[]" Meta.GalaxiesCirculaires = 0; Meta.SystemesCirculaires = 0; Meta.TxCDRFleet = 30; //Fleet DF Meta.TxCDRDef = 0; //Def DF return Meta; } //Clonage d'objet - Ne fonctionne pas sur les anciens navigateurs (en tout cas sur chrome 35) ---> MAJ : devrait fonctionner maintenant (pas testé ceci dit ) function clone(obj){ var OBJSTR = ConvertObjToString(obj); var OBJCOPY = ConvertStringToObj(OBJSTR); return OBJCOPY; } //Récupération de la langue function GetLangue() { var MetaLocal = MetaDatas(); //Récupération du choix qu'a mis l'utilisateur dans la langue if (GM_getValue('DropDown0' + MetaLocal.Universe)) { var LangueIndex = GM_getValue('DropDown1' + MetaLocal.Universe); } else { if (MetaLocal.Langue == "fr") { //Config par défaut, lorsqu'aucune option n'est validée var LangueIndex = 0; //(FR) } else { var LangueIndex = 1; //(EN) //Met tout le reste en Anglais } } return LangueIndex; } ///////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////VARIABLES GLOBALES//////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////// var StringMessage; //Variable utilisée dans la sauvegarde des RE sous forme de texte///////////////////// var IdMessages; //Variable utilisée pour stocker les id messages, ce qui facilite leur vérification lors de l'intégration d'un nouveau message var MessageIndex = 0; //Variable permettant d'indexer les messages sauvegardés dans le script//////////// var NbColumnsDisplayed = 0; //Variable indiquant le nombre de colonnes affichées dans le tableau HTML (tableau contenant les RE) var NbItemsDisplayed = 0; //Variable indiquant le nombre de lignes affichées dans le tableau HTML (tableau contenant les RE) var TriDone = 0; //Variable indiquant au script si un tri a déja été réalisé ou non var currentID; //Variable utilisée pour les boutons de tri (l'entête du tableau), dans la fonction initialisation tableau. Permet de faire passer un nom de propriété d'objet variable entre la fonction et le trieur var currentSort = 'Loot'; //Variable used to know by which column to sort the board (user selected) --> default value if (GM_getValue('DropDown3' + MetaGlobal.Universe)) { //Vérifie la présence d'une donnée sauvegardée ------------------- Tri par défaut currentSort = GM_getValue('DropDown3' + MetaGlobal.Universe); } var OgameSessionID = (window.location.href).split("session=")[1] var Version = "1.0.2"; var CurrentURL = window.location.href; /////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////LANGUE////////////////// GLOBALES///////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////// // Explications : La variable langue est un objet, dans laquelle on retrouve toutes les langues (un attribut = une zone de texte dans le script). // Chaque attribut contient plusieurs langues, on split l'attribut avec le bon n° pour sélectionner la bonne langue exemple (FR = 0, EN = 1). On sépare chaque langue avec "|||". //TEMPLATE : Langue.XXXXXXXX = 'FR' + '|||' + 'EN' + '|||' + OTHER LANGUAGE var Langue = {}; Langue.BoutonAfficherTableau = 'Afficher Tableau' + '|||' + 'Display Board'; Langue.BoutonAfficherTableauTITLE = 'Affiche le tableau lorsque des RE ont été collectés' + '|||' + 'Displays the board when you have collected some spy reports'; Langue.BoutonCollecterMessages = 'Collecter Messages' + '|||' + 'Get Messages'; Langue.BoutonCollecterMessagesTITLE = 'Collecte les RE présents sur cette page' + '|||' + 'Collects spy reports from this page'; Langue.BoutonMasquerTableau = 'Masquer Tableau' + '|||' + 'Hide Board'; Langue.BoutonMasquerTableauTITLE = 'Cache le tableau lorsqu`il est affiché' + '|||' + 'Hide the board when the board is displayed'; Langue.BoutonOptions = 'Options' + '|||' + 'Options'; Langue.BoutonOptionsTITLE = 'Permet d`accéder aux options du script' + '|||' + 'Access to the script options'; Langue.BoutonViderScript = 'Vider Tableau' + '|||' + 'Empty Table'; Langue.BoutonViderScriptTITLE = 'Vide le tableau de ses REs' + '|||' + 'Empty the spy reports table'; Langue.InfoPremiereVague = 'Première Vague' + '|||' + 'First Wave'; Langue.InfoSecondeVague = 'Seconde Vague' + '|||' + 'Second Wave'; Langue.InfoTroisiemeVague = 'Troisième Vague' + '|||' + 'Third Wave'; Langue.InfoSlots = 'slots' + '|||' + 'slots'; Langue.InfoRenta = 'Renta' + '|||' + 'Profits'; Langue.InfoRentaUSM = 'Renta USM' + '|||' + 'Profits MSU'; Langue.InfoMoyParSlot = 'Moy/Slot' + '|||' + 'Avg/Slot'; Langue.RELine = '#' + '|||' + '#'; Langue.RELineSec = 'Numéro de ligne' + '|||' + 'Line number'; Langue.RECoords = 'Coords' + '|||' + 'Coords'; Langue.REPlanet = 'Planète' + '|||' + 'Planet'; Langue.REAge = 'Age' + '|||' + 'Age'; Langue.RETimeTravel = 'Voyage' + '|||' + 'Travel'; Langue.RETimeTravelSec = 'Temps de voyage' + '|||' + 'Time travel'; Langue.RETimeTravelAR = 'Voyage A/R' + '|||' + 'Return trip'; Langue.REMetal = 'Métal' + '|||' + 'Metal'; Langue.RECristal = 'Cristal' + '|||' + 'Crystal'; Langue.REDeut = 'Deut' + '|||' + 'Deut'; Langue.RETotal = 'Total' + '|||' + 'Total'; Langue.RELoot = 'Pillage' + '|||' + 'Profits'; Langue.RELootHour = 'Pillage/H' + '|||' + 'Profits/H'; Langue.RELootUSM = 'Pillage USM' + '|||' + 'Profits MSU'; Langue.REButinRatio = 'Ratio' + '|||' + 'Ratio'; Langue.REFlotte = 'Flotte' + '|||' + 'Fleet'; Langue.REDefense = 'Défense' + '|||' + 'Defense'; Langue.RECDR = 'Champ de débris' + '|||' + 'Debris field'; Langue.RatioCDRFlotte = 'Pourcentage CDR Flotte' + '|||' + 'Fleet Debris field ratio'; Langue.RatioCDRDefense = 'Pourcentage CDR Defense' + '|||' + 'Defense Debris field ratio'; Langue.Recycleurs = 'Recycleurs nécessaires' + '|||' + 'Recyclers needed'; Langue.Simuler = 'Cliquer pour simuler - Ne prend pas en compte les GammaGlider, quantité de GammaGlider dans ce RE : ' + '|||' + 'Click to simulate - GammaGlider not inclued, amount of GammaGlider in this SR : '; Langue.Sonder = 'Cliquer pour sonder' + '|||' + 'Click to spy'; Langue.Recycler = 'Cliquer pour envoyer des recycleurs' + '|||' + 'Click to send recyclers'; Langue.TempsTrajet_A = 'Trajet Aller' + '|||' + 'Travel time'; Langue.TempsTrajet_AR = 'Trajet Aller/Retour' + '|||' + 'Travel+Back time'; Langue.HeureArrivee = 'Arrivée à' + '|||' + 'Arrives at'; Langue.HeureRetour = 'Retour à ' + '|||' + 'Back at'; Langue.OptionsCouleurAA = 'Couleur lors du passage de la souris sur une ligne (Ne fonctionne pas sur Epic Blue)' + '|||' + 'Color when you put your mouse above spy reports lines (Not working on Epic Blue)'; Langue.OptionsCouleurAB = 'Couleur des boutons attaquer/recycler par défaut' + '|||' + 'Default attack/recycle buttons (not clicked)'; Langue.OptionsCouleurAC = 'Couleur des boutons attaquer/recycler lorsque l`on passe la souris dessus' + '|||' + 'Color of attack/recycle buttons when you put your mouse above'; Langue.OptionsCouleurAD = 'Couleur des boutons attaquer/recycler lorsque l`on a cliqué dessus' + '|||' + 'Color of attack/recycle buttons when you clicked on it'; Langue.OptionsCouleurAE = 'Couleur des boutons attaquer/recycler lorsque l`on a cliqué et que l`on a actualisé la page' + '|||' + 'Color of attack/recycle buttons when you clicked on it and refreshed the page'; Langue.OptionsColorierEn = 'colorier en' + '|||' + 'colorize in'; Langue.OptionsTextesAA = 'Lorsque la renta dépasse' + '|||' + 'When profits are bigger than'; Langue.OptionsTextesAB = 'Lorsque la renta USM dépasse' + '|||' + 'When profits MSU are bigger than'; Langue.OptionsTextesAC = 'Lorsque la flotte dépasse' + '|||' + 'When the fleet is bigger than'; Langue.OptionsTextesAD = 'Lorsque la défense dépasse' + '|||' + 'When the defense is bigger than'; Langue.OptionsTextesAE = 'Lorsque l`âge du RE dépasse' + '|||' + 'When the spy report is older than'; Langue.OptionsTextesAF = 'Tableau infos : Lorsque la renta d`une vague dépasse' + '|||' + 'Info board : When the wave profits are bigger than'; Langue.OptionsTextesAG = 'Envoyer' + '|||' + 'Send'; Langue.OptionsTextesAH = 'de flotte en plus que nécessaire' + '|||' + 'more ships than necessary'; Langue.OptionsTextesAI = 'Ne pas afficher un RE si la flotte dépasse' + '|||' + 'Don`t display a spy report with a fleet bigger than'; Langue.OptionsTextesAJ = 'Ne pas afficher un RE si la défense dépasse' + '|||' + 'Don`t display a spy report with a defense bigger than'; Langue.OptionsTextesAK = 'Ne pas afficher un RE si son âge dépasse' + '|||' + 'Don`t display a spy report older than'; Langue.OptionsTextesAL = 'heures' + '|||' + 'hours'; Langue.OptionsTextesAM = 'Taux de commerce (Pour le taux USM)' + '|||' + 'Trade rates (for MSU)'; Langue.OptionsTextesAP = 'Langue' + '|||' + 'Language'; Langue.OptionsTextesAQ = 'Langue (réglage manuel - à utiliser lorsque la langue n`existe pas)' + '|||' + 'Language (manual setting - to use when you don`t find your language on the list above)'; Langue.OptionsTextesAR = 'Indicateur milliards' + '|||' + 'Billions indicator'; Langue.OptionsTextesAS = 'Indicateur millions' + '|||' + 'Millions indicator'; Langue.OptionsTextesAT = 'Indicateur milliers' + '|||' + 'Thousand indicator'; Langue.OptionsTextesAU = 'Lors de la collecte des messages, générer des secondes vagues (cocher la case)' + '|||' + 'When you collect messages, ask the script to create secondary waves (check the box)'; Langue.OptionsTextesAV = 'Lors de la collecte des messages, générer une seconde vague à partir d`une renta de' + '|||' + 'When you collect messages, generate secondary waves when the profit is higher than'; Langue.OptionsTextesAW = 'Afficher le tableau récapitulatif des vagues' + '|||' + 'Display the information board'; Langue.OptionsTextesAX = 'Tableau récapitulatif : Nombre de slots par vague' + '|||' + 'Info Board : amount of slots per wave'; Langue.OptionsTextesAY = 'Tableau récapitulatif : Afficher la ligne indiquant la Renta USM d`une vague' + '|||' + 'Info Board : display the line that shows MSU profits for each wave'; Langue.OptionsTextesAZ = 'Ouvrir les attaques dans un nouvel onglet' + '|||' + 'Open attacks in a new tab'; Langue.OptionsTextesBA = 'Collecter automatiquement les Rapports d`espionnages' + '|||' + 'Automatically collect spy reports'; Langue.OptionsTextesBB = 'Afficher automatiquement le tableau lorsque celui-ci contient au moins un Rapport d`espionnage' + '|||' + 'Automatically display the board if it has at least one spy report'; Langue.OptionsTextesBC = 'Affichage pour appareil mobile (en construction)' + '|||' + 'Mobile display style (under construction)'; Langue.OptionsTextesBD = 'de Métal valent' + '|||' + 'of Metal is equal to'; Langue.OptionsTextesBE = 'de Cristal' + '|||' + 'of Crystal is equal to'; Langue.OptionsTextesBF = 'de Deut' + '|||' + 'of Deut'; Langue.OptionsTextesBG = 'Taille du texte dans le tableau contenant les RE' + '|||' + 'Text size in spy reports board'; Langue.OptionsTextesBH = 'Lorsque la renta/heure dépasse' + '|||' + 'When profits/hour are bigger than'; Langue.OptionsTextesBI = 'Trier le tableau à partir de la colonne ' + '|||' + 'Sort the board by using column'; Langue.OptionsTextesBJ = 'Cacher un RE si la renta est inférieure à ' + '|||' + 'Hide a spy report if profits are smaller than'; Langue.OptionsOldSchoolAA = 'Décalage horaire entre vous et le serveur (en heures)' + '|||' + 'Differences of hours between you and the server'; Langue.OptionsOldSchoolAB = 'Note : L`heure du serveur varie entre l`hiver et l`été (changements fin mars et fin octobre)' + '|||' + 'Note : Server time is different between winter and summer (Changes are at the end of march and at the end of october)'; Langue.OptionsOldSchoolAC = 'Nombre de sondes à envoyer lors d`un espionnage' + '|||' + 'Amount of probes to send when you spy'; Langue.OptionsCBoxAA = 'Afficher les n° de ligne à gauche' + '|||' + 'Display the left line number column'; Langue.OptionsCBoxAB = 'Afficher les n° de ligne à droite' + '|||' + 'Display the right line number column'; Langue.OptionsCBoxAC = 'Afficher les coordonnées' + '|||' + 'Display the coordinates column'; Langue.OptionsCBoxAD = 'Afficher le métal à piller' + '|||' + 'Display the metal profits column'; Langue.OptionsCBoxAE = 'Afficher le cristal à piller' + '|||' + 'Display the crystal profits column'; Langue.OptionsCBoxAF = 'Afficher le deutérium à piller' + '|||' + 'Display the deuterium profits column'; Langue.OptionsCBoxAG = 'Afficher le total des ressources présent sur le RE' + '|||' + 'Display the column containing the total amount of resources inside the RE'; Langue.OptionsCBoxAH = 'Afficher le ratio de butin' + '|||' + 'Display the profit ratio column'; Langue.OptionsCBoxAI = 'Afficher la flotte' + '|||' + 'Display the fleet column'; Langue.OptionsCBoxAJ = 'Afficher la défense' + '|||' + 'Display the defense column'; Langue.OptionsCBoxAK = 'Afficher la quantité de ressources à piller' + '|||' + 'Display the profit column'; Langue.OptionsCBoxAL = 'Afficher la quantité de ressources à piller en USM' + '|||' + 'Display the MSU profit column'; Langue.OptionsCBoxAM = 'Afficher le nom des planètes' + '|||' + 'Display the planet name column'; Langue.OptionsCBoxAN = 'Afficher les boutons PT' + '|||' + 'Display the light cargo buttons'; Langue.OptionsCBoxAO = 'Afficher les boutons GT' + '|||' + 'Display the heavy cargo buttons'; Langue.OptionsCBoxAP = 'Afficher l`âge du RE' + '|||' + 'Display spy report Age column'; Langue.OptionsCBoxAQ = 'Afficher le bouton supprimer' + '|||' + 'Display the delete buttons'; Langue.OptionsCBoxAR = 'Afficher le bouton plus de détails' + '|||' + 'Display the button "More details"'; Langue.OptionsCBoxAS = 'Afficher le bouton Recycleurs' + '|||' + 'Display the Recycle button'; Langue.OptionsCBoxAT = 'Afficher la colonne temps de trajet' + '|||' + 'Display travel time column'; Langue.OptionsCBoxAU = 'Afficher la colonne heure d`arrivée' + '|||' + 'Display the arrival time column'; Langue.OptionsCBoxAV = 'Afficher la colonne heure de retour' + '|||' + 'Display the back time column'; Langue.OptionsCBoxAW = 'Afficher la colonne Renta/Heure' + '|||' + 'Display the Profits/Hour column'; Langue.OptionsTechsAA = 'Réacteur à combustion' + '|||' + 'Combustion drive'; Langue.OptionsTechsAB = 'Réacteur à impulsion' + '|||' + 'Impulse drive'; Langue.OptionsTechsAC = 'Propulsion hyperespace' + '|||' + 'Hyperespace drive'; Langue.OptionsTechsAD = 'Flotte : Pourcentage CDR de l`uni' + '|||' + 'Fleet : Debrits field percent'; Langue.OptionsTechsAE = 'Defense : Pourcentage CDR de l`uni' + '|||' + 'Defense : Debrits field percent'; Langue.OptionsTechsAF = 'Technologie Armes' + '|||' + 'Weapons Technology'; Langue.OptionsTechsAG = 'Technologie Bouclier' + '|||' + 'Shielding Technology'; Langue.OptionsTechsAH = 'Technologie Protection des vaisseaux spatiaux' + '|||' + 'Armour Technology'; Langue.OptionsTechsAI = 'Nombre de systèmes solaires par galaxie' + '|||' + 'Amount of solar systems per galaxies'; Langue.OptionsTechsAJ = 'Nombre de galaxies dans l`univers' + '|||' + 'Amount of galaxies in this universe'; Langue.OptionsMainAA = 'Options de couleurs' + '|||' + 'Color options'; Langue.OptionsMainAB = 'Sauvegarder' + '|||' + 'Save'; Langue.OptionsMainAC = 'Affichage des colonnes' + '|||' + 'Board columns'; Langue.OptionsMainAD = 'Options globales' + '|||' + 'Global options'; Langue.OptionsMainAE = 'Technologies du compte & Paramètres de l`univers' + '|||' + 'Account Techs and Universe Settings'; Langue.VaguePri = 'Vague Principale' + '|||' + 'First Wave'; Langue.VagueSec = 'Vague Secondaire' + '|||' + 'Secondary wave'; Langue.Aller = 'aller' + '|||' + 'travel'; Langue.AllerRetour = 'aller/retour' + '|||' + 'travel and back'; Langue.PT = 'PT' + '|||' + 'SC'; Langue.GT = 'GT' + '|||' + 'LC'; Langue.RC = 'RC' + '|||' + 'RC'; Langue.Milliard = 'Md' + '|||' + 'Bn'; Langue.Million = 'M' + '|||' + 'M'; Langue.Brut = 'Standard' + '|||' + 'Standard'; Langue.Ressource = 'Ress' + '|||' + 'Res'; Langue.RessourceCDR = 'Ress+CDR' + '|||' + 'Res+DF'; Langue.USM = 'USM' + '|||' + 'MSU'; Langue.Version = 'O-Table RETRO Version' + '|||' + 'O-Table RETRO Version'; Langue.OTABLERedesign = 'Cliquer ICI : Installer O-Table Redisgn' + '|||' + 'Click Here : Install O-Table Redesign' /////////////////////////////////////////////////////////////////////////////////////////////////////// //INITIALISATION DU SCRIPT///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////// function affiche_script() { /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //Cette zone a été largement inspirée de raidstable, je tiens donc à le préciser (Merci à Xanatos, Vulca et Wukodlak pour leur travail) if(document.querySelector('#agoButtons')) { document.querySelector('#agoButtons').parentNode.removeChild(document.querySelector('#agoButtons')) //Suppression des boutons AGO en haut des messages if(document.querySelector('#agoSpyReportOverview')) { document.querySelector('#agoSpyReportOverview').parentNode.removeChild(document.querySelector('#agoSpyReportOverview')) //Suppression du tableau AGO } } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// if (document.getElementById("AfficherTableau")) { } else { try { Display(); } catch(err){ } } } ///////LAUNCHING SCRIPT PAGE MESSAGES if(CurrentURL.split("=")[1].split("&")[0] == "messages"){ setInterval(affiche_script, 300); } //////LAUNCHING SCRIPT PAGE FLOTTE1 if(CurrentURL.split("=")[1].split("&")[0] == "flotten1"){ var PTBool = CurrentURL.search("am202="); var GTBool = CurrentURL.search("am203="); var RCBool = CurrentURL.search("am209="); var SondeBool = CurrentURL.search("am210="); if (PTBool >= 0 ){ var NbPTPageOne = CurrentURL.split("am202=")[1].split("&")[0]; try{ document.getElementsByName("ship202")[0].value = NbPTPageOne; console.log("[O-Table] : Amount of Small cargos correctly set"); } catch(err){ console.log("[O-Table] : No Small cargos on this planet"); } } if (GTBool >= 0 ){ var NbGTPageOne = CurrentURL.split("am203=")[1].split("&")[0]; try { document.getElementsByName("ship203")[0].value = NbGTPageOne; console.log("[O-Table] : Amount of Large cargos correctly set"); } catch(err){ console.log("[O-Table] : No Large cargos on this planet"); } } if (RCBool >= 0 ){ var NbRCPageOne = CurrentURL.split("am209=")[1].split("&")[0]; try { document.getElementsByName("ship209")[0].value = NbRCPageOne; console.log("[O-Table] : Amount of Recyclers correctly set"); } catch(err){ console.log("[O-Table] : No Recyclers on this planet"); } } if (SondeBool >= 0 ){ var NbSondePageOne = CurrentURL.split("am210=")[1].split("&")[0]; try { document.getElementsByName("ship210")[0].value = NbSondePageOne; console.log("[O-Table] : Amount of Probes correctly set"); } catch(err){ console.log("[O-Table] : No Probes on this planet"); } } document.querySelector('input[value="continue"').focus();//Used to pre-select Continue button } ////////LAUNCHING SCRIPT PAGE FLOTTE2 //Used to pre-select Continue button if(CurrentURL.split("=")[1].split("&")[0] == "flotten2"){ document.querySelector('input[value="continue"').focus(); } //////LAUNCHING SCRIPT PAGE FLOTTE3 //Used to pre-select Continue button if(CurrentURL.split("=")[1].split("&")[0] == "flotten3"){ document.querySelector('input[value="continue"').focus(); }