// ==UserScript==
// @name FireSpyGM
// @namespace FireSpyGM
// @description Adaptation de FireSpy pour Google Chrome (Galaxie + Classement)
// @author Benoit485
// @version 0.1
// @date 2012-03-17 19H15
// @include http://beta*.e-univers.org/index.php*
// @include http://uni*.projet42.org/index.php*
// ==/UserScript==
var url = document.location.href; // On recupere l'url
var beta = url.match(new RegExp('http://beta(\\d).e-univers.org') )[1]; // On recupere le beta
// On recupere l"etat du script sur le Beta en cours
var status = getValue('SpyBotB'+beta+'_Actif', false) == 'true' ? true : false;
// On quitte le script dans le cas ou il doit pas etre actif sur le Beta et que l'on est pas sur la page des options
if(!status && !url.match(/\?action=options/) ) return;
var user = getValue('SpyBotB'+beta+'_User', false);
var pass = getValue('SpyBotB'+beta+'_Pass', false);
var link = getValue('SpyBotB'+beta+'_Link', false);
var nickIg = getValue('SpyBotB'+beta+'_nickIg', false);
// On crée la toolbar
html = evalPath('id("divpage")', document).snapshotItem(0);
table = document.createElement('table');
table.setAttribute('style', 'width : 100%;');
tr = document.createElement('tr');
tr2 = document.createElement('tr');
tdname = document.createElement('td');
idUser = getValue('idUserFireSpyGM', 'None');
tdname.innerHTML = 'FireSpyGM [By Benoit485] ';
tdname.setAttribute('style', 'color : yellow;');
a = document.createElement('a');
a.setAttribute('style', 'color : red; cursor : pointer;');
a.innerHTML = 'Menu';
a.addEventListener('click', function()
{
divSavePage = html.innerHTML;
html.innerHTML = '
';
inputSubRec = document.createElement('input');
inputSubRec.setAttribute('type', 'submit');
inputSubRec.setAttribute('value', 'Enregistrer');
inputSubRec.addEventListener('click', function()
{
var user = document.getElementById('user').value;
setValue('SpyBotB'+beta+'_User', user);
var pass = document.getElementById('pass').value;
var cryptedPass = hex_md5(hex_sha1(pass))
if(pass != 'crypted') setValue('SpyBotB'+beta+'_Pass', cryptedPass);
var link = document.getElementById('link').value;
setValue('SpyBotB'+beta+'_Link', link);
var nickIg = document.getElementById('nickIg').value;
setValue('SpyBotB'+beta+'_nickIg', nickIg);
var status = document.getElementById('status').checked;
setValue('SpyBotB'+beta+'_Actif', status);
html.innerHTML = divSavePage;
}, false);
html.appendChild(inputSubRec);
}, false);
tdname.appendChild(a);
tdtxt = document.createElement('td');
tdtxt.id = 'tdtxt';
tdtxt.innerHTML = 'Bienvenue sur FireSpyGM !';
tr.appendChild(tdname);
tr2.appendChild(tdtxt);
table.appendChild(tr);
table.appendChild(tr2);
div = document.createElement('div');
div.setAttribute('style','border:solid #FFCC00 1px;/*left:50%;margin-left:-150px;*/right:0px;bottom:0;height:45px;width:300px;position:fixed;z-index:100;background:#000000;color:#FFCC00;padding:3px;text-align:center;');
div.appendChild(table);
html.parentNode.insertBefore(div, html);
var partargetdoc = document;
/**
* \fn trim
* fonction qui retire les espace blancs en début et fin de chaîne
* @return retourne la chaîne reçue en entrée dégagée de ses espaces de début et de fin
*/
String.prototype.trim = function() {
var x=this;
x=x.replace(/^\s*|\s*$/g,'');
return x;
}
//-----------------------------------------------------------------------------------------
/* String.prototype.stripSlashes = function() {
var x=this;
x=x.replace(/[\\,']/gi, '\'); // /<\/?[^>]+>/gi ou '<\/?[^>]+>','gi'
return x;
} */
//-----------------------------------------------------------------------------------------
/*! stripHTMLEntities */
String.prototype.stripHTMLEntities = function(removehtmljavascripted) {
var x=this;
if (removehtmljavascripted==true) x=x.replace(/escape\(['"].*['"]\);?/gi, "\'\'");
x=x.replace(/<\/?[^>]+>/gi, ''); // /<\/?[^>]+>/gi ou '<\/?[^>]+>','gi'
return x;
}
/**
* Retire les epsca es de debut et de fin d'une chaîne
**/
function OGPlugin_TrimString(string) {
// Return empty if nothing was passed in
if (!string || string=='') return "";
// Efficiently replace any leading or trailing whitespace
var value = string.replace(/^\s+/, '');
value = value.replace(/\s+$/, '');
// Replace any multiple whitespace characters with a single space
value = value.replace(/\s+/g, ' ');
// Return the modified string
return value;
}
// On traite les pages
if(url.match(/\?action=galaxie/) ) // Sur la Galaxie
{
const ogs_eunivgalinput = 1; // indice de la boite eunivers du no de galaxie
const ogs_eunivsysinput = 4; // indice de la boite eunivers du no de système
const RegExpEuniversdebris = /\:\sT\s\:\s(\d+)\,\sC\s\:\s(\d+)/i;
function OGPlugin_getGalaxy(docroot)
{
// récupère l'info sur la galaxie en cours
// définit l'indice suivante le type de jeu
var tmpgalinput = ogs_eunivgalinput;
try {
if (parseInt(docroot.getElementsByTagName("input")[tmpgalinput].value) > 0) {
return docroot.getElementsByTagName("input")[tmpgalinput].value;
} else {
return docroot.getElementsByTagName("input")[tmpgalinput+1].value;
}
} catch (e){
bLog('Galaxie', 'Erreur en capturant la galaxie');
return -1;
}
}
function OGPlugin_getSystem(docroot)
{
// récupère l'info sur le système en cours
var tmpsysinput = ogs_eunivsysinput;
try {
if (parseInt(docroot.getElementsByTagName("input")[tmpsysinput].value) > 0) {
return docroot.getElementsByTagName("input")[tmpsysinput].value;
} else {
return docroot.getElementsByTagName("input")[tmpsysinput+1].value;
}
} catch (e){
bLog('Galaxie', 'Erreur en capturant le systeme');
return -1;
}
}
function OGPlugin_get_galaxyview_data(docroot)
{
// Indice table correspondante EUnivers = 8
targettablerank = 13;
//log(docroot.getElementsByTagName('table')[targettablerank].innerHTML);
var rows = docroot.getElementsByTagName('table')[targettablerank].rows;
var enablegalviewbuffering=false; // par défaut
var cells;
var galaxyview = new Array(15);
var galaxy_content;
var posRegExp = />(\d+)<\/a>/;
var moonsize;
var metal_debris;
var crystal_debris;
var planetname;
var corrector = 0;
// récupère la chaîne "système solaire" pouré déterminer la langue ultérieurement
cells = rows[0].cells;
var solar_system = cells[0].innerHTML;
solar_system = solar_system.replace(/\s/,"");
for(var i = 2; i < 17; i++) {
// reset data
moonsize = 0;
metal_debris = 0;
crystal_debris = 0;
playerid = 0;
playerstatus = "";
playername = "";
planetname = "";
alliance = "";
cells = rows[i].cells;
// champs de ruines
try {
var tmp = cells[0].getElementsByTagName('a')[0].getAttribute('title').match(RegExpEuniversdebris);
if (tmp != null) {
metal_debris = parseInt(tmp[1].replace(/\./g,'')) ; //replace(".","").replace(".","").replace(".",""));
crystal_debris = parseInt(tmp[2].replace(/\./g,'')) ; //.replace(".","").replace(".","").replace(".",""));
}
} catch(e) { /* pas de champ de ruine */ }
try { planetname = cells[1].getElementsByTagName('a')[0].innerHTML.stripHTMLEntities().trim(); /* une planète existe */
} catch(e) { planetname = cells[1].innerHTML.stripHTMLEntities(true).trim(); /* aucune planète n'existe */ }
//alert("planetname: "+planetname);
planetname = planetname.replace(/\([0-9a-zA-Z\*\+\s]+\)/,""); // remove activity behind planet name
planetname = planetname.replace(" ","");
planetname = planetname.replace(/\s/,"");
planetname = planetname.replace(/\|/g,"");//by Jormund
galaxy_content = parseInt(cells[0].innerHTML.match(posRegExp)[1])+"|"; // position
galaxy_content += planetname+"|"; // nom de planète
/* if (ogs_gametype==ogs_ogametype) */ galaxy_content += moonsize+"|"; // lune
galaxy_content += metal_debris+"|"; // champ de débris(métal)
galaxy_content += crystal_debris+"|"; // champ de débris(cristal)
//-----------------------------------------------------------------------------------
/* var playercell = cells[5-corrector];
var playercellspans = cells[5-corrector].getElementsByTagName('span'); */
//playername = playercell.getElementsByTagName('a')[0].innerHTML.stripHTMLEntities().trim(); // cas eunivers
try {
span=cells[3].getElementsByTagName('span')[0];
//ufLog(span.firstChild);
if(span.firstChild.toString()=='[object XPCNativeWrapper [object HTMLFontElement]]')span=span.firstChild;
/*fonts=span.getElementsByTagName('font');
playername_tmp='';
if(typeof fonts !='undefined')//cas particulier du joueur courrant
if(fonts)
if(fonts.length)
playername_tmp=fonts[0].innerHTML;
if(playername.length==0) //cas général */
playername_tmp = span.innerHTML;
//ufLog("firespy: "+playername_tmp);
//playername_tab = playername_tmp.match(/([\w,\s,\.,_,\-,@]*\S)($|\s\((\+\d+)\))/);
playername_tab = playername_tmp.match(/([^\(]*)($|\s\((\+\d+)\))/);
//Xdump(playername_tab);
if (playername_tab != null) {
playername = playername_tab[1];
if (playername_tab[3]!=null) playerstatus = playername_tab[3]
else playerstatus="";
}
//playerstatus = "";
//alert("getgal playername: "+playername);
// récupère le drapeau du joueur - au max 6 éléments (i,I,u,g,s,n)
/*for (var j=1; j<7; j++) {
//playerstatus += cells[3].getElementsByTagName('span')[j].innerHTML;
} */
} catch(e) { /* alert("no player name found \n"+e); */ /* catch when there is no player or last playerstatus was found */ }
//ufLog(playername+"-"+playerstatus);
playername=playername.replace(/\|/g,"");//by Jormund
//-----------------------------------------------------------------------------------
galaxy_content += playername+"|";
galaxy_content += playerstatus+"|"; // add playerstats
//-----------------------------------------------------------------------------------
/* var alliancecell = cells[6-corrector];
var alliancecelllink = cells[6-corrector].getElementsByTagName('a')[0];
if (alliancecelllink!=null) {
if (alliancecelllink.getElementsByTagName('span')[0]!=null) // propre alliance
alliance = alliancecelllink.getElementsByTagName('span')[0].innerHTML.stripHTMLEntities().trim();
else alliance = alliancecelllink.innerHTML.stripHTMLEntities().trim(); // autre alliance
alliance = alliance.replace(/\n+/,"");
} */
try { // blocs try except à remplacer
try {
// propre alliance
alliance = cells[4].getElementsByTagName('a')[0].getElementsByTagName('span')[0].innerHTML.stripHTMLEntities(true).trim(); // alliance
} catch(e) {
// autre alliance
alliance = cells[4].getElementsByTagName('a')[0].innerHTML.stripHTMLEntities(true).trim(); // alliance
}
} catch(e) { /* alert("no ally found \n"+e); */ /* catch when there is no alliance */ }
alliance = alliance.replace(/\n+/,"");
alliance = alliance.replace(/\|/g,"");//by Jormund
//-----------------------------------------------------------------------------------
galaxy_content += alliance+"|";
// tentative de récupérer l'id joueur
try {
playerid = parseInt(cells[5].getElementsByTagName('a')[1].getAttribute('href').match(/dest=(\d+)/i)[1]);
} catch(e) { /* pas d'id jouer trouvée (aucune planète ou planète du joueur */ }
galaxy_content += playerid;
// efface tous les \n de cette chaîne
galaxy_content = galaxy_content.replace(/\n+/,"");
galaxyview[i] = galaxy_content;
}
var galaxystring = solar_system + galaxyview.join("\n"); // pas de tampon
return galaxystring;
}
//alert('page galaxie détectée');
OGPlugin_selectedGalaxy = OGPlugin_getGalaxy(partargetdoc);
OGPlugin_selectedSystem = OGPlugin_getSystem(partargetdoc);
bLog('Galaxie', 'Galaxie '+OGPlugin_selectedGalaxy+":"+OGPlugin_selectedSystem+' détécté');
datacontent = OGPlugin_get_galaxyview_data(partargetdoc,false);
if (datacontent.length>10 && datacontent!=null) OGPlugin_result = OGPlugin_sendText('galaxy',datacontent,partargetdoc.location.href);
}
else if(url.match(/\?action=stats/) ) // Sur la Galaxie
{
function OGPlugin_getStatsWho(docroot) {
// récupère l'info sur la catégorie sélectionnée - joueur=0 , alliance=1
var optionElements = docroot.getElementsByTagName("select")[1].getElementsByTagName("option");
//var optionElements = docroot.getElementsByName("who").getElementsByTagName("option");
for (var j = 0; j < optionElements.length; j++) {
var optionElement = optionElements.item(j);
if (optionElement.hasAttribute("selected")) {
return j;
}
}
return -1;
}
function OGPlugin_getStatsTyp(docroot) {
// récupère l'info sur ce qui est sélectionné - points=0 ou flotte=1 or recherche=2
var optionElements = docroot.getElementsByTagName("select")[2].getElementsByTagName("option");
//var optionElements = docroot.getElementsByName("type").getElementsByTagName("option");
for (var j = 0; j < optionElements.length; j++) {
var optionElement = optionElements.item(j);
if (optionElement.hasAttribute("selected")) {
return j;
}
}
return -1;
}
function OGPlugin_getStatswhitch(docroot) {
// récupère l'info sur l'intervalle de rang sélectionné
var optionElements = docroot.getElementsByTagName("select")[3].getElementsByTagName("option");
//var optionElements = docroot.getElementsByName("start").getElementsByTagName("option");
for (var j = 0; j < optionElements.length; j++) {
var optionElement = optionElements.item(j);
if (optionElement.hasAttribute("selected")) {
return optionElement.innerHTML;
//return j;
}
}
return -1;
}
function OGPlugin_HTMLTagstoText (HTMLTags) {
var RegExpHTMLPattern=new RegExp('<\/?[^>]+>', 'gi');
var RegExpHTMLBr=new RegExp('