-
Fonction à retardement ?
Bonjour,
En ce moment je développe un jeu web en php avec un ami. On se trouve confronté à un problème.
Comment faire en sorte que quand un joueur veuille construire un bâtiment ou envoyer une armée, l'action s'effectue au bout d'un certain temps.
Je pense par exemple à des jeux comme travian ou Ogame.
Je dois utiliser seulement du php? des tâches CRON ? je sais pas trop quoi faire =/
Merci d'avance.$
-
Pour bien te repondre il faudrait connaitre les mecanismes de ton code.
On pourrait imaginer par exemple qu'une action ait une date de début de validité.
-
Bah, le problème c'est que mon code pour construire un bâtiment c'est juste une requête sql qui vérifie si le mec a assez de sous et si oui ben il exécute.
-
Et donc tu veux que le joueur puisse planifier son action pour un jour ultérieur c ca ?
-
Voilà, mettons qu'une usine mette 5 minutes à se construire, je veux qu'il puisse donner l'ordre de construction, fermer son navigateur, revenir 4mn30 après et qu'il soit marqué temps restant: 00h00mn30s et qu'il exécute l'action quand le timer est arrivé à 0
-
c'est different alors.
dans la base tu enregistres ton action et sa date de début.
Quand l'utilisateur revient, tu as juste a comparer l'heure actuelle avec date de début + temps necessaire.
-
Oui mais le problème c'est qu'avec cette méthode, si l'utilisateur ne reviens pas, son bâtiment ne sera jamais construit.
Ça pose problème car par exemple dans le jeu, si un joueur met des soldats à entraîner, mettons qu'ils vont mettre 10mn à s'entrainer. Il quitte son navigateur et reviens 15 minutes après.
Seulement un autre joueur l'attaque 12minutes après son départ, sa ville sera amputée des armées qui devraient être terminées mais qui ne le seront que lorsqu'il sera revenu 3mn plus tard ...
-
Tout dépend comment ton jeu est articulé.
L'attaque de l'adversaire peut provoquer le calcul de l'état de l'attaquant.
-
Donc le principe c'est que c'est les actions des joueurs qui recalculent leur constructions, attaque ou quoi que ce soit d'autre...
C'est vrai que j'avais pas envisagé cette hypothèse.
Par contre je vois pas la tête de la fonction qui permettrais de recalculer l'état de l'attaqué. La date du début du timer serait enregistrée dans une base de donnée alors ? Cette base ne servirais qu'à cela ?
-
Pas base de donnée pardon, je voulais dire table.
J'ai un peu de mal avec les dates, il faudrait que j'utilise les timestamp ?
-
hello,
je pense aussi qu'il faut utiliser la technique de l'utilisateur - nettoyeur :
vu que finalement on se moque bien de savoir en général si un joueur possède ou non un objet, à moins qu'on veuille précisément le savoir (combat / voir sa ville), et dans ce cas là, le joueur qui fait l'action active la fonction "auto-wash" de vérification et si nécessaire construction.
une table "action" : (remplie par la demande de construction)
qui contiendrait :
id_joueur
id_objet
debut_construction
temps_construction
fin_construction (= debut_construction + temps_construction)
statut (0 / 1)
et de rechercher les "actions" dont "etat" = 0 (en attente) ET "fin_construction" <= à l'instant présent
pour les résultats :
créer l'objet (ou incrémenter le nombre)
passer le statut à 1 (ou effacer la ligne)
Par contre, il faut faire attention à la chose suivant :
que se passe-t-il si deux joueurs attaquent par exemple la même ville à la micro seconde près ?
en espérant avoir été utile,
Pat