Page 1 sur 1

Quelle approche serait la plus adaptée ?

Posté : sam. 02 nov. 2024, 18:44
par Selphira
Bonjour à tous,

Je travaille actuellement sur le développement d'ItemDispatcher et je cherche une solution pour gérer dynamiquement des répartitions avancées en fonction de plusieurs critères (chapitre, difficulté, heure de la journée). J'ai quelques idées et hypothèses en tête, mais je voudrais confirmer certains points et obtenir vos suggestions pour optimiser ce système.

Voici ce que je comprends actuellement (corrigez-moi si je me trompe !) :

- Le drapeau indiquant qu'un objet ne peut être droppé peut être défini soit sur l’objet lui-même (non-droppable dans tous les cas), soit sur l’objet de la créature (non-droppable uniquement pour cette créature). Toutefois, il semble impossible de définir ce drapeau via un script (actions CreateItem() ou GiveItemCreate()).
- Le drapeau pour un objet non-volable ne s’applique qu'à l’objet de la créature, et là aussi, il semble impossible de le configurer par script.
- On peut vérifier le chapitre en cours via un script (Ex Global("Chapter","GLOBAL",4)) ou par un effet opcode (318/326) avec les valeurs 136 (chapitre >= x) et 137 (chapitre < x).
- L’heure de la journée est vérifiable par script (TimeGT() et TimeLT()) ou via un opcode (318/326) avec les valeurs 89 (jour) et 90 (nuit).
- La difficulté en cours est vérifiable par script, mais pas via opcode.

Idéalement, j’aimerais implémenter le comportement suivant :
Tant que les conditions définies sont remplies, l'objet reste sur la créature. Si une des conditions n’est plus respectée, l'objet disparaît, mais il pourrait réapparaître si toutes les conditions sont de nouveau remplies. Le statut de volabilité, de droppabilité et d'équipement de l'objet devraient aussi être pris en compte.
Par exemple, pour un objet équipé, il pourrait être remplacé en fonction de l’heure (par exemple, une épée puissante la nuit et une épée rouillée le jour).
- Est-il possible de réaliser ce comportement ?
- Quelle approche serait la plus adaptée ?

J’ai envisagé plusieurs solutions, mais chacune a des inconvénients. Peut-être qu’une combinaison pourrait offrir une solution optimale, en fonction des options de répartition de l'objet. Voici les pistes que j’ai identifiées :
- Script déclenché une seule fois sur une créature invisible
- Script vérifié en continu sur la créature
- Effet appliqué sur la créature
- Effet appliqué directement sur l'objet
- Sortilège spécifique

Pour la difficulté, je pense qu'il est acceptable de simplement supprimer l'objet à l’entrée de la carte, car changer de difficulté en cours de partie est rare. (il serait possible de "tricher" en changeant la difficulté à des moments clés, mais cela ne regarde que le joueur)
Toutefois, pour les autres conditions, une vérification en temps réel semble plus complexe. Je pourrais leur appliquer cette solution dans un premier temps et ajuster le code si des options plus fines sont possibles.

Questions complémentaires :
- Est-il possible de lancer une action immédiatement au moment de la mort d’une créature, sans latence, pour retirer un objet et empêcher qu'il n'apparaisse dans le loot ?
- Existe-t-il une méthode pour vérifier si un conteneur a déjà été ouvert ?

Merci d’avance pour votre aide et vos conseils ! Toute suggestion pour améliorer la mise en place de ce système est la bienvenue.

Re: Quelle approche serait la plus adaptée ?

Posté : sam. 02 nov. 2024, 20:15
par rivvers
Miam :)

D'expérience, la synergie script continu / sort sur la créature est très flexible.
L'un peut activer l'autre, l'autre peut activer l'un (enfin presque).
Tout en cumulant les possibilités des actions et des opcodes à la fois.

Potentiellement gourmand en ressources, il faudra peaufiner avec le temps.
Les autres idées pourront aider à optimiser certains cas par la suite.


Connais-tu l'action SetItemFlags ?

Re: Quelle approche serait la plus adaptée ?

Posté : dim. 03 nov. 2024, 04:30
par deratiseur
Selphira a écrit : sam. 02 nov. 2024, 18:44 - Le drapeau indiquant qu'un objet ne peut être droppé peut être défini soit sur l’objet lui-même (non-droppable dans tous les cas), soit sur l’objet de la créature (non-droppable uniquement pour cette créature). Toutefois, il semble impossible de définir ce drapeau via un script (actions CreateItem() ou GiveItemCreate()).
Pour le moddind sur Kurosaï j'avais un soucis d'objets donné qui n'était pas identifié (flag), et JohnBob m'a trouvé une solution à incruster dans le dialogue. Peut être que la même solution marcherait par script ?