Kommunauty
Connexion
Inscription

Affichage des ressources Topnav en "Shortly number" (100M...)


oasis Messages : 55

Bonjour,

Je souhaiterai n'afficher les ressources qu'en "shortly number" sur le header. ( 100M pour 100 000 000 000 de ressources ) car trop de chiffres.

J'obtiens cet affichage en mettant la fonction shortly_number dans le overall_topnav.tpl.

Seul gros soucis , lors de l'embarquement des ressources on ne peut qu'emmener la valeur reduite et non la valeur réelle . Exemple il m'affiche bien 1M de ressources quand j'ai 1 000 000 000 de ressources mait lorsque je clique sur max il ne met que 1 et non la totalité de ce que peuvent embarquer les vaisseaux.

Screen:

On peut quand meme mettre le montant manuellement et ca fonctionne.

Je cherche donc a modifier la fonction de calcul "Max ressources" de ce bouton pour qu'il prenne bien en compte les ressources réelles.

J'ai trouver ca dans le javascript flotten.js qui semble etre la fonction "max ressources" de ce bouton :

function maxResource(id) {
var thisresource = parseInt($('#current_'+id).text().replace(/\./g, ''));
var thisresourcechosen = parseInt(document.getElementsByName(id)[0].value);
if (isNaN(thisresourcechosen)) {
thisresourcechosen = 0;
}
if (isNaN(thisresource)) {
thisresource = 0;
}
var storCap = data.fleetroom - data.consumption;

if (id == 'deuterium') {
thisresource -= data.consumption;
}
var metalToTransport = parseInt(document.getElementsByName("metal")[0].value);
var crystalToTransport = parseInt(document.getElementsByName("crystal")[0].value);
var deuteriumToTransport = parseInt(document.getElementsByName("deuterium")[0].value);
var norioToTransport = parseInt(document.getElementsByName("norio")[0].value);
if (isNaN(metalToTransport)) {
metalToTransport = 0;
}
if (isNaN(crystalToTransport)) {
crystalToTransport = 0;
}
if (isNaN(deuteriumToTransport)) {
deuteriumToTransport = 0;
}
    if (isNaN(norioToTransport)) {
norioToTransport = 0;
}
var freeCapacity = Math.max(storCap - metalToTransport - crystalToTransport - deuteriumToTransport - norioToTransport, 0);
document.getElementsByName(id)[0].value = Math.min(freeCapacity + thisresourcechosen, thisresource);
calculateTransportCapacity();
}

Merci à ceux qui voudront bien m'aider a comprendre. (peut etre Homer qui semble etre le fin connaisseur )

EDIT: Probleme résolu en masquant le span id :

<span><b>{shortly_number($metal)}</b></span>
<span id="current_metal" style="display:none;">{$metales}</span>

Sauf que maintenant les couleurs de "Trop plein" ne sont pas interprétées ( nombre reste en blanc meme si on depasse le stockage )

Help ?

mardi 25 février 2014 (Dernière édition mardi 25 février 2014)

Homer Messages : 1826

tu devrais gérer différemment

je te conseil de remettre comme c'était au début, avec le shortly number, et pour que le js fonctionne, créer un input type hidden qui prend la valeur non modifiée des ressources.

je sais pas si je suis bien clair ?

mercredi 26 février 2014

oasis Messages : 55

En fait au début il n'y avait que le pretty_number, maintenant l'affichage est correct mais j'aimerai incorporer la gestion d'affichage rouge si trop plein .

Sur la fonction pretty_number il est ajouté avec le $n non ? :

function colorNumber($n, $s = '')
{
if ($n > 0)
return (empty($s)) ? colorGreen($n) : colorGreen($s);
elseif ($n < 0)
return (empty($s)) ? colorRed($n) : colorRed($s);
else
return (empty($s)) ? $n : $s;
}

function colorRed($n)
{
return '<span style="color:#ff0000">' . $n . '</span>';
}

function colorGreen($n)
{
return '<span style="color:#00ff00">' . $n . '</span>';
}

function pretty_number($n, $dec = 0)
{
return number_format(floattostring($n, $dec), $dec, ',', '.');
}

je suppose donc qu'il faut donc modifier la fonction shortly qui elle ne contient pas $n, ou j'ai tout faux ?

function shortly_number($number)
{

$length = strlen(floattostring(abs($number)));
        if($length < 4)
                return pretty_number($number);
        elseif($length < 7)
                return pretty_number($number/1000.000).' K';
        elseif($length < 13)
                return pretty_number($number/1000000.000).' ML';
        elseif($length < 19)
                return pretty_number($number/1000000000000.000).' MD';
        elseif($length < 25)
                return pretty_number($number/1000000000000000000.000).' BL';
        elseif($length < 31)
                return pretty_number($number/1000000000000000000000000.000).' BD';
        elseif($length < 37)
                return pretty_number($number/1000000000000000000000000000000.000).' TL';
        elseif($length < 43)
                return pretty_number($number/1000000000000000000000000000000000000.000).' TD';
        elseif($length < 49)
                return pretty_number($number/1000000000000000000000000000000000000000000.000).' QL';
        elseif($length < 55)
                return pretty_number($number/1000000000000000000000000000000000000000000000000.000).' QD';
        else
                return pretty_number($number/1000000000000000000000000000000000000000000000000000000.000).' QX';
}
mercredi 26 février 2014

Homer Messages : 1826

Non, ne touche pas à ça, la gestion du trop plein tu la fait en js.

Du genre, sous chaque <span><b>{shortly_number($metal)}</b></span> tu rajoute un input hidden

<input type="hidden" id="metalmax" value="{$metalmax}" />

metalmax qui sera la capacité de stockage max déclarée en php

et sous js tu fais

if($('#current_metal').text() >= $('#metalmax').val() ) {
// Mettre en rouge
}

EDIT: d'ailleurs, je viens de voir que le shortly_number n'est pas bien placé, il faut le mettre dans le span current_"ressources"

jeudi 27 février 2014 (Dernière édition jeudi 27 février 2014)

oasis Messages : 55
Homer :

Non, ne touche pas à ça, la gestion du trop plein tu la fait en js.

Du genre, sous chaque <span><b>{shortly_number($metal)}</b></span> tu rajoute un input hidden

<input type="hidden" id="metalmax" value="{$metalmax}" />

metalmax qui sera la capacité de stockage max déclarée en php

et sous js tu fais

if($('#current_metal').text() >= $('#metalmax').val() ) {
// Mettre en rouge
}

EDIT: d'ailleurs, je viens de voir que le shortly_number n'est pas bien placé, il faut le mettre dans le span current_"ressources"

Oui je l'ai mis dans un spans ajouté car si je le mets dans le current ca s'affiche bien mais lors du clique sur "Max" pour le transport des ressources il ne prend que la valeur contractée comme dit plus haut

Merci pour le java je vais essayé,

A la place de ton "mettre en rouge" tu veux dire qu'il faut que je trouve le code javascript qui met en rouge ?

jeudi 27 février 2014 (Dernière édition jeudi 27 février 2014)

Homer Messages : 1826

tu rajoute un

<font color="red">valeur</font>

ou tu crée un class css

 .red { color:red;}
et tu ajoute la class en jquery
$('#metalmax').addClass('red');

Vérifie pour addClass, j'ai un doute sur la typo

vendredi 28 février 2014 (Dernière édition vendredi 28 février 2014)

oasis Messages : 55

Jai donc préféré la méthode modif du js:

J'ai modifié le topnav.js de la maniere suivante :

//topnav.js
//RealTimeRessisanzeige for 2Moons
// @version 1.0
// @copyright 2010 by ShadoX

function resourceTicker(config, init) {
if(typeof init !== "undefined" && init === true)
window.setInterval(function(){resourceTicker(config)}, 1000);

var element = document.getElementById(config.valueElem);

if(element.className.match(/res_current_max/) !== null)
return false;
//Code couleur Max Hommer
if($('#current_metal').text() >= $('#metalmax').val() ) {
        <font color="red">shortly_number(nrResource)</font>
}
//
var nrResource = Math.round(config.available + config.production / 3600 * (serverTime.getTime() - startTime) / 1000);
if (nrResource < config.limit[1])
{
if (nrResource >= config.limit[1])
element.className = element.className+" res_current_max";
else if (nrResource >= config.limit[1] * 0.9)
element.className = element.className+" res_current_warn";

element.innerHTML = shortly_number(nrResource);
element.name = NumberGetHumanReadable(nrResource);
} else {
element.className = element.className+" res_current_max";
}
}

Je ne suis pas certain du "shortly_number(nrResource)" et de son placement de facon a ce qu'il soit bien interprété.

Ais je bon ?

Merci de ton aide Homer

dimanche 2 mars 2014

Homer Messages : 1826

apparement dans le code que je vois y'a déjà une option pour changer la couleur en cas de max

lundi 3 mars 2014

oasis Messages : 55

Où le vois tu? Si tu parle du fontcolor c'est moi qui l'ai ajouté

lundi 3 mars 2014

Homer Messages : 1826
var nrResource = Math.round(config.available + config.production / 3600 * (serverTime.getTime() - startTime) / 1000);
if (nrResource < config.limit[1])
{
if (nrResource >= config.limit[1])
element.className = element.className+" res_current_max";
else if (nrResource >= config.limit[1] * 0.9)
element.className = element.className+" res_current_warn";

element.innerHTML = shortly_number(nrResource);
element.name = NumberGetHumanReadable(nrResource);
} else {
element.className = element.className+" res_current_max";
}
mardi 4 mars 2014

Page suivante »