Logo de Pokémon Script Project Evolved

[PSPE 0.10] Événement répétable dans le temps


Logo de l'utilisateurDamien Linux

Damien Linux

Demande de : Flxflx669
Résolu par : DrBisounours

Problème :
Bonjour, j'ai essayé de trouver une solution pour créer un événement que l'on pourra faire par exemple toutes les 24h minimum mais je n'ai pas
trouvé.
J'ai regardé le fonctionnement des baies pour essayer d'avoir une idée (même s'il va être refait que en script) mais toujours pas, alors y'a t'il une solution simple pour faire ça?

Résolution :
Pas de commande en event, il faut passer en script : ce sera quelque chose comme $game_variables[X] = Time.now où X est égal au numéro de variable dans laquelle stocker le moment du
déclenchement de l'évent (il faudra donc une variable différente pour chaque évènement pour lequel tu veux contrôler qu'il ne soit activable que toutes les 24h).
Ensuite, le check conditionnel sera dans l'évènement également. Lorsque dans un évènement tu fais "Ajouter une condition" tu as la possibilité d'ajouter une condition en ligne de script (dernier onglet de la
fenêtre). La condition est alors $game_variables[X] <= (Time.now - 86400)

On reprend le temps actuel auquel on soustrait 86400 secondes (soit un jour entier) et on compare à la date enregistrée pour
voir si 24h se sont écoulées.

NB : Le check conditionnel en event parallèle c'est un peu bourrin car ça veut dire qu'à chaque instant la condition est vérifiée. Ca peut amener des lags. Je pense qu'exécuter la condition seulement au moment où on tente de réaliser l'event est suffisant.


Publié le : 08/09/2021 - 06:45

Modifié le : 29/11/2022 - 06:30


Historique :


Logo de l'utilisateurFlxflx669

Flxflx669

Bonjour, j'ai essayé de trouver une solution pour créer un événement que l'on pourra faire par exemple toutes les 24h minimum mais je n'ai pas trouvé.
J'ai regardé le fonctionnement des baies pour essayer d'avoir une idée (même s'il va être refait que en script) mais toujours pas, alors y'a t'il une solution simple pour faire ça?
Merciemoji


Publié le : 28/05/2021 - 22:37

Modifié le : 29/11/2022 - 06:30

Logo de l'utilisateurDrBisounours

DrBisounours - Modérateur

Bonjour,

Je crois que tu ne peux pas faire autrement qu'utiliser un script car parmi les commandes d'événements, aucune ne permet de se référencer à du temps réel.

Pour faire cela j'utiliserais une méthode du style : check conditionnel datetime >= 1.day.ago avec datetime stocké dans une variable au moment du déclenchement de l'évent et qui vaudrait datetime = Time.now


Publié le : 29/05/2021 - 08:22

Modifié le : 29/11/2022 - 06:30

Logo de l'utilisateurFlxflx669

Flxflx669

Merci pour ta réponse !
Le datetime = Time.now doit être fait en script dans l'évent ? Le check conditionnel se fait aussi en script pour le 1.day.ago ?


Publié le : 29/05/2021 - 14:22

Modifié le : 29/11/2022 - 06:30

Logo de l'utilisateurDrBisounours

DrBisounours - Modérateur

datetime = Time.now sera en effet fait en script dans l'évent. Pour être précis, ce sera quelque chose comme $game_variables[X] = Time.now où X est égal au numéro de variable dans laquelle stocker le moment du déclenchement de l'évent (il faudra donc une variable différente pour chaque évènement pour lequel tu veux contrôler qu'il ne soit activable que toutes les 24h).

Ensuite, le check conditionnel sera dans l'évènement également. Lorsque dans un évènement tu fais "Ajouter une condition" tu as la possibilité d'ajouter une condition en ligne de script (dernier onglet de la fenêtre). La condition est alors $game_variables[X] >= 1.day.ago


Publié le : 29/05/2021 - 17:46

Modifié le : 29/11/2022 - 06:30

Logo de l'utilisateurFlxflx669

Flxflx669

Ah d'accord ! J'avais juste fait $game_variables[datetime] = Time.now pour ça que rien ne marchait xD
J'ai mis le check conditionnel en process parallèle du coup, mais j'ai une erreur :

Comment je peux définir ça ? (j'y connais rien en ruby x) )


Publié le : 30/05/2021 - 10:02

Modifié le : 29/11/2022 - 06:30

Logo de l'utilisateurDrBisounours

DrBisounours - Modérateur

J'avoue que c'est pas mon langage de prédilection à moi non plus. J'avais trouvé cette méthode "1.day.ago" sur un forum ruby on rail mais faut croire que ça n'existe pas en ruby.

Du coup, va falloir contourner le problème en trouvant un autre moyen de compter 24h en ruby. Tu peux essayer quelque chose du genre $game_variables[X] >= (Time.now - 86400)

On reprend le temps actuel auquel on soustrait 86400 secondes (soit un jour entier) et on compare à la date enregistrée pour voir si 24h se sont écoulées.

NB : Le check conditionnel en event parallèle c'est un peu bourrin car ça veut dire qu'à chaque instant la condition est vérifiée. Ca peut amener des lags. Je pense qu'exécuter la condition seulement au moment où on tente de réaliser l'event est suffisant.


Publié le : 01/06/2021 - 18:59

Modifié le : 29/11/2022 - 06:30

Logo de l'utilisateurFlxflx669

Flxflx669

T'es le boss !
Effectivement ça marche très bien, j'ai juste dû mettre <= au lieu de >= mais tout fonctionne bien ! (bon j'ai testé que jusqu'a 50 secondes mais logiquement 24h marchera aussi).
Et oui c'est vrai testé la condition seulement où l'on réalise l'event est sûrement mieux, en tous cas merci à toiemoji


Publié le : 02/06/2021 - 15:21

Modifié le : 29/11/2022 - 06:30

Logo de l'utilisateurDrBisounours

DrBisounours - Modérateur

Super ! Ravis d'entendre que ça fonctionneemoji


Publié le : 02/06/2021 - 19:53

Modifié le : 29/11/2022 - 06:30