JeuWeb - Crée ton jeu par navigateur
action a effectuer - 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 : action a effectuer (/showthread.php?tid=908)

Pages : 1 2


RE: action a effectuer - max - 07-03-2007

oui et moi aussi j'ai un script pour la creation de batiments avec un compte a rebour dynamique et une redirection JS, ca marche bien sur tout les moteurs qu'il a cité.

sinon je pense avoir compri une grande chose pourtant toute conne ^^
en fait ce n'est pas possible de faire "en temps réel" mais on peut gérer le temps d'abscence c'est ca? et donc quand on se conecten le jeu a simulé un temps réel grace au temps d'abscence du joueur.. j'ai bon?

ce qui me perturbe le plus quand meme c'est l'heure d'arrivée des vaisseaux
j'e shematise le script rapidement: (si vous en avez vraiment besoin, je le posterai, dites le)

on calcule la durée du voyage (en seconde) a partir de la distance/vitesse
quand on envoye la flotte, on enregistre le temps de l'allé --> allé=mktime()+$durer
on enregistre allé dans la bdd.
a partir de la, si allé existe, on a temps_restant_aller= allé-mktime()
si (temps_restant_aller <=0) la flotte est arrivée, on suprime allé de la bdd,on enregistre retour=mktime()+$durer
et après on fait pareil quand la flotte est revenue.

voila a peu près ce que ca donne, ca marche bien mais quand on est pas connecté, la flotte n'est pas "considérée comme arrivée chez le joueur"... j'ai verifié ca ne s'enregistre pas dans la bdd et comme la flotte entame le retour que quand elle est bien arrivée chez le joueur, elle ne commence a revenir que lorsque la page est actualisée (que le joeur se reconecte en fait)

vous avez compri? j'ai du mal a expliquer ^^


RE: action a effectuer - jo_link_noir - 07-03-2007

"allé=mktime()+$durer"

pour le retour $retour = $allé + $durer;
comme ça dès qu'on se reconnecte ça auras prit le temps d'absence

si ($retour <=0) la flotte est revenu, on peut suprime de la bdd


RE: action a effectuer - denisc - 07-03-2007

non... Faut pas stocker le temps de vol, faut stocker le timestamp du moment où la flotte arrive et revient.
Le test est si timespamp actuel >= timestamp arrivée alors on fait les actions liées à l'arrivée.
Une action annuler intervient avant l'arrivée? On remplace le timestamp de retour par (timestamp_retour_normal+timestamp_actuel-timestamp_arrivee)
Faciles les maths Wink


RE: action a effectuer - max - 07-03-2007

bon j'avais dit que je le ferai donc je vous post le morceau du script qui nous interesse:

Code PHP :
<?php 
$requete2
= mysql_query("SELECT * FROM mouvements where `pseudo`='".$pseudo_membre."' ") or die (mysql_error());
$sql2 = mysql_fetch_array ($requete2);
$durer=$sql2['durer'];
$conso=$sql2['conso'];
$nb_vsx1=$sql2['nb_vsx1'];
$nb_vsx2=$sql2['nb_vsx2'];
$tps_aller = $sql2['tps_aller'];
$tps_retour = $sql2['tps_retour'];
$aller_rebour=$tps_aller-mktime();
$retour_rebour=$tps_retour-mktime();


if (isset(
$_POST['lancer_finale']) and !isset($_POST['lancer_flotte']))
{
$time_aller=mktime()+$durer;
mysql_query("UPDATE mouvements Set tps_aller='".$time_aller."' where `pseudo`='".$pseudo_membre."'") or die (mysql_error());
}

if (
$tps_retour==NULL and $tps_aller!=NULL) // si la flotte est arivée
{?>
<SCRIPT LANGUAGE='JavaScript'>
<!--
function redirect() {
window.location='mouvements.php'
}
setTimeout('redirect()',<?=$aller_rebour*1000;?>);
-->
</SCRIPT>
<?php
if ($aller_rebour <= 0){
$time_retour=mktime()+$durer;
mysql_query("UPDATE mouvements Set tps_aller='' , tps_retour='".$time_retour."' where `pseudo`='".$pseudo_membre."'") or die (mysql_error());
}
}

if (
$tps_retour!=NULL and $tps_aller==NULL) // si la flotte est revenue
{?>
<SCRIPT LANGUAGE='JavaScript'>
<!--
function redirect() {
window.location='mouvements.php'
}
setTimeout('redirect()',<?=$retour_rebour*1000;?>);
-->
</SCRIPT>
<?php
if($retour_rebour <= 0){
mysql_query("DELETE FROM mouvements WHERE pseudo='".$pseudo."'") or die (mysql_error());
}
}

c'est ptet pas optimisé a fond mais c'est pour que vous me disiez ce que vous changeriez a ma place


RE: action a effectuer - max - 08-03-2007

sinon on a eu une autre idée (carlou pour ne pas le citer)

on prend un cron qui effectue environ toute les 5 minutes une boucle dans l'ensemble des joueurs inscrits. j'explique:
if (attaque<=1) // si le joueur a lancé une attaque
{
if(aller_rebour >=0) // si la flotte est arrivée
{ on effectue les actions de la flotte (attaque, transport.....)
}
}


qu'en pensez vous? estceque ca ne va pas ralentir le serveur? a quel fréquence pensez vous que je peu effectuer cette verif?

merci,


RE: action a effectuer - max - 10-03-2007

I need help....