Kôtaro_Inugamie / cartoCelestus

// ==UserScript==
// @name         cartoCelestus
// @namespace    
// @description  carto Celestus
// @version      0.6.1
// @author       Kôtaro Inugamie
// @collaborator Aquaofkaos
// @license MIT
// @copyright 2021, Kôtaro Inugamie (https://openuserjs.org/users/K%C3%B4taro_Inugamie)

// @include     	*horizon.celestus.fr*

// @exclude				*forum.celestus.fr*

// @run-at document-body
// @noframes
// @grant GM_setValue
// @grant GM_getValue

// @updateURL https://openuserjs.org/meta/Kôtaro_Inugamie/cartoCelestus.meta.js
// @downloadURL https://openuserjs.org/install/Kôtaro_Inugamie/cartoCelestus.user.js

// ==/UserScript==
console.log ("Chargement du script");
var pageJeu = document;
var fenetre;
var dansIframe;
//Détermine si on est dans un frame (jeu) ou dans la page courante (radar, RC, etc.)
if (window.top === window.self && (frames[0] || document.getElementsByTagName("frameset").length > 0)) {
  dansIframe = false;
}
else {
  dansIframe = true;
}
 function chargersys(fenetre) {
    fenetre.copyToClipboard = str => {
    console.log("Copie des données vers le presse-papiers.");
    const el = pageJeu.createElement("textarea");
    el.value = str;
    el.setAttribute("readonly", "");
    el.style.position = "absolute";
    el.style.left = "-9999px";
    pageJeu.body.appendChild(el);
    const selected = pageJeu.getSelection().rangeCount > 0 ? pageJeu.getSelection().getRangeAt(0) : false;
    el.select();
    pageJeu.execCommand("copy");
    pageJeu.body.removeChild(el);
    if (selected) {
      pageJeu.getSelection().removeAllRanges();
      pageJeu.getSelection().addRange(selected);
    }
  };
    fenetre.Carto = new Object();
    fenetre.exportCarto = function () {
        var texte = "";
        Object.keys(frames[0].Carto.Sys).forEach( function (item, index) {
           if (item != 0) {
               var sysa = frames[0].Carto.Sys[item];
               var syshex = frames[0].Carto.Hex[sysa.HexID];
               texte += `${item}\t\
               ${sysa.AG}\t\
               ${sysa.Acces}\t\
               ${sysa.Alliance}\t\
               ${sysa.Const}\t\
               ${syshex.ConstNom}\t\
               ${sysa.Datee}\t\
               ${sysa.FactionBase}\t\
               ${sysa.Gal}\t\
               ${syshex.HexID}\t\
               ${sysa.HexSecu}\t\
               ${sysa.Nom}\t\
               ${sysa.RegionNom}\t\
               ${sysa.Sys}\t\
               ${sysa.SysNom}\t\
               ${sysa.X}\t\
               ${sysa.Y}\t\
               ${sysa.Astre}\t\
               ${sysa.TN}\t\
               ${sysa.CB}\t\
               ${sysa.PDC}\t\
               ${sysa.AVP}\t\
               ${sysa.CT}\t\
               ${sysa.CM}\t\
               ${syshex.HexDom}\t\
               ${syshex.HexProp}\n`;
           }
        });
        fenetre.copyToClipboard(texte);
        fenetre.Carto.Sys = (GM_getValue("Carto")) ? JSON.parse(GM_getValue("Carto")) : [];
    };
    
    fenetre.clearCarto = function () {
        fenetre.Carto.Sys = (GM_getValue("Carto")) ? JSON.parse(GM_getValue("Carto")) : [];
    };
 }

const mutationObserver = new MutationObserver(function (mutations) {
  this.disconnect();
  //console.log("mutations");
  mutations.forEach(function (mutation) {
    //console.log(mutation.target);
    switch (mutation.target.id) {
      case 'SysCartouche' :
            //console.log("carte detecter");
            frames[0].Carto.Sys[frames[0].Sys[0][0].ID] = mergeCarto(frames[0].Sys);
            GM_setValue("Carto",JSON.stringify(frames[0].Sys.Data));
            //console.log(GM_getValue("Carto"));
            //console.log(frames[0].Carto);
            break;
      default:

    }

  });
  startObserve();

});

function startObserve() {
  mutationObserver.observe(pageJeu.documentElement, {
    //attributes: true,
    //characterData: true,
    childList: true,
    subtree: true,
    //attributeOldValue: true,
    //characterDataOldValue: true
  });

}

var convArrToObj = function(array){
    //console.log(array);
  var thisEleObj = new Object();
  if(typeof array == "object"){
      for(var i in array){
          var thisEle = convArrToObj(array[i]);
          thisEleObj[i] = thisEle;
          //console.log(thisEle);
      }
  }else {
      thisEleObj = array;
  }
  return thisEleObj;
};

function mergeCarto(objCarto)
{
  var mergedCarto = {
    AG : objCarto.Data.AG,
    Acces : objCarto.Data.Acces,
    Alliance : objCarto.Data.Alliance,
    Const : objCarto.Data.Const,
    //ConstNom : objCarto.Data.ConstNom,
    Datee : objCarto.Data.Date,
    FactionBase : objCarto.Data.FactionBase,
    Gal : objCarto.Data.Gal,
    HexID : objCarto.Data.HexID,
    //HexSecu : objCarto.Data.HexSecu,
    Nom : objCarto.Data.Nom,
    RegionNom : objCarto.Data.RegionNom,
    Sys : objCarto.Data.Sys,
    SysNom : objCarto.Data.SysNom,
    X : objCarto.Data.X,
    Y : objCarto.Data.Y,
    Astre : objCarto[0][0].Type,
    TN : 0,
    CB : 0,
    PDC : 0,
    AVP : 0,
    CT : 0,
    CM : 0 };
    mergedCarto.X = mergedCarto.X / 1000000000;
    mergedCarto.Y = mergedCarto.Y / 1000000000;
    frames[0].Carto.Hex[objCarto.Data.HexID].HexSecu = objCarto.Data.HexSecu;
    frames[0].Carto.Hex[objCarto.Data.HexID].ConstNom = objCarto.Data.ConstNom;
    //console.log("testmerge", objCarto);
    //mergedCarto = convArrToObj(objCarto.Data);
  /*
  var mergedCarto;
  */
  //console.log(objPlanete);
    objCarto.forEach(function (val, pos) {
        if (pos > 0){
            val.forEach(function (res, lun) {
                //console.log(pos,lun);
                if (objCarto[pos][lun].IMG == "32") {
                    mergedCarto.AVP = mergedCarto.AVP + 1;
                    frames[0].Carto.Hex[objCarto.Data.HexID].HexDom = objCarto[pos][lun].TAG;
                    frames[0].Carto.Hex[objCarto.Data.HexID].HexProp = objCarto[pos][lun].Pseudo;
                    
                }
                switch (objCarto[pos][lun].Type) {
                    case "TN" :
                        mergedCarto.TN = mergedCarto.TN + 1;
                        break;
                    case "CB" :
                        mergedCarto.CB = mergedCarto.CB + 1;
                        break;
                    case "PDC" :
                        mergedCarto.PDC = mergedCarto.PDC + 1;
                        break;
                    case "CT" :
                        mergedCarto.CT = mergedCarto.CT + 1;
                        break;
                    case "CM" :
                        mergedCarto.CM = mergedCarto.CM + 1;
                        break;
                    default :
                }
            });
        }
    });
  //console.log("result ",mergedCarto);
  console.log("système enregistré");
  return mergedCarto;
}

function run (){
fenetre = frames[0].window;
    pageJeu = document;
//chargersys(fenetre);
    //console.log("heu");
startObserve();
}
setTimeout (run (),1000);

if (dansIframe) {
  //console.log("Page secondaire détectée.");
  fenetre = window;
  pageJeu = document;
  chargersys(fenetre);
  fenetre.Carto.Sys = (GM_getValue("Carto")) ? JSON.parse(GM_getValue("Carto")) : [];
  startObserve();
}
else {
  //console.log("Page jeu principal détectée.");
  setTimeout(function () {
    fenetre = frames[0].window;
    pageJeu = frames[0].document;
    chargersys(fenetre);
    fenetre.Carto.Sys = (GM_getValue("Carto")) ? JSON.parse(GM_getValue("Carto")) : [];
    console.log("execution du script");
    startObserve();
  }, 10000);
}
    //mutationObserver.disconnect();