Salut à tous !
J'ai un souci dans la logique de mon code,
j'ai pas mal de données qui possèdent un timer à mettre à jour (ils ont tous un time_left en seconde dans leur table)
- ressources : mettre à jour les ressources de chaque utilisateurs
- cartes actives : des cartes qui applique des bonus à tout et n'importe qui mais qui ont une durée de vie
- constructions : des batiments et unitées en cours de construction
- fleets : les attaques en cours
J'imagine qu'il faut mettre à jour tout ça a chaque actualisation du site (donc appeler la fonction "update" depuis index.php)
car par exemple : si une flotte attaquante est arrivée à destination,
- il faut savoir si les flottes du défenseur ont étés construites, pour défendre
- combien il a de ressources à ce moment là, pour le pillage
- si ses bonus de défense sont encore actifs...
autre exemple : un joueur veut lancer une attaque, le choix de ses cibles dépend du score de chacun (et vous vous doutez bien que le calcul du score dépends d'un peu tout ça)
Première option :
- j'enregistre la date de la dernière action sur le site,
- à la prochaine action je calcule la différence entre les deux dates
- je déduis le temps en secondes à chaque entrée (constructions, attaques en cours, durée des bonus...)
- je met à jour les ressources et les scores
- je met à jour la date de la dernier action sur le site
C'est jouable ! Mais si j'ai 1000 joueurs, qui font 3 actions par minutes,
ça fait 3000 calcul de score, 3000 calcul de ressources
3000 * mises à jour des files d'attentes et attaques en cours...
ça fait juste au minimum 10000 mises à jours de la base de données par minutes... c'est ... heu comment dire...
Deuxième options :
J'actualises les infos propres au joueur uniquement quand il est concerné (en cas d'attaque ou quand il se balade sur le site)
En plus ça m'évite de créer une table qui stocke juste l'heure...
Mais bon imaginons : il a un bonus de production qui s'arrète à 11h... et il se connecte à 13h
Comment je calcule ses ressources entre 9h et 13h ?
Enfin voila, comment on gère ça habituellement ?
Partager