zogre / Nmapv3

// ==UserScript==
// @name Nmapv3
// @namespace http://carto-nacridan.dynamic-dns.net/
// @copyright 2014, Tass
// @description Récupération de la vue et assemblage par post traitement : contactez Tass in game
// @include     http://www.nacridan.com/*
// @include     http://nacridan.raistlin.fr/*
// @include     http://nacridan.com/*
// @exclude http://www.nacridan.com/conquest/profile.php?id=*
// @exclude http://http://www.nacridan.com/test/nacridan2*
// @exclude http://http://nacridan.com/test/*
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js
// @oujs:author zogre
// @downloadURL https://openuserjs.org/install/zogre/Nmapv3.user.js
// @version 3.4.2
// @grant none
// ==/UserScript==
/*
3.4.2 change namespace
3.4.1 nom de domain et exclusion serveur de tests
*/

var reply = '';
//Docu	ment
var testbaseURL = 'https://docs.google.com/forms/d/1p6UfbpCi9bQg7u7xwQdujpNM4DZiEu9kHvysXBpwTOY/formResponse?';
//Varivable du doc
var testbaseTerrain = 'entry.1728234380=';
var submitURL;
//Variables pour construire la compression
var terrain = 'a'; //Terrain
var iurl = 'a'; //URL
var ibat = 'a'; //Batiement
var iTer = 0; //Numéro Terrain
var iTer2 = 0; //Numéro URL
var iTer3 = 0; //Numéro Batiement
//Variables à récupérer pour une case de la vue
var valX = '';
var valY = '';
var valTerrain = '';
var valBuilding = '';
var valURL = '';
//Variables temporaires pour parser les chaines de caratère
var posSlache;
var pos;
var debut;
var milieu;
var fin;
//Pour les cases spéciales (arbres, mineraux....)
var isSpecial = false;
var special = '';
//Récupéation du player
var Player = $('select[name=__idCurPlayer] option:selected').text();

//Tableau à parser
var children = document.getElementsByClassName('centerareaview') [0].childNodes;
var retour = '';
var tmp;
var element;
var isBuilding = '';
var isPNJ = '';
var elem;
//Parcour de la liste des cases de la vue
for (i = 0; i < children.length; i++)
{
  valX = '';
  valY = '';
  valTerrain = '';
  valBuilding = '';
  valURL = '';
  isBuilding = '';
  isPNJ = '';
  isSpecial = false;
  special = '';
  //On ne s'intéresse qu'a la case de classe "terrainvide"
  if (children[i].className == 'terrainvide')
  {
    var fils = children[i].childNodes;
    /*Chaque classe terrainvide
    * a au moins un fils:
    *  - un contenant les coordonnées de la case et le type de terrain
    *  - un contenant le batiement
    *  - un contentant le personage ou le mob
    *  - un pour les autres ressources (cuire, portail,...)
    */
    for (j = 0; j < fils.length; j++) {
      //Récup du PNJ, on prend l url que l on complete par un chemin absolu
      if (fils[j].className == 'minimappnj') {
        valURL = fils[j].style.backgroundImage.replace('../', 'http://www.nacridan.com/').replace('"', '').replace('"', '');
        //retour = retour + valURL;
        isPNJ = 'oui';
        //Récup de l'url du bâtiment
        //Compression du type de batiement
      } else if (fils[j].className == 'minimapbuilding' || fils[j].className.indexOf('noborder') == - 1) {
        //valURL = fils[j].style.backgroundImage.replace('../','http://www.nacridan.com/').replace('"','').replace('"','');
        //Construtction de la compression
        //On récupère le chemin d el'image en relatif
        //On ne conserve que le nom de l'image
        if (fils[j].className == 'minimapbuilding') {
          valURL = fils[j].style.backgroundImage;
         // alert(valURL);
          debut = valURL.lastIndexOf('/') + 1;
          //fin = valURL.length - 2;
          fin = valURL.lastIndexOf('.png') + 4;
          milieu = fin - debut;
          valURL = valURL.substr(debut, milieu);
           //alert(valURL);
        } else {
          isSpecial = true;
          valURL = fils[j].className;
          //alert(valURL);
        }
        //Si ce n'est pas le premier batiment

        if (iurl.length != 1) {
          //Si le bâtiement à déjà été rencontré
          if (iurl.indexOf(valURL) > 0) {
            //On récupère la numéro de celui-ci
            valURL = iurl.substr(iurl.indexOf(valURL) - 2, 2);
          } else {
            //Sinon, on l'ajoute à la liste des batiements
            //Et on lui attribu un numéro (sur 2 digits)
            if (iTer2 < 10) {
              valURL = '0' + iTer2 + valURL;
            } else {
              valURL = iTer2 + valURL;
            }
            iurl = iurl + valURL;
            iTer2 = iTer2 + 1;
          }
          //Si c'est le tout premier passage dans la boucle
          //On ajoute le batiement

        } else {
          if (iTer2 < 10) {
            valURL = '0' + iTer2 + valURL;
          } else {
            valURL = iTer2 + valURL;
          }
          iurl = valURL;
          iTer2 = iTer2 + 1;
        }
        //alert(valURL + '\n' + iurl);
        //retour = retour + valURL;

        isBuilding = 'oui';
        //Si la classe est de type noborder
        //Cette classe contient le terrain
      } else {
        if (fils[j].className.indexOf('noborder') > - 1) {
          valTerrain = fils[j].className.substr(9, fils[j].className.lenght);
          //Compression du type de terrrain
          if (terrain.length != 1) {
            if (terrain.indexOf(valTerrain, 0) > 0) {
              valTerrain = terrain.substr(terrain.indexOf(valTerrain, 0) - 2, 2);
            } else {
              if (iTer < 10) {
                valTerrain = '0' + iTer + valTerrain;
              } else {
                valTerrain = iTer + valTerrain;
              }
              terrain = terrain + valTerrain;
              iTer = iTer + 1;
            }
          } else {
            if (iTer < 10) {
              valTerrain = '0' + iTer + valTerrain;
            } else {
              valTerrain = iTer + valTerrain;
            }
            terrain = valTerrain;
            iTer = iTer + 1;
          }
        }
        //De plus si la classe contient le type onclick,
        //Elle contient les coord de la case

        if (fils[j].hasAttribute('onclick') == true) {
          //Récup des coords
          tmp = fils[j].getAttributeNode('onclick').nodeValue;
          debut = tmp.indexOf('_', 0);
          milieu = tmp.indexOf('_', debut + 1);
          fin = tmp.indexOf('"', milieu);
          valX = tmp.substring(debut + 1, milieu);
          valY = tmp.substring(milieu + 1, fin);
        } else {
          //alert ('error \n ' + fils[j].innerHTML);
        }
      }
    }
    if (isSpecial) {
      valBuilding = 'OTR';
    } else if (isPNJ == 'oui') {
      valBuilding = 'PNJ';
    } else if (isBuilding == 'oui') {
      //Cas spécial des batiements
      //Le nom du batiement n'est pas présent au même endroit
      //On ce sert des coordonnées précèdement récupérées pour trouver le nom du batiement
      //On compresse ce nom également
      debut = tmp.indexOf('"', 0);
      fin = tmp.indexOf('"', debut + 1);
      tmp = tmp.substring(debut + 1, fin);
      valBuilding = document.getElementById(tmp).getElementsByClassName('buildingname') [0].innerHTML;
      if (ibat.length != 1) {
        if (ibat.indexOf(valBuilding, 0) > 0) {
          valBuilding = ibat.substr(ibat.indexOf(valBuilding, 0) - 2, 2);
        } else {
          if (iTer3 < 10) {
            valBuilding = '0' + iTer3 + valBuilding;
          } else {
            valBuilding = iTer3 + valBuilding;
          }
          ibat = ibat + valBuilding;
          iTer3 = iTer3 + 1;
        }
      } else {
        if (iTer3 < 10) {
          valBuilding = '0' + iTer3 + valBuilding;
        } else {
          valBuilding = iTer3 + valBuilding;
        }
        ibat = valBuilding;
        iTer3 = iTer3 + 1;
      }
    }
    /*
    * Construction du GET à evoyer au formulaire
    * Les valeurs de bases sont le type de terrain ainsi que les coord X et Y
    * la variable submitURL contient l'ensemble des données d'une cellule
    */
    //submitURL =  baseURL + baseTerrain + valTerrain + '&' + baseX + valX + '&' + baseY + valY + '&' + basePlayer + Player;

    submitURL = valTerrain + '|' + valX + '|' + valY;
    //Si on à un batiment, on l'ajoute
    if (valBuilding != '') {
      //submitURL = submitURL + '&' + baseBuilding + valBuilding + '&' + basebURL + valURL;
      submitURL = submitURL + '|' + valBuilding + '|' + valURL;
    }
    //Ajout de la case de vue à la vue totale

    retour = retour + submitURL + '$';
    //retour =  retour + ' ' + submitURL + '    ';
  }
}
//retour = testbaseURL +  testbaseTerrain + retour;

retour = testbaseURL + testbaseTerrain + Player + '$' + retour;
$.get(retour);
//alert(retour);