Imbrication de OR dans les triggers de script
Posté : sam. 14 déc. 2024, 08:52
Bonjour
Toujours dans le contexte du développement d'ItemDispatcher, je génère des conditions qui déterminent si un objet sera distribué sur une créature ou dans un magasin.
Par exemple, voici une condition générée qui indique que l'objet sera disponible durant les chapitre 2, 4, 6, uniquement la nuit, si le joueur joue en très facile ou difficile.
Je voudrais alors générer la condition inverse, afin de supprimer l'objet s'il a été rendu disponible, mais que l'une des conditions n'est plus valide.
C'est ici que je bloque, car là où il est assez simple d'écrire des conditions inversées grâce aux parenthèses, il n'existe, à ma connaissance, aucun mécanisme pour les scripts du jeu.
Si je traite chaque "groupe" de condition indépendamment, c'est très facile, la difficulté survient lorsque je dois combiner ces inversions.
Devient
Devient
devient
Dans la condition de base, on indique que TOUS les groupes de condition doivent être valides pour que l'action s'exécute.
Avec la condition inversée, on veut que si UN SEUL des groupes est valide, l'action s'exécute.
Je voudrais donc trouver la solution pour écrire l'équivalent de ceci
J'ai bien une solution, un peu plus complexe à mettre en oeuvre et qui va générer un nombre énorme de triggers à vérifier, mais j'aimerais l'éviter si possible.
Elle consiste à vérifier pour toutes les autres valeurs disponibles lorsqu'on a un OR(x) dans la condition de base.
Cette solution est optimisable évidemment, en utilisant GlobalGT("Chapter","GLOBAL",6) par exemple. Mais elle reste plus complexe à mettre en oeuvre de manière générique
Toujours dans le contexte du développement d'ItemDispatcher, je génère des conditions qui déterminent si un objet sera distribué sur une créature ou dans un magasin.
Par exemple, voici une condition générée qui indique que l'objet sera disponible durant les chapitre 2, 4, 6, uniquement la nuit, si le joueur joue en très facile ou difficile.
Code : Tout sélectionner
OR(3)
Global("Chapter","GLOBAL",2)
Global("Chapter","GLOBAL",4)
Global("Chapter","GLOBAL",6)
TimeOfDay(NIGHT)
OR(2)
Difficulty(EASIEST)
Difficulty(HARD)
C'est ici que je bloque, car là où il est assez simple d'écrire des conditions inversées grâce aux parenthèses, il n'existe, à ma connaissance, aucun mécanisme pour les scripts du jeu.
Si je traite chaque "groupe" de condition indépendamment, c'est très facile, la difficulté survient lorsque je dois combiner ces inversions.
Code : Tout sélectionner
OR(3)
Global("Chapter","GLOBAL",2)
Global("Chapter","GLOBAL",4)
Global("Chapter","GLOBAL",6)
Code : Tout sélectionner
!Global("Chapter","GLOBAL",2)
!Global("Chapter","GLOBAL",4)
!Global("Chapter","GLOBAL",6)
Code : Tout sélectionner
TimeOfDay(NIGHT)
Code : Tout sélectionner
!TimeOfDay(NIGHT)
Code : Tout sélectionner
OR(2)
Difficulty(EASIEST)
Difficulty(HARD)
Code : Tout sélectionner
!Difficulty(EASIEST)
!Difficulty(HARD)
Avec la condition inversée, on veut que si UN SEUL des groupes est valide, l'action s'exécute.
Je voudrais donc trouver la solution pour écrire l'équivalent de ceci
Code : Tout sélectionner
IF (
(
!Global("Chapter","GLOBAL",2)
AND !Global("Chapter","GLOBAL",4)
AND !Global("Chapter","GLOBAL",6)
)
OR !TimeOfDay(NIGHT)
OR (
!Difficulty(EASIEST)
AND !Difficulty(HARD)
)
)
Elle consiste à vérifier pour toutes les autres valeurs disponibles lorsqu'on a un OR(x) dans la condition de base.
Code : Tout sélectionner
OR(23)
Global("Chapter","GLOBAL",1)
Global("Chapter","GLOBAL",3)
Global("Chapter","GLOBAL",5)
Global("Chapter","GLOBAL",7)
Global("Chapter","GLOBAL",8)
Global("Chapter","GLOBAL",9)
Global("Chapter","GLOBAL",10)
Global("Chapter","GLOBAL",11)
Global("Chapter","GLOBAL",12)
Global("Chapter","GLOBAL",13)
Global("Chapter","GLOBAL",14)
Global("Chapter","GLOBAL",15)
Global("Chapter","GLOBAL",16)
Global("Chapter","GLOBAL",17)
Global("Chapter","GLOBAL",18)
Global("Chapter","GLOBAL",19)
Global("Chapter","GLOBAL",20)
Global("Chapter","GLOBAL",21)
Global("Chapter","GLOBAL",22)
!TimeOfDay(NIGHT)
Difficulty(EASY)
Difficulty(NORMAL)
Difficulty(HARDEST)