JeuWeb - Crée ton jeu par navigateur
Probleme - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Probleme (/showthread.php?tid=554)



Probleme - Thenitrofilme - 19-12-2006

Salut, je suis en train de développez un rpg en php du nom d'arcania.
La map est déjà finie, la gestion des déplacement aussi, mais voilà g un problème.

Je pense que beaucoup d'entre vous connaisse le jeu mounty hall et son système de DLA, c'est la que réside mon problème.

En effet g une base de donnée contenant les 4 donnée concernées:
  1. dep
  2. dep_max
  3. pac
  4. pac_max
En sachant:
-que Dep son les point de déplacement(une cas egale a -1 dep)
-que Dep_max est le nombre maximal de dep
-que pac sont les point d'action(une attaque, par exemple, coute 4 pac)
-que pac_max est le nombre max de point d'action(pac)

Je voudrait que quand un membre se connecte avec son compte, un message lui demande s'il veut jouer maintenant, si oui, la valeur des pac doit vaoilr la valeure des pac_max et la valeur de dep doit valoir celle de dep_max. Si jamais il utilise touten 10 minutes, qu'il se déconecte, il doivent attendre 12heure( depuis le premier message) afin de pouvoir remettre ses pac à pac_max et dep à dep_max en passant par le meme message.

Donc en l'ordre:
1.connection du membre.
2.Demande de jouer
3. si oui, dep=dep_max,pac=pac_max
4.joue.
5.il se deconnecte
5 bis. il se reconnecte
6.Si cela ne fait pas 12 heures, on lui fait remarque en indiquant combien de temps il lui reste mais il peut quad meme rentrer dans le jeu sans aucune mise a jour de ses pac et dep
7.Si cela fait 12 heure, on retourne au message2

Je pensait a un timestamp mais voila je ne sais pas comment faire, je vous remercie d'avance pour votre aide.

Thenitrofilm


RE: Probleme - joshua - 19-12-2006

tout bete....
pour un timestamp, tu utilise la fonction time()
tu sauvegardes dans une variable en base la valeur de time() comme "reference"
a chaque appel, tu recupere la valeur de dep et de pac. Si time-ref > 12*60*60, alors tu mets dep et pac aux valeurs max. Par contre, tu ne les decremente en base que lorsque le joueur fait un deplacement.
ex:
Le joueur se connecte apres 12H; on lui affiche la valeur max mais la valeur en base n'est pas changée.
le joueur se reconnecte une heure apres et se deplace. les valeurs lui indique alors avant son deplacement le max et apres le max -1, et en plus, en base tu as stocké la valeur de déplacement qui lui reste et le nouveau timestamp.


RE: Probleme - Aramiil - 19-12-2006

Tu rajoutes dans ta base de données un champs last (par exemple)

Ensuite lorsque l'utilisateur se connecte, tu fais 'UPDATE taTable SET last = ' . time() . ' WHERE ...'; pour mettre le résultat de la fonction time() dans le champs last.

Et lorsque l'utilisateur se connecte, tu fais :

Code PHP :
<?php 
//La variable $last doit contenir la valeure du champs last
//43200 = 60 * 60 * 12 = 12h en secondes
if($last + 43200 < time())
{
//Mise à jour des points d'action et de déplacement
}

Edit: arf, grillé ^^


RE: Probleme - joshua - 19-12-2006

salut aramiil, je ne suis pas d'accord avec toi ^^
Je pense qu'il vaut mieux mettre à jour en base uniquement quand la personne fait des actions pour une raison simple: avec ta methode, si la personne appuie sur refresh plusieurs fois il peut donner une sacrée claque a ta base... surtout s'ils sont 1000 a le faire ou une simple personne malintentionnée.


RE: Probleme - Thenitrofilme - 19-12-2006

Merci beaucoup.
En fait j'ai trouvé une solution
j'utilise une page avec un if du genre(aramiil)

Page d'accueil:
Code :
<?
$timestamp=time();
if($last+43200<$timestamp)
{
Echo'Cela fait 12 heures depuis votre derniere Dayly Action Update<br><a href="update.php">Activer sa DAU.</a>';
}
else
{
echo'Cela fait moins de 12 heures que vous avez activez votre DAU<br><a href="jeu.php">Jouer</a>';
}
?>

Ensuite la page update.php:
Code :
<?
//on se connecte
mysql_connect("localhost","login","mdp");
mysql_select_db("db");
//on met la valeur dans une variable
$timestamp=time();
//on revérifie pour etre sur et pour ne pas qu'il y ai de fraude
//j'utilise un système de session ou la mise en mémoire se fait des le login
if($last+43200<$timestamp)
{
//on update en rajoutant un nouveau timestamp de 12 heures
mysql_query("UPDATE table_membres Set pac='$pac_max',dep='$dep_max,last='$timestamp'  WHERE pseudo='$pseudo'") or die (mysql_error());
//on redefini les variable
$dep=$dep_max;
$pac=$pac_max;
}
else
{
echo'Cela fait moins de 12 heures que vous avez activez votre DAU<br><a href="jeu.php">Jouer</a>
}
?>

Est-ce bon?


RE: Probleme - gtsoul - 19-12-2006

tu n'as plus qu'à remplacer 43200 par le poids porté et tu obtiens le système de mountyhall (ils se font pas chier avec des cron).
et rajouter un ";" ici :
Code PHP :
<?php 
$pac_update
=$pac_max



RE: Probleme - Thenitrofilme - 19-12-2006

Ne t'inquiete pas je vien de tout remplacer et sa marche nickel c imposible de frauder et adieu les cron ^^ merci joshua et Aramiil


RE: Probleme - Aramiil - 19-12-2006

Pfiou juste pour répondre à joshua oui, je devais être fatigué en écrivant ça ^^" je voulais simplement dire que l'update se faisait lorsque les points était mis à jour, pas à chaque connexion ^^"

Faut vraiment que je dorme, moi...