Bonjour,
J'ai le code suivant que j'ai pris ici
mais je voudrais que les ressources se mette a jour même si le joueur n'est pas connecté.
Code :
$requete = "SELECT * FROM joueurs WHERE pseudo='".$_SESSION['pseudo']."' ";
$resultat = mysql_query($requete) or die ('Erreur dans $requete : '.mysql_error());
$donnees = mysql_fetch_array($resultat);
// On met à jour
$metal = $donnees['metal'];
$left_time = (time() - $donnees['timestamp']);
$prod_metal = (((30*1*pow(3.2,1))+20)*2)*(1);
$metal = $metal+(($left_time*1)/3600);
$requete = "UPDATE joueurs SET metal = '".$metal."' WHERE pseudo = '".$_SESSION['pseudo']."' ";
mysql_query($requete) or die (mysql_error());
savez vous comment faire ceci sans passer via la Crontab ?
Cordialement,
en sauvegardant la dernière heure de connexion puis en faisant une soustraction, tu peux savoir combien de temps il est resté "hors ligne" puis tu applique ta formule, au lieu de 3 secondes tu en aura peut-être 300...etc.
En espérant t'avoir aidé.
(06-08-2009 11:14 AM)InboX a écrit : [ -> ]Bonjour,
J'ai le code suivant que j'ai pris ici
mais je voudrais que les ressources se mette a jour même si le joueur n'est pas connecté.
Code :
$requete = "SELECT * FROM joueurs WHERE pseudo='".$_SESSION['pseudo']."' ";
$resultat = mysql_query($requete) or die ('Erreur dans $requete : '.mysql_error());
$donnees = mysql_fetch_array($resultat);
// On met à jour
$metal = $donnees['metal'];
$left_time = (time() - $donnees['timestamp']);
$prod_metal = (((30*1*pow(3.2,1))+20)*2)*(1);
$metal = $metal+(($left_time*1)/3600);
$requete = "UPDATE joueurs SET metal = '".$metal."' WHERE pseudo = '".$_SESSION['pseudo']."' ";
mysql_query($requete) or die (mysql_error());
savez vous comment faire ceci sans passer via la Crontab ?
Cordialement,
1) fake de crontab (tu gère manuellement dans tes scripts)
2) tu exécute la commande au besoin (lors d'interaction: le joueur en ligne, ou un autre joueur interagit avec le compte -espionner, attaquer, que sais-je...-).

enfin là t'as prod de metal semble être fixe, alors je vois mal pourquoi tu te prends le choux. Le stock de métal en cours tu le connais à tout moment avec $metal = $metal+(($left_time*1)/3600); Donc pourquoi faire des mises à jour inutile ? (tu fais un update que quand tu change le stock, ajout ou retrait).
enfin ta formule est bancale, où est passé la prod_metal ?
en faite j'ai refait le code
avec des morceaux existant sur le forum et ca marche mieux
Code :
$temps_actuel = time();
$temps_ancien = $donnees['timestamp'];
$temps_ecoule = $temps_actuel - $temps_ancien;
$prod_metal = (10*1/3600) * $temps_ecoule;
$totalmetal = $donnees['metal'] + $prod_metal;
$requete = "UPDATE joueurs SET metal = '".$totalmetal."' WHERE pseudo = '".$_SESSION['pseudo']."' ";
mysql_query($requete) or die (mysql_error());
Mais j'ai pas compris comment faire pour que les ressources se mette a jour
sans que le joueur soit en ligne c'est important car je voudrais faire un jeu du genre comme "Ogame.fr" sauf que la c'est avec des Monstres dans l'espace et des humains qui attaquent de la terre enfin c'est assez complexe a expliquer
Je voudrais juste que mes ressources s'actualise sans que le joueur soit en ligne
PS: ton idée est bien christouphe mais je comprend pas tout
cordialement,
(06-08-2009 11:43 AM)wild-D a écrit : [ -> ]1) fake de crontab (tu gère manuellement dans tes scripts)
2) tu exécute la commande au besoin (lors d'interaction: le joueur en ligne, ou un autre joueur interagit avec le compte -espionner, attaquer, que sais-je...-).
La solution a été donnée, je crois

Bon développement.
Bonjour,
Oui j'ai fait autrement et ça l'aire de marcher
Les ressources montent même si y a aucun joueur en ligne
Merci de votre aide
cordialement,
gné ?? oÔ, quel est l'intérêt de charger un serveur alors que personne n'y est dessus ?
Justement, c'est précisément quand il n'y a personne sur le serveur qu'il faut lancer les tâches automatiques, typiquement la mise à jour des ressources. Lancés en heures creuses, ces scripts ne ralentissent personne.
De même, je préfère utiliser les crontabs aux systèmes qui les simulent puisque le code source en ressort largement clarifié : on sépare le traitement de fond du traitement direct. De plus, c'est bien plus souple et simple à maintenir puisque les tâches sont centralisées dans une poignée de fichiers.
Après, c'est sûr que les crontabs, il faut les avoir sur son propre serveur et pas passer par un service qui va t'en foirer un de temps à autres.
Sephi-Chan
(06-09-2009 01:22 PM)Sephi-Chan a écrit : [ -> ][...]Après, c'est sûr que les crontabs, il faut les avoir sur son propre serveur et pas passer par un service qui va t'en foirer un de temps à autres.
Sephi-Chan
c'est vrai car la plupart du temps on est sur du mutualisé. Sinon je plussoie la partie avant, même si je passe par des script car serveur mutualisé.
Inversement, un crontab peut se lancer même si le serveur est surchargé, venant plomber des performances déjà mauvaises.
De plus, si tu as par exemple un gameplay qui demandé à calculer les ressources non pas sur la base d'un tour de jeu mais de manière continue, le crontab n'est pas adapté.