26-12-2012, 07:56 PM
(Modification du message : 26-12-2012, 08:24 PM par Sephi-Chan.)
On part du principe qu'à chaque fois qu'un joueur effectue une action qui va prendre du temps (effectuer une recherche, construire un bâtiment, entraîner une unité, etc.), on enregistre un événement dans la base de données (dans une table
On donne à cette table une colonne
Ensuite, il te faut des colonnes pour stocker l'auteur de l'action (l'identifiant du joueur, disons
Exemple d'une requête qui planifie la construction du bâtiment 1 par le joueur 1 dans 2 heures.
Ensuite, enregistrer les événements est un bon début mais il faut aussi effectuer des choses quand le décompte est atteint. Pour ça, tu peux avoir une fonction qui se charge de rechercher toutes les tâches dont la date de fin est passée, puis d'effectuer des actions et de les supprimer de la table. Tu peux appeler cette fonction à chaque chargement de page ou mieux : via une tâche CRON.
La requête pour sélectionner les événements terminés :
Ensuite, à toi de faire quelque chose avec les lignes retournées, puis les supprimer (pour ne pas effectuer la même action une deuxième fois).
Pour compter le nombre de constructions de bâtiments planifiées :
À toi de griser ou non les boutons pour construire de nouveaux bâtiments selon le nombre de bâtiments déjà en construction.
Voilà, n'hésite pas à demander si tu as toujours besoin d'aide.
scheduled_events
, par exemple.On donne à cette table une colonne
finish_date
de type DATETIME
(qui permet de stocker une date et une heure au format 2000-12-31 23:59:59
, TIMESTAMP
fait la même chose avec un autre format).Ensuite, il te faut des colonnes pour stocker l'auteur de l'action (l'identifiant du joueur, disons
player_id
), l'information des choses à faire : l'identifiant du type d'unité à créer unit_id
(avec une valeur NULL si ce n'est pas une création d'unité), l'identifiant de la recherche à effectuer research_id
(à NULL si ce n'est pas une recherche), l'identifiant du bâtiment à construire building_id
(à NULL si ce n'est pas une construction de bâtiment).Exemple d'une requête qui planifie la construction du bâtiment 1 par le joueur 1 dans 2 heures.
INSERT INTO scheduled_events (finish_at, player_id, building_id) VALUES (DATE_ADD(NOW(), INTERVAL 2 HOUR), 1, 1);
Ensuite, enregistrer les événements est un bon début mais il faut aussi effectuer des choses quand le décompte est atteint. Pour ça, tu peux avoir une fonction qui se charge de rechercher toutes les tâches dont la date de fin est passée, puis d'effectuer des actions et de les supprimer de la table. Tu peux appeler cette fonction à chaque chargement de page ou mieux : via une tâche CRON.
La requête pour sélectionner les événements terminés :
SELECT * FROM scheduled_events WHERE finish_at < NOW();
Ensuite, à toi de faire quelque chose avec les lignes retournées, puis les supprimer (pour ne pas effectuer la même action une deuxième fois).
Pour compter le nombre de constructions de bâtiments planifiées :
SELECT COUNT(*) FROM scheduled_events WHERE building_id IS NOT NULL AND NOW() < finish_at;
À toi de griser ou non les boutons pour construire de nouveaux bâtiments selon le nombre de bâtiments déjà en construction.
Voilà, n'hésite pas à demander si tu as toujours besoin d'aide.