JeuWeb - Crée ton jeu par navigateur
Aide systeme de ressources - 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 : Aide systeme de ressources (/showthread.php?tid=4898)



Aide systeme de ressources - LoKeD - 10-06-2010

Bonsoir à tous et à toutes,

Je viens requérir votre aide pour un script de système de gains de ressources ! voici mon script :
Code PHP :
<?php
$date_now
= date("Y-m-d H:i:s");
$date_bdd = $design['date_heure'];

$sql8 = 'SELECT * FROM Joueur WHERE TIMEDIFF("$date_now", "$date_bdd") >= "01:00:00" AND username="'.$_SESSION['username'].'"';
$req8 = mysql_query($sql8) or die(mysql_error());
$data8 = mysql_fetch_assoc($req8);

if (isset(
$data8['username']))
{
$req_batiment_garnison = "SELECT * FROM batiments WHERE name ='forge_outil'";
$qry_batiment_garnison = mysql_query($req_batiment_garnison) or die (mysql_error());
$batiment_garnison = mysql_fetch_array($qry_batiment_garnison);
$req_batiment_garnison_grenier = "SELECT * FROM batiments WHERE name ='grenier'";
$qry_batiment_grenier = mysql_query($req_batiment_garnison_grenier) or die (mysql_error());
$batiment_garnison_grenier = mysql_fetch_array($qry_batiment_grenier);

$ecart = $date_now - $design['date_heure'];
// ------------------------------------------------MAXIMUM DE STOCKAGE ---------------------------------------------------
$max_outils = $batiment_garnison['stockage']+($data2['forge_outils']*$batiment_garnison['accr_stockage']);
$max_food = $$batiment_garnison_grenier['stockage']+($data2['grenier']*$batiment_garnison_grenier['accr_stockage']);
// ------------------------------------------------ GAINS DE RESSOURCES ---------------------------------------------------
$gains_or = $data2['or']+((($data2['citoyen']/2)*$data2['impot'])*$ecart);
$gains_outil = $data2['outils']+(($data2['citoyen']/2)*$data2['forge_outils'])*$ecart;
$gains_food = $data2['nourriture']+(($data2['citoyen']/2)*$data2['grenier'])*$ecart;

if (
$gains_outil > $max_outils)
{
$gains_outil = $max_outils; }

if (
$gains_food > $max_food)
{
$gains_food = $max_food; }

$heur_add = 60*60;
$rnd_citoyen = RAND(0, 10);
$citoyens = ($data2['citoyen'] + $rnd_citoyen)*$ecart;
$heure = date("H:i:s", time()+$heur_add);
$add_heure = 'UPDATE Joueur SET date_heure="'.$heure.'" WHERE username="'.$_SESSION['username'].'"';
$add_heure2 = mysql_query($add_heure) or die (mysql_error());
$add_gain = 'UPDATE village SET `or`="'.floor($gains_or).'", outils="'.floor($gains_outil).'", citoyen="'.$citoyens.'", nourriture="'.floor($gains_food).'" WHERE username="'.$_SESSION['username'].'"';
$add_gains = mysql_query($add_gain) or die (mysql_error());
}
else echo
'<font color="white"> - '.$data8['username'].' - '.$design['date_heure'];
?>

Ma table SQL pour la date : `date_heure` datetime NOT NULL,

Déjà le problème N°1 : Il ne trouve pas la requête SQL !
Il m'affiche ceci dans le else : <gras>- - 0000-00-00 00:00:00</gras> Alors qu'il devrais y avoir ceci : <gras>- Pseudo - YYYY-mm-dd H:iConfused</gras> mais vue qu'il trouverais le else n'y serais pas ! donc il devrait continuer dans le if.

J'espère que vous comprenez jusque là ^^

Ensuite second problème je sais pas comment faire une différence de date afin de pouvoir faire :

Lorsque le joueur se connecte, si il c'est pas connecté depuis 5 heures, et bien cela multiplie les gains de ressources*5 !

Merci d'avance pour votre aide !

Et désolé si mon script est beaucoup en bordel ! xD j'ai malheureusement pris l'habitude de coder comme ceci Confused.


RE: Aide systeme de ressources - php_addict - 10-06-2010

(10-06-2010, 03:24 AM)LoKeD a écrit : Déjà le problème N°1 : Il ne trouve pas la requête SQL !

cela doit être parce que ta requete n'est pas bonne tout simplement...

(10-06-2010, 03:24 AM)LoKeD a écrit : Ensuite second problème je sais pas comment faire une différence de date afin de pouvoir faire :

Lorsque le joueur se connecte, si il c'est pas connecté depuis 5 heures, et bien cela multiplie les gains de ressources*5 !

euh ben une multiplication par 5 ?
regarde le wiki -> http://wiki.jeuweb.org/tutoprog/ressources_temps_reel
il te faut un timestamp de la derniere actualisation de tes ressource, apres quoi tu calcul tes ressource par rapport a ce dernier timestamp et le timestamps auquel tu veux afficher tes ressources.


RE: Aide systeme de ressources - LoKeD - 10-06-2010

Merci de ta réponse ^^ pour ce qui est du problème N°1, lorsque j'enleve le DATEDIFF la requête marche, donc cela doit venir de cela, mais où est le problème du datediff ?? Oo car j'utilise le même système pour un autres de mes site ! et cela marche parfaitement. Ou alors la table date_heure est mal configuré.

Pour le gains de ressources, je dois changer ma table en timestamp pour plus qu'elle ne soit au format YYYY-mm-dd HH:iiConfuseds ??


RE: Aide systeme de ressources - php_addict - 10-06-2010

(10-06-2010, 10:13 AM)LoKeD a écrit : Pour le gains de ressources, je dois changer ma table en timestamp pour plus qu'elle ne soit au format YYYY-mm-dd HH:iiConfuseds ??

euh je sais pas, je n'utilises pas DATEDIFF , mon champ "time_stamp" est un simple INT , c'est plus facile pour faire des calculs certainement...


RE: Aide systeme de ressources - LoKeD - 10-06-2010

Je vais essayer de la même manière que tu procède , je redis ce que ça donne ^^

Cela à l'air de bien marcher merci =)

EDIT : maintenant le seul problème ! c'est pour rajouter 1heure au timestamp ^^ j'ai essayé :

$heur_add = 60*60;
$heure = time('H', +$heur_add); ET $heure = time()+$heur_add; Et $heure = time()+time('H', +$heur_add); Mais rien n'y fait Confused

EDIT2 : Problème réglé, encore un soucis voici comment j'ai prossédé :

$ecart = $date_now - $date_bdd;
if($ecart >= 0)
{
// scripts
}

mais le problème, c'est que si l'écart ets de 2 ou 3 ou plus, cela mutliplie les gains x2, x3 ou plus ! donc comment régler ce problème ?

faire des gains par secondes, ou y a t-il un moyen de remédier à cela ^^ merci d'avance,


RE: Aide systeme de ressources - Sephi-Chan - 10-06-2010

Je te déconseille d'utiliser des timestamp sous forme d'entiers. En effet, les systèmes de base de données disposent de plusieurs fonctions pour gérer les dates et le temps : autant les utiliser, c'est plus efficace et c'est ça de moins à écrire soit-même. Bien sur, ça implique de se documenter… MySQL — Date and time functions.


Sephi-Chan


RE: Aide systeme de ressources - LoKeD - 10-06-2010

Merci pour m'avoir aidé ^^ à vous deux, j'ai réussi à réglé mon problème ^^

Les gains ne sont pas en temps réel mais c'est déjà un début et une nouvelle connaissance pour ma par ^^
j'ai procédé comme ceci, au cas ou quelqu'un serait intéressé !

Code PHP :
<?php
/*on calcul l'écart entre les deux date, et on additionne 60*60(3600 secondes) pour faire 1 heure */
$ecart = $date_now - $date_bdd+(60*60);
if(
$ecart >= 3600) // si l'écart est supérieur à 1heure
{

$ecart = $ecart/(60*60); /* on divise alors l'écart par 3600 pour que les secondes en trop ne soit pas compté */
$ecart = floor($ecart); // et on arrondi le résultat pour éviter les chiffres à virgule
?>

Et voilà ^^ c'est assez "bordel" j'avoue Confused