24-09-2009, 05:03 AM
(23-09-2009, 06:42 PM)Argorate a écrit : Je me demande s’il ne faudrait pas faire un tuto une bonne fois pour toute avec ça, c'est toujours la même chose...^^
Déjà, ne parle pas de temps réel quand c'est un jeu par tour avec 1 tour = 1H.
Ensuite pour des raisons de performances évidentes, le cron n'est pas la bonne solution puisqu'il ira rafrech tout le monde y compris des inactifs.
Il reste donc la solution que d'autres ont déjà évoqué et qui me semble judicieuse:
Tu actualises que ce qui a besoin d'être actualiser. Pourquoi actualiser un joueur qui ne vient pas jouer (peu importe la raison)? Ça te fait des requêtes pour rien.
Donc lorsqu'un joueur se connecte ou fait F5 sur ta page jeu, tu vérifies le temps qui est passé depuis le dernier "tour" et tu regarde si ça fait X heure(s).
En conséquence de quoi, tu fais t'es calcule et ce X fois.
Pour calculer ce fameux X (nb d'heure écoulé [allant de 0 à l'infinie en théorie]), rien de plus simple: tu stock en bdd un timestamp et tu le compares au timestamp actuel lorsque le gars appel la page de jeu, ensuite c'est juste une soustraction avec des convertissions des unités (puisque timestamp est en seconde)...
Sachant qu'il y a 60 secondes par minute
60 minutes par heure
Et 3 600 secondes par heure, tu as tes diviseurs pour convertir
Bonne chance.
Je parlais uniquement d'une "impression" de temps réel, étant donné que le jeu en son entier implique des interactions permanente (la paye toutes les heures c'est qu'un point précis du jeu). Evidemment c'est toujours "par tour" mais l'impression de temps réel doit être là donc voilà.
Ensuite, je peux pas vraiment faire de requête toutes les heures (idée de zeppelin/Anthor) étant donné les fameuses "interactions" qui font que pratiquement à chaque action du joueur le calcul est chamboulé pour X raison.
Je vais donc opter pour un système de "vagues" (j'appelle ça comme ça); dans mysql je met le time() de la prochaine vague, chaque vague est calculée en fonction de la production de pièces d'or par heure (produc & pertes) et dés que l'user rafraichi sa page le header de la page (un script php qui fait toutes les actions avant l'affichage) calcul combien de fois la vague aurait dû passer (et met le bon nombre de pièces d'or en +/- à l'user) puis remet en place un nouveau système de vague si jamais le time() actuel est plus grand que le time() dans la BDD & qu'aucune modif impliquant les pièces d'or n'a été effectué.
Voilà, je pense que ça fonctionnera, merci beaucoup
(si quelqu'un a une meilleur idée qu'il n'hésite pas)
Voilà voilà
GloryWorld v0.0.1a13 (~7mois - Pause de 4mois au milieu)
Je fais une agence ... http://www.agencevolt.fr
Sinon ? Je blog parfois ... http://www.boringday.fr
Je fais une agence ... http://www.agencevolt.fr
Sinon ? Je blog parfois ... http://www.boringday.fr