JeuWeb - Crée ton jeu par navigateur

Version complète : [En cours] Nameless, anciennement NukeLand
Vous consultez actuellement la version basse qualité d'un document. Voir la version complète avec le bon formatage.
Pages : 1 2 3 4 5 6 7
Ce sera forcément plus rentable que de faire une requête via Ajax par lettre tapée. 2

Mais bon, de manière générale, un tel contrôle ne sert pas à grand chose. Celui qui peut être utile (et qui n'utilise que Javascript, pas Ajax), c'est d'empêcher l'écriture de caractères interdits. 2

Concernant les adresses, je te conseille de mettre une contrainte d'unicité dans la base de données sur le nom et l'email. L'adresse IP ne doit servir que d'indice à la limite.

Tu peux ensuite faire des logs de chaque action des joueurs qui ont un marqueur "surveillé" (qui s'active quand tu détectes une action frauduleuse de leur part, comme la modification de valeur dans un champ de formulaire de type select, hidden, radio, etc.) dans un fichier (que tu supprimes ou archive chaque mois) texte ou XML (c'est encore mieux, car tu peux facilement générer un tableau HTML que tu peux trier et filtrer grâce à Javascript) pour voir ce qu'à fait le joueur, s'il continue ses actions douteuses, etc.

De toute façon, la sécurité, ça se fait par couches, plus tu ajoutes de choses pour traquer les fraudeurs, mieux c'est ! 2


Sephi-Chan
Oui, c'est vrai.

Citation :Concernant les adresses, je te conseille de mettre une contrainte d'unicité dans la base de données sur le nom et l'email. L'adresse IP ne doit servir que d'indice à la limite.

Pour le nom je ne peut pas empêcher les membres de mettre n'importe quoi et je ne vois pourquoi un membre créant des multicomptes se soucierait de mettre son vrai nom.
Quant à l'adresse email, c'est une idée mais étant donné que je ne vérifie pas si elle est valide par un email de validation ( je trouve ça extrêmement chiant ) ni avec un script php, je vérifie juste le xxx@xxx.xx ce qui ne me garanti en rien de la validité des adresses emails, et me forcera à employer la messagerie privée ( limitée à un certain nombre de messages ) pour contacter les membres. Et puis, ça ne me servirait à rien vu qu'il y a une option 'modifier ses informations personnelles'.
Une autre solution est d'utiliser la validation par email et d'en réutiliser une à chaque fois qu'un membre modifie son adresse email, mais au moins je suis sur de la validité.
Ou bien empêcher tout court sa modification une fois le membre inscrit.

En revanche, je ne vois pas très bien tes critiques par rapport à une page avec toutes les doubles ip. Un membre peut expliquer qu'il ait un frère, mais pas qu'il ait 75 comptes 10
D'autre part, ça facilitera le travail aux modos, non ?

Citation :Celui qui peut être utile (et qui n'utilise que Javascript, pas Ajax), c'est d'empêcher l'écriture de caractères interdits.

Du style pour pas que le membre n'entre des $*€@# ? C'est vrai que ça soule un peu, de voir des pseudos comme ceux là mais je ne sais pas trop encore si je devrais l'en empêcher ou pas.

Valter, qui te remercie de tes reflections
Franchement, tu devrais établir une politique de nommage, vérifiée par une Regex. Par exemple, pour Seelies on a choisis des noms du genre (Alpha)(éventuellement un - ou un ' ou un espace)(Alpha). Comme ça on est sur de pas se tapper de BoGossDu91 ou autre trop fantaisiste. Et si quelqu'un à un nom qui ne nous convient pas pour le respect de l'univers, ben on lui fait changer. 2

De même, pour l'email, tu peux faire qu'à l'inscription on entre un nom d'utilisateur et un email, et ça envoie le mot de passe par email. Comme ça, si le mec a donné un mauvais email, il est pas près de se connecter (pour changer son mot de passe). Et quand il change de mail, pareil, ça lui change son mot de passe, le déconnecte et lui envoie un mail contenant le mot de passe généré.

Ça n'empêche pas les plus motivés de faire des comptes mail poubelle. 16

Concernant les IP, tu peux le faire, c'est toujours un plus. 2


Sephi-Chan
Petite mise à jours du coté de NukeLand :

• Création d'une section "bourse", où les membres pourront y déposer leurs ressources ( je ne sais pas encore si j'y impose une taxe ou non )

• Et j'ai également réfléchit à une "carte de la base" que je m'étais promis de créer. Elle se représentera ainsi :

[Image: pngpngey4.png]

Détails des parties :

Centre : Peut-être un centre administratif
Aile Nord : Probablement tout ce qui concerne l'offensive
Aile Est : Probablement les infrastructures de production
Aile Sud : Sais pas encore
Aile Ouest : Entre autres tout l'arsenal que ce soit défensivement ou offensivement

Si vous vous dites que ça fait un peu maigrichon, étant donné qu'il y a 5 cartes pour une petite base comme ça, rassurez vous j'en ai encore plein à placer !

Bon, je crois que j'ai suffisamment bossé pour me faire plaisir et mettre mon avancement à 27% !

Valter, qui sais qu'il est un fainéant !

EDIT :
Citation :Plus simple pour le contrôle Ajax (qui par l'occasion devient un simple contrôle Javascript) : tu crées une liste de tous les membres au chargement de la page, tu mets ça dans un tableau Javascript, puis à chaque appui sur une touche (keydown), ça vérifie les noms déjà pris, ça n'inscrit pas les caractères interdits.

Oui mais, dans ce cas si une personne affiche le code source il verra tous les pseudos. Mais c'est pas trop contraignant, puisqu'il pourra les voir également dans classement 16
M'inspirant de l'initiative open-source de Sephi-Chan, je vais poster ici certains de mes scripts dans un but d'une amélioration ou de critiques.
Je commence avec un de mes scripts POO ( le temps que je cherche les autres ) qui affiche la variation d'une ressource au hasard :

Code PHP :
<?
class Ressource {
    public 
$name// On lui donne un nom ( pas pour cette fois )
    
public $value// La valeur, comme on est ici en test, je prends un truc au hasard
    
public $less// Le seuil minimum à ne pas dépasser
    
public $most// Le seuil maximum à ne pas dépasser
    
public $incrl// L'incrémentation minimum
    
public $incrm// L'incrémentation maximum
    
   
function __construct() { // On définit le tout
      
$this->value 3;
      
$this->less 0.4;
      
$this->most 123;
      
$this->incrl = -300;
      
$this->incrm 500;
/* Comme j'ai pas trouvé de rand() avec les nombres décimaux, j'ai multiplié par 1000
...et je rediviserai après ;) */
   
}

   public function 
echoo() { // Une fonction simplement pour afficher
      
$incr rand($this->incrl$this->incrm); // On définit $incr comme un nombre entre
      
$real = ($incr 1000) + $this->value// On l'ajoute à la valeur après avoir divisé
      
echo .$incr." + ".$this->value."<br />"// On affiche
      
echo $real// Et le résultat
   
}
}

$acier = new Ressource();
$acier->echoo();
?>

http://0tt0k4r.free.fr/carte.php
Encore une fois, étant donné que le script est incomplet, j'ai simplement posté la partie test, j'y mettrais l'intégralité du code lorsque je l'aurai terminé.

Valter,
Bonsoir Valter,

Je me permettrais un petit conseil pour ce script. En objet, il est conseillé de ne jamais afficher des données dans une méthode.
On utilise plutôt le mot clé return, ainsi le code devient : echo $acier-echoo(), méthode que je te conseille de renommer en faveur d'un nom comme showValue() ou du genre. 16

Ah également, je ne comprends pas trop le fonctionnement de cette classe (ou plutôt son utilité), tu donnes des valeurs constantes dans ton constructeurs, mais c'est amené à changer ? Les différentes ressources sont stockées dans une base de données/fichiers/etc. ?


Sephi-Chan
En fait c'est juste une démonstration que j'affiche vu que je n'ai pas terminé mon script de bourse ; ici il ne sert pas à grand chose mais dans le concret, ça s'applique à chaque ressource qui sont ensuite mis à jours dans mon fichier bourse.xml ( je suis en train d'apprendre à le faire 32 ) qui est ensuite parsé et lu,etc...une boucle infernale 10

Citation :En objet, il est conseillé de ne jamais afficher des données dans une méthode.
On utilise plutôt le mot clé return, ainsi le code devient : echo $acier-echoo()

Tout d'abord merci de ce conseil, mais s'applique t-il également lorsqu'il s'agit d'une fonction qui n'affiche rien ?
Du style :
Code PHP :
$acier->update("Acier",$ac,$val,$les,$mos); 

Merci,
Valter,
Une fonction/méthode qui ne renvoie rien s'appelle une procédure. Pour des raisons de pratique, tu peux lui faire retourner TRUE (si la procédure se passe bien, genre si après la mise à jour, mysql_affected_rows() renvoie bien un nombre supérieur à 0 ou FALSE dans le cas contraire (ou alors tu renvoies une exception).

Dans le premier cas (avec TRUE et FALSE) ça donnera quelque chose comme :
Code PHP :
public function update($ressource$argument1$argument2){

    
$query sprintf(
        
"UPDATE    ressources
        SET        variable = %d,
                variable_bis = %d
        WHERE ressource_id = %d"
,
        (int) 
$argument1,
        (int) 
$argument2,
        (int) 
$ressource
    
);
    
$sql mysql_query($query);

    if(
mysql_affected_rows()){ return TRUE; }
    else { return 
FALSE; }



Que tu utilises comme ça :
Code PHP :
if($objet->update(/* Tes arguments */)){
    echo 
"La mise à jour a été effectuée avec succès.";
}
else {
    echo 
"Une erreur est survenue au cours de la mise à jour.";



Ou bien la méthode des exceptions :
Code PHP :
public function update($ressource$argument1$argument2){

    
$query sprintf(
        
"UPDATE    ressources
        SET        variable = %d,
                variable_bis = %d
        WHERE ressource_id = %d"
,
        (int) 
$argument1,
        (int) 
$argument2,
        (int) 
$ressource
    
);
    
$sql mysql_query($query);

    if(
mysql_affected_rows()){ return TRUE; }
    else { throw new 
Exception("Une erreur est survenue au cours de la mise à jour."); }



Que tu utilises comme ça :
Code PHP :
try {
    
$objet->update(/* Tes arguments */);
    echo 
"La mise à jour a été effectuée avec succès.";
}
catch(
Exception $e){
    echo 
$e;



Voilà, voilà. 2

Comme tu peux le voir, les exceptions sont un moyen simple de gérer les erreurs de manière précise : tu envoie le message que tu veux pour chaque cas d'erreur.

Pour avoir un tel résultat avec des return, il faut renvoyer un nombre, puis avoir un tableau qui a pour clé le numéro de l'erreur et comme valeur le message, et donc c'est plus chiant. 2

Moralité : les exception, c'est bien pour les méthodes qui ont plusieurs causes d'échec potentielles. Mais dans une fonction de test, qui vérifie la validité d'un nom, par exemple, un simple return TRUE/FALSE suffit. 2


Sephi-Chan
En fait j'utilise xml 10

Voilà, j'ai terminé la structure de mon script que voici :
Code PHP :
<?
$xml 
= new DomDocument();
$xml->load('bourse.xml');
$elements $xml->getElementsByTagName('bourse');
$element $elements->item(0);
$child $element->childNodes;
               
foreach(
$child as $enfant) {
        
$nom $enfant->nodeName;
        if (
$nom == "acier") { $ac $enfant->nodeValue; }
        elseif (
$nom == "hydro") { $hy $enfant->nodeValue; }
        elseif (
$nom == "oxy") { $ox $enfant->nodeValue; }
        elseif (
$nom == "soufre") { $so $enfant->nodeValue; }
        elseif (
$nom == "xenon") { $xe $enfant->nodeValue; }
        elseif (
$nom == "titane") { $ti $enfant->nodeValue; }
        elseif (
$nom == "lithium") { $li $enfant->nodeValue; }
        elseif (
$nom == "zinc") { $zi $enfant->nodeValue; }
        elseif (
$nom == "mercure") { $me $enfant->nodeValue; }
        elseif (
$nom == "uranium") { $ur $enfant->nodeValue; }
        elseif (
$nom == "energie") { $en $enfant->nodeValue; }
}

class 
Ressource {
    public 
$value;
    public 
$less;
    public 
$most;
    public 
$incrl;
    public 
$incrm;
    public 
$div;
    
    function 
__construct() {
        
$this->div 1000;
    }

    function 
make($val$les$mos$inl$inm) {
      
$this->value $val;
      
$this->less $les;
      
$this->most $mos;
      
$this->incrl $inl;
      
$this->incrm $inm;
    }

    function 
update() {
      
$incr rand($this->incrl$this->incrm);
      
$this->value += $incr $this->div;
      if (
$this->value <= $this->less) { $this->value += $this->incrl; }
      elseif (
$this->value >= $this->most) { $this->value -= $this->incrl; }
    }
}

$acier = new Ressource();
$acier->make($ac0.4123, -480500);
$acier->update();
$hydro = new Ressource();
$hydro->make($hy0.5156, -470490);
$hydro->update();
$oxy = new Ressource();
$oxy->make($ox0.5156, -470490);
$oxy->update();
$soufre = new Ressource();
$soufre->make($so0.4217, -430450);
$soufre->update();
$xenon = new Ressource();
$xenon->make($xe0.81209, -280300);
$xenon->update();
$titane = new Ressource();
$titane->make($ti0.6213, -440460);
$titane->update();
$lithium = new Ressource();
$lithium->make($li0.3513, -730750);
$lithium->update();
$zinc = new Ressource();
$zinc->make($zi0.6190, -440460);
$zinc->update();
$mercure = new Ressource();
$mercure->make($me0.7784, -530550);
$mercure->update();
$uranium = new Ressource();
$uranium->make($ur0.92165, -820840);
$uranium->update();
$energie = new Ressource();
$energie->make($en0.5490, -540560);
$energie->update();

$file fopen("bourse.xml""r+");
$line fputs($file'<?xml version="1.0"?>
<bourse>
   <acier>'
.$acier->value.'</acier>
   <hydro>'
.$hydro->value.'</hydro>
   <oxy>'
.$oxy->value.'</oxy>
   <soufre>'
.$soufre->value.'</soufre>
   <xenon>'
.$xenon->value.'</xenon>
   <titane>'
.$titane->value.'</titane>
   <lithium>'
.$lithium->value.'</lithium>
   <zinc>'
.$zinc->value.'</zinc>
   <mercure>'
.$mercure->value.'</mercure>
   <uranium>'
.$uranium->value.'</uranium>
   <energie>'
.$energie->value.'</energie>
</bourse>'
);
fclose($file);
?>
<img src="images/Ressources/acier.gif" class="ress" title="Acier"> : <? $ac number_format($ac2'.'' '); echo $ac?><br>
<img src="images/Ressources/hydro.gif" class="ress" title="Hydrogène"> : <? $hy number_format($hy2'.'' '); echo $hy?><br>
<img src="images/Ressources/oxy.gif" class="ress" title="Oxygène"> : <? $ox number_format($ox2'.'' '); echo $ox?><br>
<img src="images/Ressources/soufre.gif" class="ress" title="Soufre"> : <? $so number_format($so2'.'' '); echo $so?><br>
<img src="images/Ressources/xenon.gif" class="ress" title="Xénon"> : <? $xe number_format($xe2'.'' '); echo $xe?><br>
<img src="images/Ressources/titan.gif" class="ress" title="Titane"> : <? $ti number_format($ti2'.'' '); echo $ti?><br>
<img src="images/Ressources/lithium.gif" class="ress" title="Lithium"> : <? $li number_format($li2'.'' '); echo $li?><br>
<img src="images/Ressources/zinc.gif" class="ress" title="Zinc"> : <? $zi number_format($zi2'.'' '); echo $zi?><br>
<img src="images/Ressources/mercur.gif" class="ress" title="Mercure"> : <? $me number_format($me2'.'' '); echo $me?><br>
<img src="images/Ressources/uranium.gif" class="ress" title="Uranium"> : <? $ur number_format($ur2'.'' '); echo $ur?><br>
<img src="images/Ressources/ener.gif" class="ress" title="Energie"> : <? $en number_format($en2'.'' '); echo $en?></td> 

Je ne suis pas encore sur des cadences, valeurs,etc... J'ai également effectué les updates en fonction du nombre de fois que la page a été vue et non en temps réel pour simuler les fortes périodes de bourses le bon choix ? 34

Valter,
Bonjour,

Bon alors je le dit tout de suite je suis nul en POO, donc je vais pas m'attarder la dessus mais:

Code PHP :
if ($nom == "acier") { $ac $enfant->nodeValue; }
        elseif (
$nom == "hydro") { $hy $enfant->nodeValue; }
        elseif (
$nom == "oxy") { $ox $enfant->nodeValue; }
        elseif (
$nom == "soufre") { $so $enfant->nodeValue; }
        elseif (
$nom == "xenon") { $xe $enfant->nodeValue; }
        elseif (
$nom == "titane") { $ti $enfant->nodeValue; }
        elseif (
$nom == "lithium") { $li $enfant->nodeValue; }
        elseif (
$nom == "zinc") { $zi $enfant->nodeValue; }
        elseif (
$nom == "mercure") { $me $enfant->nodeValue; }
        elseif (
$nom == "uranium") { $ur $enfant->nodeValue; }
        elseif (
$nom == "energie") { $en $enfant->nodeValue; } 

Utilise plutot un switch, tu gagnera en lisibilité et en vitesse, le switch au dela de 5 ou 6 elseif est plus rapide (en dessous par contre sa vaux pas la peine).
Code PHP :
$acier = new Ressource();
$acier->make($ac0.4123, -480500);
$acier->update();
$hydro = new Ressource();
$hydro->make($hy0.5156, -470490);
$hydro->update();
$oxy = new Ressource();
$oxy->make($ox0.5156, -470490);
$oxy->update();
$soufre = new Ressource();
$soufre->make($so0.4217, -430450);
$soufre->update();
$xenon = new Ressource();
$xenon->make($xe0.81209, -280300);
$xenon->update();
$titane = new Ressource();
$titane->make($ti0.6213, -440460);
$titane->update();
$lithium = new Ressource();
$lithium->make($li0.3513, -730750);
$lithium->update();
$zinc = new Ressource();
$zinc->make($zi0.6190, -440460);
$zinc->update();
$mercure = new Ressource();
$mercure->make($me0.7784, -530550);
$mercure->update();
$uranium = new Ressource();
$uranium->make($ur0.92165, -820840);
$uranium->update();
$energie = new Ressource();
$energie->make($en0.5490, -540560);
$energie->update();

$file fopen("bourse.xml""r+");
$line fputs($file'<?xml version="1.0"?>
<bourse>
   <acier>'
.$acier->value.'</acier>
   <hydro>'
.$hydro->value.'</hydro>
   <oxy>'
.$oxy->value.'</oxy>
   <soufre>'
.$soufre->value.'</soufre>
   <xenon>'
.$xenon->value.'</xenon>
   <titane>'
.$titane->value.'</titane>
   <lithium>'
.$lithium->value.'</lithium>
   <zinc>'
.$zinc->value.'</zinc>
   <mercure>'
.$mercure->value.'</mercure>
   <uranium>'
.$uranium->value.'</uranium>
   <energie>'
.$energie->value.'</energie>
</bourse>'
);
fclose($file);
?>
<img src="images/Ressources/acier.gif" class="ress" title="Acier"> : <? $ac number_format($ac2'.'' '); echo $ac?><br>
<img src="images/Ressources/hydro.gif" class="ress" title="Hydrogène"> : <? $hy number_format($hy2'.'' '); echo $hy?><br>
<img src="images/Ressources/oxy.gif" class="ress" title="Oxygène"> : <? $ox number_format($ox2'.'' '); echo $ox?><br>
<img src="images/Ressources/soufre.gif" class="ress" title="Soufre"> : <? $so number_format($so2'.'' '); echo $so?><br>
<img src="images/Ressources/xenon.gif" class="ress" title="Xénon"> : <? $xe number_format($xe2'.'' '); echo $xe?><br>
<img src="images/Ressources/titan.gif" class="ress" title="Titane"> : <? $ti number_format($ti2'.'' '); echo $ti?><br>
<img src="images/Ressources/lithium.gif" class="ress" title="Lithium"> : <? $li number_format($li2'.'' '); echo $li?><br>
<img src="images/Ressources/zinc.gif" class="ress" title="Zinc"> : <? $zi number_format($zi2'.'' '); echo $zi?><br>
<img src="images/Ressources/mercur.gif" class="ress" title="Mercure"> : <? $me number_format($me2'.'' '); echo $me?><br>
<img src="images/Ressources/uranium.gif" class="ress" title="Uranium"> : <? $ur number_format($ur2'.'' '); echo $ur?><br>
<img src="images/Ressources/ener.gif" class="ress" title="Energie"> : <? $en number_format($en2'.'' '); echo $en?></td> 

Franchement c'est long a écrire tout sa, la loi de la fainéantise voudrais que tu t'arrange pour obtenir un tableau associatif et que tu te serve des clée et des valeurs pour affiche 10.


Voila quelques commentaires qui servent à rien 60

Phenix
Pages : 1 2 3 4 5 6 7
URLs de référence