JeuWeb - Crée ton jeu par navigateur
Mise a jour par heure - 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 : Mise a jour par heure (/showthread.php?tid=4604)

Pages : 1 2


Mise a jour par heure - atra27 - 21-02-2010

Voila donc je travaille sur un projet de jeu en php (non sans blague...)

Et enfaite c'est surtout au niveau de la conception que je me poste 2/3 questions...

Admettons que l'on aie 24 points d'actions par jour (pour 24h) Le joueur peut programmer jusqu'à 12 actions a la suite.

Pour faire du real-time, il vaut mieux actualiser quand on en as besoin... Mais la admettons, le joueur traine sur le site, a chaque page il y a ré actualisation inutile (sauf 1 fois par heure)

Maintenant avec un cron faire un script qui actualise tous les comptes toutes les heures peut provoquer un lag...

Partant de ce principe, niveau gameplay, est-ce plus intéressant un jeu a la ogame ou on lance les actions qui durent un certain temps (force a être connecté pas longtemps, mais souvent)

Le jeu en question est censé être une simulation de vie (pas a la sims mais dans le même style Smile )

Tous les avis/suggestions tant pour le gameplay que pour la gestion technique de ce gameplay est la bienvenue!


RE: Mise a jour par heure - Sephi-Chan - 21-02-2010

(21-02-2010, 12:59 PM)atra27 a écrit : Maintenant avec un cron faire un script qui actualise tous les comptes toutes les heures peut provoquer un lag...

UPDATE players SET actions_count = actions_count + 1;
Tu n'auras pas de lag.


Sephi-Chan


RE: Mise a jour par heure - atra27 - 21-02-2010

Le probléme n'est pas tellement ça mais il faut effectuer réelement toutes les actions...

Sa peut aller du combat aux impots en passant par un déplacement classique ou une modif des statistiques...

En gros c'est assez vaste et effectuer cette mise a jour sur tous les comptes simultanément peut causer un lag non?

J'avais pensé stoker sur la table user la date de la derniére mise a jour...
A partir de la on effectue les actions qui se sont déroulées depuis cette mise a jour...

Mais finalement pourquoi ne pas partir sur un vrai real-time a la ogame alors?


RE: Mise a jour par heure - My Hotel - 21-02-2010

Mais OGame n'a peut-être pas un vrai real-time.
Quand tu lances la construction d'un bâtiment, il enregistre le début de la construction. Ensuite, à chaque fois que tu affiche le temps restant, ils font juste un ptit calcul à partir de l'heure actuelle, du début de la construction et du temps nécessaire à construire, pour t'afficher le temps restant. Et si temps_restant == 0, alors le bâtiment est terminé.

Il y a de très nombreux sujets qui parlent de ça dans le forum. Pas la peine de tuer des serveurs à faire du temps réel, tant que tu donne l'impression que ça en est.
Et aussi, faut arrêter avec la mentalité "moins je fais de requêtes, mieux je me portes". T'as une base de donnée, autant s'en servir, surtout que une fois connecté, chaque requête prends 20 fois moins que la connexion. Donc y'a optimiser, et abuser. Est-ce que tu enlèves tous les retours à la ligne de ton code sous prétexte qu'il sera exécuté plus vite? (exemple de merde, j'aovue) Smile
Bye


RE: Mise a jour par heure - DragonMaster - 21-02-2010

(21-02-2010, 04:28 PM)My Hotel a écrit : Et aussi, faut arrêter avec la mentalité "moins je fais de requêtes, mieux je me portes". T'as une base de donnée, autant s'en servir, surtout que une fois connecté, chaque requête prends 20 fois moins que la connexion.

Le seul problème c'est que pour beaucoup se payer un bon hébergeur est peu ou pas envisageable et pour la plupart des petits comptes pas cher ou gratuit le nombre de requête est très limité.


RE: Mise a jour par heure - atra27 - 21-02-2010

Limité a la quantité de donnée, mais aussi (et surtout) au nombre de requêtes...

Mais ici c'est pas vraiment le probléme...

J'avait pensé:
dans la table user:
position
actionid
actiondebut
actionfin
positionfin

les champs position/positionfin renvoie a une table contenant les position intéressantes avec les coordonnées (x,y,z)... (coordonnée utilisée uniquement pour le calcul de la distance et donc du temps en fonction de la vitesse
Actionid correspond a l'id de l'action:
0:rien
1:en déplacement
2->infini: autres occupations (défini dans une autre table)
actiondebut: date et heure a laquelle l'action a commencé!
actionfin: date et heure a laquelle l'action prend fin!

En comparant les variables actiondebut et actionfin ainsi qu'une valeur dans la table des occupations, on calcule la rémunération etc...

Des suggestions par rapport a ce modéle? des problemes qui peuvent survenir plus tard dans le devellopement? Des idées... Jsuis prenneur :heuuu:


RE: Mise a jour par heure - Argorate - 21-02-2010

Pourquoi n'utilise tu pas un simple timestamp (que tu stock et met a jour en BDD) allié a un time() et une soustraction quand le joueur se conecte?
Ainsi tu ne mets a jours que les joueurs qui se connectent ET quand ils se connectent (ça t'épargne des lags de mise a jour automatique de tous les joueurs).
Au pire la connexion prendra 2seconde au lieu de 0.0001 parceque tu mets a jour le joueur, mais personne s'en rendra compte...


RE: Mise a jour par heure - Joojo - 21-02-2010

(21-02-2010, 09:02 PM)Argorate a écrit : Pourquoi n'utilise tu pas un simple timestamp (que tu stock et met a jour en BDD) allié a un time() et une soustraction quand le joueur se conecte?
Ainsi tu ne mets a jours que les joueurs qui se connectent ET quand ils se connectent (ça t'épargne des lags de mise a jour automatique de tous les joueurs).
Au pire la connexion prendra 2seconde au lieu de 0.0001 parceque tu mets a jour le joueur, mais personne s'en rendra compte...

C'est ce que je faisais avec avec un fichier chmod qui contenait le timestamp, parait que ça consomme moins qu'une requête.


RE: Mise a jour par heure - atra27 - 21-02-2010

heu justement c'était la le but de cette disposition...

A partir de la on peut faire une mise a jour quand il se connecte...
Le script charge l'heure on c'est censé être termine->compare avec l'heure courante->affichage java du temps restant ou traitement de la requête...

Je voulais juste un avis sur cet disposition de la base...


RE: Mise a jour par heure - Argorate - 22-02-2010

Je pense que c'est un bon systeme, oui, tu fais les requetes que quand tu en a reelement besoin.

Cependant, faut faire attention. Si ton jeu propose des interactions avec d'autres joueurs, et que par exemple un joueur 1 attaque un joueur 2, et que le j2 ne s'est pas encore connecté aujourd'hui, il faudra faire sa mise a jour avant de lancer l'attaque, sinon ça pourait malhonaitement influensé le combat.

Tu vois?