Partage
  • Partager sur Facebook
  • Partager sur Twitter

Petite erreur dans un script

Je n'y connais rien...

    26 octobre 2016 à 14:29:50

    Bonjour à tous,

    Je joue a un jeu et sur les pages de stats j'utilise un script orphelin malheureusement.

    Celui-ci présente un petit défaut et c'est pourquoi je me tourne vers vous pour savoir si quelqu'un avait la possibilité de résoudre le problème.

    Donc le script s'utilise sur le site http://www.war-riders.de/

    Voici le lien direct vers les stats d'un joueur: http://www.war-riders.de/?lang=fr&uni=144&page=search&post=1&type=player&name=team+picon

    Et voici ce que l'on peut voir:

    Grace au script on obtient cet affichage:

    Un petit tableau avec le détails des points que ne donne pas le site.

    Les points de défense s'obtiennent avec cette formule : points militaire + points recherche + points économie - points "totaux"

    Le problème c'est que parfois ce total est inférieur à 0 et le script "plante", il n'affiche rien...

    Voici le script en question:

    // ==UserScript==
    // @name       Show Fleet & Def 4 WarRiders
    // @namespace  http://use.i.E.your.homepage/
    // @version    0.1
    // @description  enter something useful
    // @match      http://*/*
    // @copyright  2012+, You
    // ==/UserScript==
    // ==UserScript==
    // @name War Riders Extended
    // @namespace forcetree
    // @include http://*war-riders.de/*/*/details/player/*
    // @include http://*war-riders.de/*/*/search/player/*
    // @include http://*war-riders.de/*/*/details/ally/*
    // @include http://*war-riders.de/*/*/search/ally/*
    // @include http://*ogame.gamestats.org/*/*/details/player/*
    // @include http://*ogame.gamestats.org/*/*/search/player/*
    // @include http://*ogame.gamestats.org/*/*/details/ally/*
    // @include http://*ogame.gamestats.org/*/*/search/ally/*
    // @exclude http://*war-riders.de/*/*/timecalc
    // @exclude http://*ogame.gamestats.org/*/*/timecalc
    // @exclude http://*.ogame.gameforge.com/*
    // @exclude http://board.fr.ogame.gameforge.com/*
    // ==/UserScript==
    readTable();
    
    function draw_chart(chartData)
    {
    var size = "400x100";
    var labels = "Economique sans la défense|Recherche|Flotte|Défense";
    var url = "http://chart.apis.google.com/chart?"
    + "cht=p3&"
    + "chl=" + labels + "&"
    + "chf=bg,s,efefef00&"
    + "chs="+ size +"&"
    + "chld=&"
    + "chco=556B2F&"
    + "chtt=&"
    + "&chd=t:" + chartData;
    
    var img = document.createElement("img");
    img.src = url;
    return img;
    }
    
    function readTable()
    {
    var fullTable = document.getElementById("startcontent2").getElementsByTagName("table")[0];
    
    try{
    var totalPoints = fullTable.getElementsByTagName("tr")[3].lastChild.textContent;
    var ecoPoints = fullTable.getElementsByTagName("tr")[6].lastChild.textContent;
    var researchPoints = fullTable.getElementsByTagName("tr")[9].lastChild.textContent;
    var militaryPoints = fullTable.getElementsByTagName("tr")[12].lastChild.textContent;
    } catch(err)
    {
    GM_log('No Table found.');
    return;
    }
    calculate(fullTable, totalPoints, ecoPoints, researchPoints, militaryPoints);
    }
    
    function calculate(fullTable, totalPoints, ecoPoints, researchPoints, militaryPoints)
    {
    totalPoints = removeDots(totalPoints);ecoPoints = removeDots(ecoPoints);researchPoints = removeDots(researchPoints);militaryPoints = removeDots(militaryPoints);
    defencePoints = parseInt(ecoPoints) + parseInt(researchPoints) + parseInt(militaryPoints) - parseInt(totalPoints);
    armadaPoints = parseInt(militaryPoints) - parseInt(defencePoints);
    if ((defencePoints < 0) || (armadaPoints < 0))
    {
    GM_log("Invalid value.")
    fullTable.parentNode.insertBefore(document.createTextNode("Invalid value."), fullTable);
    return
    }
    chartData = (ecoPoints-defencePoints) / totalPoints + "," + researchPoints / totalPoints + "," + armadaPoints / totalPoints + "," + defencePoints / totalPoints;
    
    indestPoints = parseInt(ecoPoints) + parseInt(researchPoints) - defencePoints;
    
    var newDiv = document.createElement("div");
    newDiv.appendChild(draw_chart(chartData));
    newDiv.appendChild(br());
    newDiv.appendChild(br());
    newDiv.appendChild(drawTable((insertDots(defencePoints) + " ("+ (defencePoints / totalPoints * 100).toFixed(1) +"%)"), (insertDots(armadaPoints) + " ("+ (armadaPoints / totalPoints * 100).toFixed(1) +"%)"), (insertDots(indestPoints)+ " ("+ (indestPoints / totalPoints * 100).toFixed(1) +"%)")));
    newDiv.appendChild(br());
    fullTable.parentNode.insertBefore(newDiv, fullTable);
    }
    
    function drawTable(def, armada, indest)
    {
    var newTable = document.createElement("table");
    newTable.className = "border";
    newTable.title = "Armada incl. 50% civil Ships, 50% Jumpgate, 50% Phalanx indestructible Points alike plus other lunarbased buildings";
    var trOne = document.createElement("tr");
    newTable.appendChild(trOne);
    trOne.appendChild( getTd("cl","Défense") );
    trOne.appendChild( getTd("cl","Flotte") );
    trOne.appendChild( getTd("cl","Indestructibles") );
    var trTwo = document.createElement("tr");
    newTable.appendChild(trTwo);
    trTwo.appendChild( getTd("s",def) );
    trTwo.appendChild( getTd("s",armada) );
    trTwo.appendChild( getTd("s",indest) );
    return newTable;
    }
    
    function getTd(className, text)
    {
    var newTd = document.createElement("td");
    newTd.appendChild(document.createTextNode(text));
    newTd.className = className;
    return newTd;
    }
    
    
    function removeDots(s)
    {
    return s.replace(/\./g, "");
    }
    
    function br()
    {
    return document.createElement("br");
    }
    
    function insertDots(n)
    {
    n= "" + n;
    if (n.length > 3)
    {
    var mod = n.length % 3;
    var output = (mod > 0 ? (n.substring(0,mod)) : "");
    for (i=0 ; i < Math.floor(n.length / 3); i++)
    {
    if ((mod == 0) && (i == 0))
    output += n.substring(mod+ 3 * i, mod + 3 * i + 3);
    else
    output+= "." + n.substring(mod + 3 * i, mod + 3 * i + 3);
    }
    return (output);
    }
    else return n;
    }

    Donc si quelqu'un sait comment regler le problème, je lui en serait très reconnaissant.

    Merci d'avance.

    -
    Edité par Icedarts 26 octobre 2016 à 18:04:15

    • Partager sur Facebook
    • Partager sur Twitter
      26 octobre 2016 à 16:29:56

      Salut

      Peut-tu s'il te plait indenter ton code...

      Tu demande de l'aide, donc essaye de nous "faciliter" la tache en structurant un minimul ton code pour qu'on puisse le lire..

      • Partager sur Facebook
      • Partager sur Twitter
        26 octobre 2016 à 18:01:15

        Je vous remercie déjà de vous pencher dessus ;)

        Est-ce mieux?

        // ==UserScript==
        // @name       Show Fleet & Def 4 WarRiders
        // @namespace  http://use.i.E.your.homepage/
        // @version    0.1
        // @description  enter something useful
        // @match      http://*/*
        // @copyright  2012+, You
        // ==/UserScript==
        // ==UserScript==
        // @name War Riders Extended
        // @namespace forcetree
        // @include http://*war-riders.de/*/*/details/player/*
        // @include http://*war-riders.de/*/*/search/player/*
        // @include http://*war-riders.de/*/*/details/ally/*
        // @include http://*war-riders.de/*/*/search/ally/*
        // @include http://*ogame.gamestats.org/*/*/details/player/*
        // @include http://*ogame.gamestats.org/*/*/search/player/*
        // @include http://*ogame.gamestats.org/*/*/details/ally/*
        // @include http://*ogame.gamestats.org/*/*/search/ally/*
        // @exclude http://*war-riders.de/*/*/timecalc
        // @exclude http://*ogame.gamestats.org/*/*/timecalc
        // @exclude http://*.ogame.gameforge.com/*
        // @exclude http://board.fr.ogame.gameforge.com/*
        // ==/UserScript==
        readTable();
        
        function draw_chart(chartData)
        {
        	var size = "400x100";
        	var labels = "Economique sans la défense|Recherche|Flotte|Défense";
        	var url = "http://chart.apis.google.com/chart?"
        	+ "cht=p3&"
        	+ "chl=" + labels + "&"
        	+ "chf=bg,s,efefef00&"
        	+ "chs="+ size +"&"
        	+ "chld=&"
        	+ "chco=556B2F&"
        	+ "chtt=&"
        	+ "&chd=t:" + chartData;
        
        	var img = document.createElement("img");
        	img.src = url;
        	return img;
        }
        
        function readTable()
        {
        	var fullTable = document.getElementById("startcontent2").getElementsByTagName("table")[0];
        	try
        	{
        		var totalPoints = fullTable.getElementsByTagName("tr")[3].lastChild.textContent;
        		var ecoPoints = fullTable.getElementsByTagName("tr")[6].lastChild.textContent;
        		var researchPoints = fullTable.getElementsByTagName("tr")[9].lastChild.textContent;
        		var militaryPoints = fullTable.getElementsByTagName("tr")[12].lastChild.textContent;
        	}
        	catch(err)
        	{
        		GM_log('No Table found.');
        		return;
        	}
        	calculate(fullTable, totalPoints, ecoPoints, researchPoints, militaryPoints);
        }
        
        function calculate(fullTable, totalPoints, ecoPoints, researchPoints, militaryPoints)
        {
        	totalPoints = removeDots(totalPoints);ecoPoints = removeDots(ecoPoints);researchPoints = removeDots(researchPoints);militaryPoints = removeDots(militaryPoints);
        	defencePoints = parseInt(ecoPoints) + parseInt(researchPoints) + parseInt(militaryPoints) - parseInt(totalPoints);
        	armadaPoints = parseInt(militaryPoints) - parseInt(defencePoints);
        	if ((defencePoints < 0) || (armadaPoints < 0))
        	{
        		GM_log("Invalid value.")
        		fullTable.parentNode.insertBefore(document.createTextNode("Invalid value."), fullTable);
        		return
        	}
        	chartData = (ecoPoints-defencePoints) / totalPoints + "," + researchPoints / totalPoints + "," + armadaPoints / totalPoints + "," + defencePoints / totalPoints;
        	indestPoints = parseInt(ecoPoints) + parseInt(researchPoints) - defencePoints;
        	var newDiv = document.createElement("div");
        	newDiv.appendChild(draw_chart(chartData));
        	newDiv.appendChild(br());
        	newDiv.appendChild(br());
        	newDiv.appendChild(drawTable((insertDots(defencePoints) + " ("+ (defencePoints / totalPoints * 100).toFixed(1) +"%)"), (insertDots(armadaPoints) + " ("+ (armadaPoints / totalPoints * 100).toFixed(1) +"%)"), (insertDots(indestPoints)+ " ("+ (indestPoints / totalPoints * 100).toFixed(1) +"%)")));
        	newDiv.appendChild(br());
        	fullTable.parentNode.insertBefore(newDiv, fullTable);
        }
        
        function drawTable(def, armada, indest)
        {
        	var newTable = document.createElement("table");
        	newTable.className = "border";
        	newTable.title = "Armada incl. 50% civil Ships, 50% Jumpgate, 50% Phalanx indestructible Points alike plus other lunarbased buildings";
        	var trOne = document.createElement("tr");
        	newTable.appendChild(trOne);
        	trOne.appendChild( getTd("cl","Défense") );
        	trOne.appendChild( getTd("cl","Flotte") );
        	trOne.appendChild( getTd("cl","Indestructibles") );
        	var trTwo = document.createElement("tr");
        	newTable.appendChild(trTwo);
        	trTwo.appendChild( getTd("s",def) );
        	trTwo.appendChild( getTd("s",armada) );
        	trTwo.appendChild( getTd("s",indest) );
        	return newTable;
        }
        
        function getTd(className, text)
        {
        	var newTd = document.createElement("td");
        	newTd.appendChild(document.createTextNode(text));
        	newTd.className = className;
        	return newTd;
        }
        
        function removeDots(s)
        {
        	return s.replace(/\./g, "");
        }
        
        function br()
        {
        	return document.createElement("br");
        }
        
        function insertDots(n)
        {
        	n= "" + n;
        	if (n.length > 3)
        	{
        		var mod = n.length % 3;
        		var output = (mod > 0 ? (n.substring(0,mod)) : "");
        		for (i=0 ; i < Math.floor(n.length / 3); i++)
        		{
        			if ((mod == 0) && (i == 0))
        			output += n.substring(mod+ 3 * i, mod + 3 * i + 3);
        			else
        			output+= "." + n.substring(mod + 3 * i, mod + 3 * i + 3);
        		}
        	return (output);
        	}
        	else return n;
        }



        • Partager sur Facebook
        • Partager sur Twitter
          26 octobre 2016 à 18:03:02

          Avant de regarder le code, j'aimerais savoir pourquoi le total peut être négatif ?? C'est un bug ou c'est volontaire ?
          • Partager sur Facebook
          • Partager sur Twitter
            26 octobre 2016 à 18:18:54

            A mon avis:

            Le site calcul les points en fonction des ressources que nous dépensons.

            1000 unités dépensés = 1 pts

            Mais ça ne tombe jamais juste parfois on dépense par exemple 841 705 unités soit, je suppose 841,705 pts.

            Mais le site du jeu n'affiche jamais les chiffres décimaux.

            Le site qui récupère les stats lui du coup récupère les chiffres arrondis.

            Voila d'ou je pense que l'erreur provient.

            • Partager sur Facebook
            • Partager sur Twitter
              28 octobre 2016 à 10:59:36

              Bonjour à tous,

              Petit up en ce merveilleux jour avant le we, jour qu'on appelle VENDREDI  ^^

              • Partager sur Facebook
              • Partager sur Twitter
                7 novembre 2016 à 13:12:08

                Bonjour à tous,

                Petit up du début de semaine.

                • Partager sur Facebook
                • Partager sur Twitter

                Petite erreur dans un script

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown