Les timers (minuteurs) et leur utilisation

    Les timers fournissent un mécanisme pour déclencher une ou plusieurs règles après un certain temps. Les timers ont une portée limitée au JGO. Chaque JGO possède 10 timers.

Exemple 1 :
Voici une manière de traiter une demande de tribut en utilisant les timers. Après 10 minutes de jeu, le JGO demande un tribut et attend 5 minutes pour l'obtenir.

; Après 10 minutes de jeu, demander un tribut sous 5 minutes
(defrule
(game-time greater-than 600) ; 10 minutes = 600 secondes
=>
(chat-to-player 1 "Donne moi 500 unités d'or dans les 5 prochaine minutes.") ; Adresser le message au joueur concerné
(clear-tribute-memory 1 gold) ; Remettre à zéro la compteur de tribut d'or versé par le joueur 1
(enable-timer 1 300) ; Activer le timer N° 1 dans 5 minutes = 300 secondes
(disable-self) ; Désactiver cette règle
)
; Si le tribut n'a pas été reçu à temps, considérer le joueur 1 comme un ennemi.
(defrule
(timer-triggered 1) ; si le timer N° 1 est déclenché (c'est-à-dire si les 5 minutes sont écoulées)
=>
(disable-timer 1) ; Désactiver le timer N° 1
(chat-to-player 1 "Le temps est écoulé. Tu es désormais mon ennemi.") ; Informer le joueur 1 de la nouvelle stratégie diplomatique à son égard
(set-stance 1 enemy) ; Considérer le joueur 1 comme un ennemi
)
; Si le tribut est versé à temps
(defrule
(players-tribute-memory 1 gold greater-or-equal 500) ; Vérifier que le joueur 1 a versé son tribut
=>
(disable-timer 1) ; Désactiver le timer N° 1
(clear-tribute-memory 1 gold) ; Remettre à zéro la compteur de tribut d'or versé par le joueur 1
(chat-to-player 1 "Merci bien mon brave") ; Remercier le joueur 1
)

Exemple 2
Voici un exemple encore meilleur qui utilise 2 timers. Toutes les 15 minutes durant la partie, le JGO demande un tibut et attend 5 minutes pour l'obtenir.

; Planifier la première fois le timer à 15 minutes
(defrule
(true)
=>
(enable-timer 2 900) ; Activer le timer 2 après 15 minutes = 900 secondes
(disable-self) ; Désactiver cette règle
)
; Toutes les 15 minutes demander un tribut et laisser 5 minutes au joueur cible pour apporter le tribut
(defrule
(timer-triggered 2) ; Si le timer 2 est actif alors
=>
(disable-timer 2) ; Désactiver le timer 2
(enable-timer 2 900) ; Réactiver le timer 2 dans 15 minutes
(chat-to-player 1 "Donne moi 500 unités d'or dans 5 minutes.") ; Informer le joueur 1 qu'il doit verser un tribut dans les 5 prochaines minutes
(clear-tribute-memory 1 gold) ; Remettre à zéro le compteur de tribut d'or du joueur 1
(enable-timer 1 300) ; Activer le timer 1 dans 5 minutes = 300 secondes
)
; Si le tribut n'a pas été versé par le joueur 1 dans les temps, changer la politique diplomatique envers ce joueur.
; Il est inutile alors de redemander au joueur de verser un tribut
(defrule
(timer-triggered 1) ; si le timer 1 est actif alors cela signifie que les 5 minutes sont écoulées
=>
(disable-timer 1) ; désactiver le timer 1
(disable-timer 2) ; désactiver le timer 2 (inutile de redemander un tribut)
(chat-to-player 1 "Le temps est écoulé, nous sommes ennemis maintenant.") ; Avertir le joueur 1 du changement de diplomatie à son égard
(set-stance 1 enemy) ; Déclarer que le joueur 1 est un ennemi
)
; Si le tribut a été versé dans les temps
(defrule
(players-tribute-memory 1 gold greater-or-equal 500) ; Vérifier que le tribut correspond bien à la somme demandée
=>
(disable-timer 1) ; désactiver le timer 1
(clear-tribute-memory 1 gold) ; Remettre à zéro le compteur de tribut d'or du joueur 1
(chat-to-player 1 "C'est très bien d'obéir à mes ordres.") ; Remercier le joueur 1
)