[WIP] ItemDispatcher
- DrAzTiK
- Araignée éclipsante
- Messages : 1240
- Enregistré le : ven. 19 sept. 2003, 03:20
- Localisation : Bordeaux
- Contact :
- Statut : Hors ligne
.
Question bête mais du coup, qu'est ce que ce mod aurait de mieux et de différent comparé à item randomizer ? ( qui n'est pas fiable à 100 je pense car pas mis à jour mais relativement ok)
Faut pas oublier aussi certains objets de quête : par exemple l'épée de sarevok mais on peut aussi penser à Lilarcorn. Compte tu les randomizer ? Item randomizer le fait pour certaines (pas toutes) mais je crois que ça necessite parfois de changer le dialogue de certains npc.
Faut pas oublier aussi certains objets de quête : par exemple l'épée de sarevok mais on peut aussi penser à Lilarcorn. Compte tu les randomizer ? Item randomizer le fait pour certaines (pas toutes) mais je crois que ça necessite parfois de changer le dialogue de certains npc.
-
- Adepte de Grondemarteau
- Berserker ogre
- Messages : 1035
- Enregistré le : dim. 25 juil. 2004, 21:28
- Contact :
- Statut : En ligne
.
Tout d'abord, ItemDispatcher (ID) ne fera rien tout seul (du moins dans un premier temps), son but premier est de permettre aux autres moddeurs de pouvoir distribuer leurs objets un peu partout dans le jeu, que ce soit à des emplacements vanilla, ou des emplacements ajoutés par d'autres mods. La notion d'aléatoire est arrivée un peu plus tard (mais rapidement), car elle sonnait comme une évidence.
Contrairement à ItemRandomiser (IR), ID n'est pas fermé, n'importe quel auteur pourra venir greffer ses ajouts s'il le désire. Que ce soit ajouter des objets à distribuer, de nouveaux emplacements, de nouvelles liste ou compléter celles existantes.
Aussi, grâce aux règles de distribution, les moddeurs pourront définir de manière assez fine où seront distribués leurs objets.
ID ne fera rien tout seul, du moins dans un premier temps, il sera tout à fait possible de créer des composants qui ajouteraient des listes de distribution pour supporter l'un ou l'autre mod, ou même devenir une alternative à ItemRandomizer (IR), mais ce serait dans un second temps.
Pour la problématique des objets de quête, j'ai prévu un groupe contenant une liste d'objets à ignorer que le mod ne devra absolument pas déplacer/ajouter/supprimer, justement pour le cas de ces objets de quêtes. Un autre groupe contenant une liste d'objets uniques, afin que le mod n'en rajoute pas plusieurs exemplaires si plusieurs règles de distribution le concerne.
Encore une fois, ces listes pourront être complétées par chacun des mods qui auraient aussi de tels objets, et ce, sans devoir nécessiter mon intervention, ils n'auront qu'à ajouter quelques fichiers dans l'arborescence de leur propre mod.
Je suis bien consciente qu'ID ne sera pas adopté par beaucoup de moddeurs (je le fais avant tout pour moi, par défi et par plaisir), mais ses perspectives d'évolution me semblent vraiment intéressantes. Et j'ajouterai moi-même quelques listes pour des mods que j'apprécie.
Contrairement à ItemRandomiser (IR), ID n'est pas fermé, n'importe quel auteur pourra venir greffer ses ajouts s'il le désire. Que ce soit ajouter des objets à distribuer, de nouveaux emplacements, de nouvelles liste ou compléter celles existantes.
Aussi, grâce aux règles de distribution, les moddeurs pourront définir de manière assez fine où seront distribués leurs objets.
ID ne fera rien tout seul, du moins dans un premier temps, il sera tout à fait possible de créer des composants qui ajouteraient des listes de distribution pour supporter l'un ou l'autre mod, ou même devenir une alternative à ItemRandomizer (IR), mais ce serait dans un second temps.
Pour la problématique des objets de quête, j'ai prévu un groupe contenant une liste d'objets à ignorer que le mod ne devra absolument pas déplacer/ajouter/supprimer, justement pour le cas de ces objets de quêtes. Un autre groupe contenant une liste d'objets uniques, afin que le mod n'en rajoute pas plusieurs exemplaires si plusieurs règles de distribution le concerne.
Encore une fois, ces listes pourront être complétées par chacun des mods qui auraient aussi de tels objets, et ce, sans devoir nécessiter mon intervention, ils n'auront qu'à ajouter quelques fichiers dans l'arborescence de leur propre mod.
Je suis bien consciente qu'ID ne sera pas adopté par beaucoup de moddeurs (je le fais avant tout pour moi, par défi et par plaisir), mais ses perspectives d'évolution me semblent vraiment intéressantes. Et j'ajouterai moi-même quelques listes pour des mods que j'apprécie.
Modifié en dernier par Selphira le dim. 10 nov. 2024, 12:02, modifié 1 fois.
.
@DrAzTiK Si c'est toujours d'actualité (Selphira me corrigera sinon) son intérêt serait aussi d'être installé vers la fin de l'installation, donc après SCS.qu'est ce que ce mod aurait de mieux et de différent comparé à item randomizer ?
Techniquement, Selphira maîtriserait le random en gardant quand même en "tête" les capacités martiales que la créature a de base.
Si c'est le cas, fini les nouvelles installations à chaque "run".
-
- Adepte de Grondemarteau
- Berserker ogre
- Messages : 1035
- Enregistré le : dim. 25 juil. 2004, 21:28
- Contact :
- Statut : En ligne
.
Oui, si la cible est une créature et que l'objet doit être équipé et que c'est une arme ou un bouclier, il va prendre en compte les compétences martiales de la créature pour s'assurer qu'elle peut les utiliser à leur plein potentiel.loupgris a écrit : ↑dim. 10 nov. 2024, 09:25@DrAzTiK Si c'est toujours d'actualité (Selphira me corrigera sinon) son intérêt serait aussi d'être installé vers la fin de l'installation, donc après SCS.qu'est ce que ce mod aurait de mieux et de différent comparé à item randomizer ?
Techniquement, Selphira maîtriserait le random en gardant quand même en "tête" les capacités martiales que la créature a de base.
Si c'est le cas, fini les nouvelles installations à chaque "run".
Je pense ajouter une option globale au mod pour indiquer le nombre d'étoiles minimales qu'une créature doit avoir afin que l'objet soit équipé, à l'appréciation du joueur donc. Elle serait de 1 par défaut, mais si le joueur veut que les créatures utilisent vraiment à leur plein potentiel, il pourrait renseigner un chiffre plus élevé qui irait jusque 5. Mais de fait, plus le chiffre sera élevé, moins de chance il y aura que la créature reçoive une arme en tant qu'équipement si on est sur une distribution aléatoire. Par contre, en distribution directe, ce sera très utile pour éviter les problèmes.
Attention, si une créature n'a aucune compétence martiale, l'objet sera équipé, SAUF, si la créature fait partie de la liste des créatures qui ne peuvent pas avoir d'arme équipée.
Aussi, j'ai déjà ajouté une protection pour ne pas remplacer les éventuelles objets spéciaux des créatures. Si l'objet qu'elle porte est non droppable, ou qu'elle n'a pas de description, il sera impossible de le remplacer. Ceci car généralement ce genre d'objet est destiné à donner des capacités spéciales à la créature. Cette liste automatique fonctionnera de concert avec la liste des objets à ignorer.
-
- Adepte de Grondemarteau
- Berserker ogre
- Messages : 1035
- Enregistré le : dim. 25 juil. 2004, 21:28
- Contact :
- Statut : En ligne
.
Quelques avancées aujourd'hui sur la sélection aléatoire. Désormais l'objet à distribuer peut être sélectionné de la même manière que la cible, en utilisant les combinaisons.
D'autres améliorations diverses qui étendent les possibilités de filtre et qui préparent l'arrivée de la distribution à proprement parlé.
Avec cette nouvelle sélection d'objet, une nouvelle idée est apparue.
Lorsque l'on sélectionne l'objet aléatoirement ET qu'on indique une quantité plus grande que 1, ID va non pas ajouter xx fois le même objet aux cibles, mais va sélectionner xx objets différents qu'il distribuera aléatoirement aux cibles sélectionnées. Si les cibles sont moins nombreuses que les objets, tant pis pour les objets non distribué.
Prenons cet exemple :
Pour ID, cela veut dire : Sélectionne 4 armures de cuir différentes ayant un enchantement +1 et distribue les aléatoirement sur 10 gnomes mâles qui peuvent porter des armures de cuir (condition ajoutée automatique par le mod lorsqu'on veut équiper un objet).
Le script va s'assurer que chacune des 4 armures soit distribuée au moins une fois. Ici on aura 4 armures distribuées 2 fois, et 2 autres seulement 1 fois.
Personnellement j'adore ce genre de chose, mais est-ce que je ne commence pas à aller un peu trop loin ? Cela vous parait-il toujours simple à comprendre et à utiliser ?
D'autres améliorations diverses qui étendent les possibilités de filtre et qui préparent l'arrivée de la distribution à proprement parlé.
Avec cette nouvelle sélection d'objet, une nouvelle idée est apparue.
Lorsque l'on sélectionne l'objet aléatoirement ET qu'on indique une quantité plus grande que 1, ID va non pas ajouter xx fois le même objet aux cibles, mais va sélectionner xx objets différents qu'il distribuera aléatoirement aux cibles sélectionnées. Si les cibles sont moins nombreuses que les objets, tant pis pour les objets non distribué.
Prenons cet exemple :
Code : Tout sélectionner
4 leather.arm&1.ilv 10 gnome.rce&male.gnd
Le script va s'assurer que chacune des 4 armures soit distribuée au moins une fois. Ici on aura 4 armures distribuées 2 fois, et 2 autres seulement 1 fois.
Personnellement j'adore ce genre de chose, mais est-ce que je ne commence pas à aller un peu trop loin ? Cela vous parait-il toujours simple à comprendre et à utiliser ?
-
- Araignée géante
- Messages : 416
- Enregistré le : sam. 21 janv. 2012, 14:36
- Statut : Hors ligne
.
L'implicite est un frein je pense. Avoir une logique de distribution différente en fonction du nombre est risqué.
Un moddeur qui fait évoluer son mod et bouge la quantité d'un objet de 1 à 2, s'attendra à avoir 2 objets au lieu de 1 et c'est tout.
Je conseillerais plutôt d'avoir une colonne quantité qui gère la quantité et de gérer la méthode de distribution dans une autre colonne, si aucune colonne ne correspond, mieux vaut rajouter une colonne.
Ajouter des choix, des filtres, de la flexibilité c'est toujours bien et permet d'avoir plus de fonctionnalités et d'augmenter le champ du possible.
Remplacer un fonctionnement par un autre, je dirais que le mieux est l'ennemi du bien.
Bravo pour tes avancées en tout cas
Un moddeur qui fait évoluer son mod et bouge la quantité d'un objet de 1 à 2, s'attendra à avoir 2 objets au lieu de 1 et c'est tout.
Je conseillerais plutôt d'avoir une colonne quantité qui gère la quantité et de gérer la méthode de distribution dans une autre colonne, si aucune colonne ne correspond, mieux vaut rajouter une colonne.
Ajouter des choix, des filtres, de la flexibilité c'est toujours bien et permet d'avoir plus de fonctionnalités et d'augmenter le champ du possible.
Remplacer un fonctionnement par un autre, je dirais que le mieux est l'ennemi du bien.
Bravo pour tes avancées en tout cas
-
- Adepte de Grondemarteau
- Berserker ogre
- Messages : 1035
- Enregistré le : dim. 25 juil. 2004, 21:28
- Contact :
- Statut : En ligne
.
Oui tu as raison, il est préférable d'avoir une autre colonne que d'adapter le comportement selon la valeur renseignée.
Merci !
J'ai pu faire la correspondance entre les types d'objet et les emplacements, finalement c'était assez simple.
Je recherche désormais comment déterminer qu'une créature peut ou non équiper tel type d'objet.
De base, je vais faire en sort que certains types de créatures ne puissent équiper certains types d'objet dès qu'une composante aléatoire entrera en jeu (Ex: les animaux, les dragons, etc), je ne veux par exemple pas empêcher un moddeur d'équiper une armure à un chien s'il le désire et qu'il l'indique explicitement.
Pour les armes, c'est facile, on regarde clasweap.2da et on couple avec weapprof.2da et on vérifie la présence d'opcode 233 sur la créature pour affiner si on veut donner l'objet qu'à des créatures compétentes.
Pour les armures, on peut limiter le port d'armure à certaines classes, mais je ne sais pas comment cela se traduit en jeu.
Pour les autres types d'objets je ne sais pas non plus comment faire. Quelqu'un pourrait m'indiquer comment faire ou aurait un lien vers un tutoriel ?
Merci !
J'ai pu faire la correspondance entre les types d'objet et les emplacements, finalement c'était assez simple.
Je recherche désormais comment déterminer qu'une créature peut ou non équiper tel type d'objet.
De base, je vais faire en sort que certains types de créatures ne puissent équiper certains types d'objet dès qu'une composante aléatoire entrera en jeu (Ex: les animaux, les dragons, etc), je ne veux par exemple pas empêcher un moddeur d'équiper une armure à un chien s'il le désire et qu'il l'indique explicitement.
Pour les armes, c'est facile, on regarde clasweap.2da et on couple avec weapprof.2da et on vérifie la présence d'opcode 233 sur la créature pour affiner si on veut donner l'objet qu'à des créatures compétentes.
Pour les armures, on peut limiter le port d'armure à certaines classes, mais je ne sais pas comment cela se traduit en jeu.
Pour les autres types d'objets je ne sais pas non plus comment faire. Quelqu'un pourrait m'indiquer comment faire ou aurait un lien vers un tutoriel ?
-
- Araignée géante
- Messages : 416
- Enregistré le : sam. 21 janv. 2012, 14:36
- Statut : Hors ligne
.
Je ne comprends pas bien la demande.
Techniquement, on peut s'équiper d'une arme même si on n'a pas le droit de s'y spécialiser. Rien n'empêche un moddeur de spécialiser une créature voleur à la lance et de créer une lance utilisable par les voleurs. Tout ça, en contradiction avec le CLASWEAP et le WEAPPROF.
Il y a au mieux des "normes" et des "conventions". Les restrictions se font item par item en fonction de chaque personnage.
Peux-tu donner des exemples de ce que tu cherches à faire ?
Techniquement, on peut s'équiper d'une arme même si on n'a pas le droit de s'y spécialiser. Rien n'empêche un moddeur de spécialiser une créature voleur à la lance et de créer une lance utilisable par les voleurs. Tout ça, en contradiction avec le CLASWEAP et le WEAPPROF.
Il y a au mieux des "normes" et des "conventions". Les restrictions se font item par item en fonction de chaque personnage.
Peux-tu donner des exemples de ce que tu cherches à faire ?
-
- Adepte de Grondemarteau
- Berserker ogre
- Messages : 1035
- Enregistré le : dim. 25 juil. 2004, 21:28
- Contact :
- Statut : En ligne
.
Merci @rivvers , je réponds un peu tard mais j'ai finalement simplifié le problème.
Lorsqu'une créature est sélectionnée aléatoirement pour un objet qui doit être équipé, je filtre pour ne garder que les créatures humanoïdes dont l'emplacement de l'objet n'est pas déjà équipé par un objet non lootable. Et dans le cas d'une arme et d'un bouclier, je vérifie en plus que la créature possède la compétence martiale appropriée pour la manier correctement (1 étoile ou plus)
Ca avance toujours bien, j'ai rajouté toute une série de meta-groupes non prévus à la base qui vont permettre d'encore affiner les sélections, gestion des créatures d'une zone précise et les magasins sont désormais pris en charge pour la sélection des cibles. Il y a bien évidemment d'autres changements, mais ce sont les plus notables.
Je vais entamer le filtrage des magasins d'une zone précise, et ensuite je vais m'attaquer à la distribution des objets à proprement parler.
Les cas simples seront très faciles à faire, ADD_CRE_ITEM ou REPLACE_CRE_ITEM pour les créatures , ADD_STORE_ITEM ou ADD_STORE_ITEM_EX pour les magasins et ADD_AREA_ITEM pour les conteneurs.
J'ai pu réfléchir aux cas complexes, c'est à dire ceux où il faut prendre en compte la zone, le chapitre et la difficulté et je sais comment je vais m'y prendre.
Le plus complexe sera pour les magasins, car je vais devoir créer 2 algorithmes, un premier pour générer les différentes versions du magasin, un second pour modifier et ajouter des choix de dialogues conditionnés qui ouvriront la version appropriée du magasin, c'est ce second algorithme qui va me poser le plus de difficulté, car je vais devoir modifier les fichier .dlg directement en binaire, car l'analyse syntaxique est trop compliquée avec Weidu.
Pour les créatures, ça se fera via un script sur la créature tout simplement.
Lorsqu'une créature est sélectionnée aléatoirement pour un objet qui doit être équipé, je filtre pour ne garder que les créatures humanoïdes dont l'emplacement de l'objet n'est pas déjà équipé par un objet non lootable. Et dans le cas d'une arme et d'un bouclier, je vérifie en plus que la créature possède la compétence martiale appropriée pour la manier correctement (1 étoile ou plus)
Ca avance toujours bien, j'ai rajouté toute une série de meta-groupes non prévus à la base qui vont permettre d'encore affiner les sélections, gestion des créatures d'une zone précise et les magasins sont désormais pris en charge pour la sélection des cibles. Il y a bien évidemment d'autres changements, mais ce sont les plus notables.
Je vais entamer le filtrage des magasins d'une zone précise, et ensuite je vais m'attaquer à la distribution des objets à proprement parler.
Les cas simples seront très faciles à faire, ADD_CRE_ITEM ou REPLACE_CRE_ITEM pour les créatures , ADD_STORE_ITEM ou ADD_STORE_ITEM_EX pour les magasins et ADD_AREA_ITEM pour les conteneurs.
J'ai pu réfléchir aux cas complexes, c'est à dire ceux où il faut prendre en compte la zone, le chapitre et la difficulté et je sais comment je vais m'y prendre.
Le plus complexe sera pour les magasins, car je vais devoir créer 2 algorithmes, un premier pour générer les différentes versions du magasin, un second pour modifier et ajouter des choix de dialogues conditionnés qui ouvriront la version appropriée du magasin, c'est ce second algorithme qui va me poser le plus de difficulté, car je vais devoir modifier les fichier .dlg directement en binaire, car l'analyse syntaxique est trop compliquée avec Weidu.
Pour les créatures, ça se fera via un script sur la créature tout simplement.
-
- Statut : Hors ligne
.
Selphira a écrit : ↑jeu. 28 nov. 2024, 07:14 Le plus complexe sera pour les magasins, car je vais devoir créer 2 algorithmes, un premier pour générer les différentes versions du magasin, un second pour modifier et ajouter des choix de dialogues conditionnés qui ouvriront la version appropriée du magasin, c'est ce second algorithme qui va me poser le plus de difficulté, car je vais devoir modifier les fichier .dlg directement en binaire, car l'analyse syntaxique est trop compliquée avec Weidu.
Coucou, question bête : Si tu utilises plusieurs versions du même magasin, comment faire en sorte qu'ils soient cohérent entre eux si le joueur a déjà acheté certaines denrées dans l'une des versions.
Ou bien comptes-tu utiliser AddStoreItem("STO","ITEM",1,1) via des baf et garder le même fichier STO ?
Modifié en dernier par JohnBob le jeu. 28 nov. 2024, 14:26, modifié 1 fois.
.
Par pitié essaye de ne pas trop toucher aux sorts en vente (ça pourrait être problématique).
-
- Adepte de Grondemarteau
- Berserker ogre
- Messages : 1035
- Enregistré le : dim. 25 juil. 2004, 21:28
- Contact :
- Statut : En ligne
.
Pas de question bête, et pas d'informations inutiles. Si je comprends bien ce que tu dis, le stock dépend du fichier .sto, et si je les multiplie, cela crée autant de stocks différents chez le PNJ. Je n'avais pas cette information en tête, et cela change la donne. Alors là oui, les ajouts complexes se feront grâce à un script qui utilisera AddStoreItem(), merci à toiJohnBob a écrit : ↑jeu. 28 nov. 2024, 14:25 Coucou, question bête : Si tu utilises plusieurs versions du même magasin, comment faire en sorte qu'ils soient cohérent entre eux si le joueur a déjà acheté certaines denrées dans l'une des versions.
Ou bien comptes-tu utiliser AddStoreItem("STO","ITEM",1,1) via des baf et garder le même fichier STO ?

Le mod ne va pas s'en prendre aux sorts vendus, tout va dépendre des listes créées par les moddeurs.
-
- Statut : Hors ligne
.
Oui, chaque STO devrait avoir son propre stock indépendant des autres, donc si on a acheté plusieurs objets dans le magasin avant d’accéder à ta copie , ces objets seront de nouveaux présents dans ta copie.
Une autre solution pourrait être de créer un stock parallèle avec uniquement les objets ajoutés et une nouvelle option de dialogue comme pour le magasin de Ribald. Du coup le joueur aurait toujours accès au magasin original sans changement mais pourrait aussi accéder à l'autre magasin avec les nouveaux objets. Cela resterait assez proche de ton idée initial mais nécessite d'ajouter au moins une ligne de dialogue ("Puis-je voir vos nouvelles marchandises" ou quelque chose de plus sophistiqué) pour tous les marchands.
AddStoreItem me parait plus simple à mettre en place.
-
- Adepte de Grondemarteau
- Berserker ogre
- Messages : 1035
- Enregistré le : dim. 25 juil. 2004, 21:28
- Contact :
- Statut : En ligne
.
Hello,
Je reviens aux nouvelles. Le mod n'est pas oublié, loin de là.
J'ai encore avancé et ajouté quelques trucs non prévus par-ci par-là. Actuellement, il y existe 2027 meta-groupes et 101 groupes créés manuellement qui permettent de filtrer les objets et les cibles désirées.
Il y a par exemple les meta-groupes des parchemins qui permettent d'apprendre un sort. On peut les filtrer pour ne sélectionner que les parchemins d'une école précise, et/ou d'un niveau de sort.
Il est aussi possible de donner un objet différent à chaque cible, dans ce mode de fonctionnement, le nombre d'objet est déterminé selon le nombre de cibles. S'il y a plus de cibles que d'objets, certains objets seront alors distribués à plusieurs cibles, de manière équitable pour minimiser le nombre de cibles qui recevront le même objet. Par exemple
- 100 cibles pour seulement 40 objets, alors 20 objets seront distribués à 3 cibles différentes, et les 20 autres à 2 cibles différentes.
- 100 cibles pour seulement 80 objets, alors 60 objets seront distribués à 1 cible unique, et les 20 autres à 2 cibles différentes.
Voici un exemple d'utilisation regroupant les 2 nouveautés citées
J'ai aussi très bien avancé sur la partie génération de script. Ces scripts seront rattachés au script "override" des créatures, en prenant bien soin d'en créer chaque fois un par créature. Script basé sur l'éventuel script déjà rattaché à la créature. Je ne modifie pas le script de base, car beaucoup de créatures se partagent le même script.
Voici 2 exemples de scripts générés automatiquement lors d'un ajout conditionné d'objet dans l'inventaire d'une créature.
Un premier pour un cas simple où un seul objet et distribué (la condition est absurde, mais nécessaire pour mes tests)
Un second pour un cas où plusieurs objets sont distribués. J'ai utilisé la technique proposée par @JohnBob et @Luren en créant un petit bloc servant uniquement à modifier une variable qui sera réutilisée dans d'autres blocs.
Je n'ai plus ce blocage mental qui m'empêchait d'avancer, j'ai trouvé les compromis qui me conviennent. Il reste encore pas mal de choses à faire, et je ne vais pas vous donner de date de sortie. Ca pourrait très bien être dans 1 semaine ou dans 3 mois, cela dépend du temps libre que j'arriverai à dégager.
Je reviens aux nouvelles. Le mod n'est pas oublié, loin de là.
J'ai encore avancé et ajouté quelques trucs non prévus par-ci par-là. Actuellement, il y existe 2027 meta-groupes et 101 groupes créés manuellement qui permettent de filtrer les objets et les cibles désirées.
Il y a par exemple les meta-groupes des parchemins qui permettent d'apprendre un sort. On peut les filtrer pour ne sélectionner que les parchemins d'une école précise, et/ou d'un niveau de sort.
Il est aussi possible de donner un objet différent à chaque cible, dans ce mode de fonctionnement, le nombre d'objet est déterminé selon le nombre de cibles. S'il y a plus de cibles que d'objets, certains objets seront alors distribués à plusieurs cibles, de manière équitable pour minimiser le nombre de cibles qui recevront le même objet. Par exemple
- 100 cibles pour seulement 40 objets, alors 20 objets seront distribués à 3 cibles différentes, et les 20 autres à 2 cibles différentes.
- 100 cibles pour seulement 80 objets, alors 60 objets seront distribués à 1 cible unique, et les 20 autres à 2 cibles différentes.
Voici un exemple d'utilisation regroupant les 2 nouveautés citées
Code : Tout sélectionner
# 1 1 alteration.scl&2.scl 5 mage.cls - - - - 0 1 1 100
Voici 2 exemples de scripts générés automatiquement lors d'un ajout conditionné d'objet dans l'inventaire d'une créature.
Un premier pour un cas simple où un seul objet et distribué (la condition est absurde, mais nécessaire pour mes tests)
Code : Tout sélectionner
IF
Global("IDD_1","LOCALS",0)
OR(3)
Global("Chapter","GLOBAL",2)
Global("Chapter","GLOBAL",4)
Global("Chapter","GLOBAL",6)
TimeOfDay(NIGHT)
OR(2)
Difficulty(EASIEST)
Difficulty(HARD)
THEN
RESPONSE #100
SetGlobal("IDD_1","LOCALS",1)
GiveItemCreate("scrl8z",Myself,1,1,0)
ActionOverride(Myself,SetItemFlags("scrl8z",1,TRUE))
Continue()
END
IF
Global("IDD_1","LOCALS",1)
OR(8)
Global("Chapter","GLOBAL",1)
Global("Chapter","GLOBAL",3)
Global("Chapter","GLOBAL",5)
GlobalGT("Chapter","GLOBAL",6)
!TimeOfDay(NIGHT)
Difficulty(EASY)
Difficulty(NORMAL)
Difficulty(HARDEST)
THEN
RESPONSE #100
SetGlobal("IDD_1","LOCALS",0)
DestroyItem("scrl8z")
Continue()
END
Un second pour un cas où plusieurs objets sont distribués. J'ai utilisé la technique proposée par @JohnBob et @Luren en créant un petit bloc servant uniquement à modifier une variable qui sera réutilisée dans d'autres blocs.
Code : Tout sélectionner
IF
Global("IDD_1","LOCALS",0)
GlobalGT("Chapter","GLOBAL",4)
TimeOfDay(NIGHT)
THEN
RESPONSE #50
SetGlobal("IDR_0","LOCALS",1)
SetGlobal("IDD_1","LOCALS",1)
GiveItemCreate("sw1h03",Myself,1,0,0)
ActionOverride(Myself,SetItemFlags("sw1h03",3,TRUE))
Continue()
RESPONSE #50
SetGlobal("IDR_1","LOCALS",1)
SetGlobal("IDD_1","LOCALS",1)
GiveItemCreate("sw1h06",Myself,1,0,0)
ActionOverride(Myself,SetItemFlags("sw1h06",3,TRUE))
Continue()
END
IF
Global("IDD_1","LOCALS",1)
OR(2)
!GlobalGT("Chapter","GLOBAL",4)
!TimeOfDay(NIGHT)
THEN
RESPONSE #100
SetGlobal("IDD_1","LOCALS",2)
END
IF
Global("IDR_0","LOCALS",1)
Global("IDD_1","LOCALS",2)
THEN
RESPONSE #100
SetGlobal("IDR_0","LOCALS",0)
SetGlobal("IDD_1","LOCALS",0)
DestroyItem("sw1h03")
Continue()
END
IF
Global("IDR_1","LOCALS",1)
Global("IDD_1","LOCALS",2)
THEN
RESPONSE #100
SetGlobal("IDR_1","LOCALS",0)
SetGlobal("IDD_1","LOCALS",0)
DestroyItem("sw1h06")
Continue()
END
- Erzsébet Butler
- Adepte de Grondemarteau
- Ours des cavernes
- Messages : 1196
- Enregistré le : lun. 03 déc. 2007, 22:04
- Localisation : En itinerance
- Statut : Hors ligne
.
Super merci de nous tenir au courant ! Si un jour tu as besoin de tests n'hésite pas à demander. Bon courage pour la suite.
De retour sur la scène modding, tds et activiste crip
Autrice des Exilés de lunargent
Autrice des Exilés de lunargent
-
- Adepte de Grondemarteau
- Berserker ogre
- Messages : 1035
- Enregistré le : dim. 25 juil. 2004, 21:28
- Contact :
- Statut : En ligne
.
Bonjour,
Et voilà, j'ai terminé une première version publique, vous pouvez la récupérer ici : https://github.com/Selphira/ItemDispatc ... g/0.8-beta
Attention, c'est encore en beta et destiné aux tests. Je ne conseille pas encore de l'utiliser dans une partie réelle, j'aimerais que d'autres personnes le testent avant, et en plus, des messages de debug vont s'afficher, ce qui cassera votre immersion.
Plusieurs choses restent à faire avant de passer à une version 1.0
Les points obligatoires
Si vous désirez tester, il vous suffit de créer un fichier [votre-mod]/dispatching/items.2da et de le remplir (exemple ci-dessous).
Vous pouvez également créer des groupes, toujours dans votre dossier dispatching (vous avez quelques exemples dans celui du mod).
J'ai fait un effort sur la documentation qui devrait vous permettre de configurer les distributions que vous désirez, tout est dans le README : https://github.com/Selphira/ItemDispatcher
N'hésitez pas à faire des retours si des points ne sont pas clairs, s'il y a des manques ou si je peux améliorer des choses.
ATTENTION : Je rappelle que pour le moment, ce mod ne fait rien de lui-même. Il a besoin d'au moins une liste items.2da.
Et voilà, j'ai terminé une première version publique, vous pouvez la récupérer ici : https://github.com/Selphira/ItemDispatc ... g/0.8-beta
Attention, c'est encore en beta et destiné aux tests. Je ne conseille pas encore de l'utiliser dans une partie réelle, j'aimerais que d'autres personnes le testent avant, et en plus, des messages de debug vont s'afficher, ce qui cassera votre immersion.
Plusieurs choses restent à faire avant de passer à une version 1.0
Les points obligatoires
- Corriger les bugs remontés.
- Gérer les conteneurs.
- Gérer les sources des objets, afin de pouvoir faire de véritables "déplacements" d'objets, et non pas que des ajouts.
- Permettre d'ignorer les distributions de certains mods.
- Remplir la liste des objets vanilla qu'il ne faudra absolument pas créer/remplacer/déplacer.
- Optimiser la préparation de la distribution, en particulier la sélection des cibles (j'ai quelques pistes).
Par exemple, le cas ci-dessous met plus de 1 minutes 40 à préparer la ligne !Code : Tout sélectionner
# 1 1 leather.arm * gnome.rce&male.gnd&!npcs.grp - - - - 1 ? ? 90
- Créer quelques composants qui permettront de distribuer des objets
- Si plusieurs objets doivent être placés dans l'inventaire avec la même condition, pouvoir en ajouter plusieurs et pas qu'un seul comme c'est le cas actuellement.
- Pouvoir configurer le nombre d'objets maximum qui seront ajoutés dans l'inventaire d'une créature, magasin ou conteneur.
- Gérer une liste d'objet unique qu'on ne pourra pas distribuer plus d'une fois
- Ajouter de nouvelles conditions ? (réputation, niveau d'expérience)
Si vous désirez tester, il vous suffit de créer un fichier [votre-mod]/dispatching/items.2da et de le remplir (exemple ci-dessous).
Vous pouvez également créer des groupes, toujours dans votre dossier dispatching (vous avez quelques exemples dans celui du mod).
J'ai fait un effort sur la documentation qui devrait vous permettre de configurer les distributions que vous désirez, tout est dans le README : https://github.com/Selphira/ItemDispatcher
N'hésitez pas à faire des retours si des points ne sont pas clairs, s'il y a des manques ou si je peux améliorer des choses.
Code : Tout sélectionner
ItemQuantity ItemPerTarget MaxStackPerItem Item TargetQuantity Target Source Chapter TimeOfDay Difficulty Equipable Stealable Droppable Chance
1 1 1 sw1h65.itm 1 bernard.sto - - - - 0 1 1 100
1 1 1 shld31.itm 2 ?.sto - - - - 0 1 1 75
2 1 1 shld32.itm 1 bernard.sto - - 0 - 0 1 1 100
Modifié en dernier par Selphira le sam. 08 mars 2025, 11:03, modifié 1 fois.
-
- Araignée géante
- Messages : 416
- Enregistré le : sam. 21 janv. 2012, 14:36
- Statut : Hors ligne
.
Plop, déjà bravo pour la mise en bouche !
Voici quelques trucs vus
À quoi sert l'ActionOverride ici ?
Si c'est de l'aléatoire que tu veux, mieux vaut utiliser RandomNum
viewtopic.php?t=34368
Je suis allé voir ta méthode pour déterminer le slot des objets vu qu'on en avait parlé ici, tout ne se résume pas à la catégorie de l'objet. Certaines potions ne sont pas équipables par exemple. Alors que les clés sont des objets équipables.
Dis moi si tu souhaites en savoir plus ou si ça suffit comme tel.
Voici quelques trucs vus
Code : Tout sélectionner
# slot_condition_negative_response_base.baf
ActionOverride(Myself,SetItemFlags("%base_item%",%base_flags%,TRUE))
Code : Tout sélectionner
# sto_condition_response.baf
RESPONSE #%response_weight%
viewtopic.php?t=34368
Je suis allé voir ta méthode pour déterminer le slot des objets vu qu'on en avait parlé ici, tout ne se résume pas à la catégorie de l'objet. Certaines potions ne sont pas équipables par exemple. Alors que les clés sont des objets équipables.
Dis moi si tu souhaites en savoir plus ou si ça suffit comme tel.
-
- Adepte de Grondemarteau
- Berserker ogre
- Messages : 1035
- Enregistré le : dim. 25 juil. 2004, 21:28
- Contact :
- Statut : En ligne
.
Merci, en effet l'ActionOverride est inutile ici, reliquat d'un test pour une autre action.
Pour l'aléatoire, j'ai préféré me baser sur le WEIGHT pour 2 raisons :
- Plus simple à gérer au moment du choix (mais ce n'est plus vraiment le cas maintenant, bloc ou réponse, c'est assez simple à changer)
- Question d'optimisation pour que le jeu ait moins de blocs de scripts à traiter.
Pour les slots, j'aimerais bien en savoir plus oui.
Par contre, j'ai déjà eu du mal à les gérer, pourquoi le jeu ne s'est pas contenté de se baser sur le fichier .ids et utiliser les mêmes valeurs partout >_< ? J'ai 5 tableaux de données rien que pour ça, et ce n'est pas encore parfait. Dans ma TODO, j'ai aussi en ligne de mire le fait de pouvoir mieux gérer les anneaux, munitions, armes et objets rapides, afin de ne pas être limité au premier slot de ce type.
J'aimerais simplifier leur gestion par la suite, mais pas dans l'immédiat.
Et je viens de me rendre compte que j'ai oublié d'ajouter les sorts qui permettent de supprimer l'objet d'un slot particulier...
Pour l'aléatoire, j'ai préféré me baser sur le WEIGHT pour 2 raisons :
- Plus simple à gérer au moment du choix (mais ce n'est plus vraiment le cas maintenant, bloc ou réponse, c'est assez simple à changer)
- Question d'optimisation pour que le jeu ait moins de blocs de scripts à traiter.
Pour les slots, j'aimerais bien en savoir plus oui.
Par contre, j'ai déjà eu du mal à les gérer, pourquoi le jeu ne s'est pas contenté de se baser sur le fichier .ids et utiliser les mêmes valeurs partout >_< ? J'ai 5 tableaux de données rien que pour ça, et ce n'est pas encore parfait. Dans ma TODO, j'ai aussi en ligne de mire le fait de pouvoir mieux gérer les anneaux, munitions, armes et objets rapides, afin de ne pas être limité au premier slot de ce type.
J'aimerais simplifier leur gestion par la suite, mais pas dans l'immédiat.
Et je viens de me rendre compte que j'ai oublié d'ajouter les sorts qui permettent de supprimer l'objet d'un slot particulier...
-
- Araignée géante
- Messages : 416
- Enregistré le : sam. 21 janv. 2012, 14:36
- Statut : Hors ligne
.
Oui l'inventaire est… compliqué.
Plutôt suspectes les informations dans cette table d'ailleurs :
Le mode "auto" que tu proposes est super et réaliste mais parfois on veut mettre une paire de bottes à l'emplacement du casque ou l'inverse pour des "raisons de moddeur".
Aussi, je serais tenté d'ajouter la possibilité de pouvoir "forcer" un emplacement.
Tout bêtement, comment comptes-tu gérer la possibilité d'équiper une arme dans la main gauche d'un personnage ? A gérer automatiquement, ça me paraît être l'enfer.
Je vais préparer un sujet pour les emplacements. On sait jamais ça pourrait intéresser d'autres moddeurs, j'essayerai d'être exhaustif, tu prendras ce qui te paraîtra utile/possible.
J'ai vu item_category_to_item_slot_limit, alors je me suis dis que c'était implanté.
Plutôt suspectes les informations dans cette table d'ailleurs :
Code : Tout sélectionner
5 => 16 // quiver
14 => 18 // quiver
31 => 15 // quiver
Aussi, je serais tenté d'ajouter la possibilité de pouvoir "forcer" un emplacement.
Tout bêtement, comment comptes-tu gérer la possibilité d'équiper une arme dans la main gauche d'un personnage ? A gérer automatiquement, ça me paraît être l'enfer.
Je vais préparer un sujet pour les emplacements. On sait jamais ça pourrait intéresser d'autres moddeurs, j'essayerai d'être exhaustif, tu prendras ce qui te paraîtra utile/possible.
-
- Adepte de Grondemarteau
- Berserker ogre
- Messages : 1035
- Enregistré le : dim. 25 juil. 2004, 21:28
- Contact :
- Statut : En ligne
.
Oui c'est compliqué, les données de slot ne sont pas utilisées aux mêmes endroits, je dois uniformiser ça... pour plus de simplicité dans la logique du code.
Et cela implique d'autres difficultés que je ne rencontre pas pour le moment, comme le fait de choisir un slot différent (Ex: left_ring ou right_ring pour chaque cible de l'objet sélectionné, selon ce que la cible a déjà d'équipé...)
Mais ce sera un petit chantier dédié, rien d'insurmontable.
Je pourrais assez simplement implémenter le fait de choisir un slot particulier, dans la colonne "Equipable" au lieu d'avoir les valeurs "-, ?, 0 ou 1", avoir des valeurs plus complexes
- "#" : Equipable avec choix automatique du slot
- "-" : Non équipable
- Un chiffre : Equipable dans ce slot en particulier
- "1|2|4" ; Equipable dans l'un des slots listés, le premier libre dans l'ordre indiqué est utilisé.
Les chiffres utilisés seraient ceux du fichier .ids.
Modifié en dernier par Selphira le sam. 08 mars 2025, 18:38, modifié 1 fois.
-
- Araignée géante
- Messages : 416
- Enregistré le : sam. 21 janv. 2012, 14:36
- Statut : Hors ligne
.
Ha merci d'avoir édité la dernière ligne, c'est top 
"#|1|2|4" serait super flexible.
Je préfère préciser que toutes mes idées ne sont que des propositions, qui peuvent être implémentées ou pas en fonction de ce qui te paraît le mieux pour toi et pour le mod.
Le billet sur les emplacements est en cours de rédaction.

"#|1|2|4" serait super flexible.
Je préfère préciser que toutes mes idées ne sont que des propositions, qui peuvent être implémentées ou pas en fonction de ce qui te paraît le mieux pour toi et pour le mod.
Le billet sur les emplacements est en cours de rédaction.
-
- Adepte de Grondemarteau
- Berserker ogre
- Messages : 1035
- Enregistré le : dim. 25 juil. 2004, 21:28
- Contact :
- Statut : En ligne
.
Oui, je me suis rendue compte de la bourde trop tard

Je sais bien que ce sont des propositions, et elles me semblent pertinentes. Par contre, si au final cela s'avérait trop compliqué à implémenter, je resterai sur la version automatique qui conviendra pour la majorité des cas.
J'ai envoyé une première salve de correctifs
Code : Tout sélectionner
- Ajout des sortilèges de suppression d'un objet d'un emplacement particulier.
- Correction des drapeaux qui doivent être modifiés après avoir équipé l'objet pour faire effet.
- Correction de la condition pour réinitialiser l'objet lorsque la créature a précédemment reçu un objet aléatoire. (Le bloc de réinitialisation était exécuté lorsqu'il ne fallait pas)
- Correction du texte de debug pour l'ajout d'un objet conditionné dans un magasin.
-
- Adepte de Grondemarteau
- Berserker ogre
- Messages : 1035
- Enregistré le : dim. 25 juil. 2004, 21:28
- Contact :
- Statut : En ligne
.
@rivvers J'ai une question bien spécifique pour toi.Selphira a écrit : ↑sam. 08 mars 2025, 20:42Oui, je me suis rendue compte de la bourde trop tard
Je sais bien que ce sont des propositions, et elles me semblent pertinentes. Par contre, si au final cela s'avérait trop compliqué à implémenter, je resterai sur la version automatique qui conviendra pour la majorité des cas.
J'ai envoyé une première salve de correctifsCode : Tout sélectionner
- Ajout des sortilèges de suppression d'un objet d'un emplacement particulier. - Correction des drapeaux qui doivent être modifiés après avoir équipé l'objet pour faire effet. - Correction de la condition pour réinitialiser l'objet lorsque la créature a précédemment reçu un objet aléatoire. (Le bloc de réinitialisation était exécuté lorsqu'il ne fallait pas) - Correction du texte de debug pour l'ajout d'un objet conditionné dans un magasin.
J'ai dans ma TODO le fait de pouvoir implémenter n'importe quelle condition complexe que le moddeur voudrait.
Pour se faire, il aurait droit à 2 colonnes. La première afin de mettre sa condition, et la seconde pour la condition inverse. Evidemment, mettre du code Weidu là bas ne serait pas du tout adapté, j'aurais donc autorisé le nom d'un fichier (.baf ou autre) contenant uniquement les triggers de condition et qu'il devrait placer quelque part dans le dossier "dispatching". Plusieurs variables que le moddeur pourrait utiliser dans ses triggers seraient disponibles, et évaluées avant la compilation.
Si ce genre de condition est présente, elle remplacerait totalement les conditions génériques du mod afin de laisser une totale liberté au moddeur à ce niveau.
Y vois-tu une barrière ? J'ai peut-être une vision naïve sur le sujet, mais je pense que c'est réalisable.
Edit: Oups, je pensais éditer mon précédent message, désolée du double poste...
Modifié en dernier par Selphira le sam. 08 mars 2025, 21:08, modifié 1 fois.
-
- Araignée géante
- Messages : 416
- Enregistré le : sam. 21 janv. 2012, 14:36
- Statut : Hors ligne
.

Hé bien comme ça, je ne vois pas trop de problème. Plutôt de nouvelles idées.
Je demanderais toujours plus :
Solution qui remplace :
Code : Tout sélectionner
HPPercentGT(Myself, 70)
See(Player1)
Code : Tout sélectionner
~%super%~
HPPercentGT(Myself, 70)
See(Player1)
-
- Araignée géante
- Messages : 416
- Enregistré le : sam. 21 janv. 2012, 14:36
- Statut : Hors ligne
.
Tous les scripts que tu génères sont ajoutés à celui des créatures ? Il y en a qui sont plus globaux ? (map, baldur.bcs ?)
Je me pose des questions sur la possibilité de patcher un bout de script d'un autre mod, j'imagine que ça ne poserait pas de problème particulier ?
Je me pose des questions sur la possibilité de patcher un bout de script d'un autre mod, j'imagine que ça ne poserait pas de problème particulier ?
-
- Adepte de Grondemarteau
- Berserker ogre
- Messages : 1035
- Enregistré le : dim. 25 juil. 2004, 21:28
- Contact :
- Statut : En ligne
.
Oui, si la créature n'a aucun script, un nouveau est créé. Et si elle en possède un, ce script est copié dans un nouveau fichier unique, étendu avec le script généré par le mod, puis le fichier .cre est modifié pour que le script override de la créature utilise le nouveau.
Il n'y a donc pas de script global, par contre, certains tests pour les magasins utilisent une variable globale, pour gérer le cas où plusieurs créatures différentes utiliseraient le même fichier .sto.
Lorsque les conteneurs seront supportés, il est prévu que les scripts générés soient rattachés à la map où se trouve le conteneur.
Il n'y a donc pas de script global, par contre, certains tests pour les magasins utilisent une variable globale, pour gérer le cas où plusieurs créatures différentes utiliseraient le même fichier .sto.
Lorsque les conteneurs seront supportés, il est prévu que les scripts générés soient rattachés à la map où se trouve le conteneur.
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 0 invité