Oyez, oyez !

Les résultats du vote sur les meilleurs RPG de tous les temps sont désormais dévoilés dans ce message !

Merci à toutes et à tous pour votre participation !

N'hésitez pas à aller commenter, ajouter des jeux auxquels vous n'auriez pas pensé...

[WIP] ItemDispatcher

Répondre
Selphira
Adepte de Grondemarteau
Ettercap
Messages : 888
Enregistré le : dim. 25 juil. 2004, 21:28
Contact :
Statut : Hors ligne

[WIP] ItemDispatcher

.

Message par Selphira »

Attention ! Ce mod n'existe pas encore, c'est le résultat de ma réflexion sur ce que je compte réaliser.

Présentation du mod

A la base, je voulais avoir une manière très simple de répartir des objets n'importe où dans le jeu, sans devoir coder.
Par exemple, indiquer d'ajouter un objet dans l'inventaire de telle créature, dans tel conteneur ou dans l'inventaire de tel marchand. Très simple à faire en Weidu, mais nécessite du code.
A force d'y réfléchir, les idées se sont empilées, pour en arriver à quelque chose de bien plus complet, qui ressemble à plusieurs égards à ItemRandomiser pour la partie aléatoire, tout en y ajoutant diverses features et automatismes.

L'idée de base est simple, toute la répartition doit se réaliser à partir d'un simple fichier 2da.
Ensuite, n'importe quel mod peut venir se greffer et de proposer ses propres répartitions et configurations, elles seront jouées au moment de l'installation d'ItemDispatcher.

Pour une répartition simpliste, il n'y a rien de vraiment particulier, si [ItemA] existe, il est placé à l'endroit [TargetA] s'il existe également.

On va donc un peu plus loin, et on se dit qu'on voudrait déplacer un objet provenant d'une source bien précise, pour le répartir ailleurs, en le supprimant de sa source, ou le remplaçant à sa source par autre chose.
Encore plus loin, on voudrait que l'objet n'apparaisse dans [Target] qu'à partir d'un certain chapitre, d'un certain niveau d'expérience du joueur, qu'il ne soit réparti que sur des créatures d'un palier, d'une race et/ou d'une classe précise, uniquement pour récompenser les joueurs qui jouent dans une certaine difficulté, que l'objet soit équipé ou non sur [Target] si c'est une créature, qu'il ne soit équipé que si la créature peut le porter, qu'on puisse répartir un objet parmi une [Target] appartenant à un groupe défini, que l'objet n'apparaissent qu'à certaines périodes de la journée, etc.
Et là on se rend compte que d'une simple idée, on peut faire un outil vraiment sympa, complet et puissant.

Et je le rappelle, le tout sans devoir coder la moindre ligne de code Weidu, simplement en remplissant quelques tableaux de données.

Bien que je vais être obligée de créer des scripts qui s'exécuterons en jeu pour la majorité des fonctionnalités plus avancée, il faudra tout de même réinstaller le mod pour avoir une répartition différente.
Il y aura cependant de petites variantes. Par exemple, si le système veut donner 2 objets différents à une créature, ces 2 objets pourront apparaitre aléatoirement d'une partie à l'autre.
J'ai aussi trouvé comment faire pour donner un objet à une créature bien précise d'une carte, même si elle est présente en plusieurs exemplaires sur cette carte, seule l'une d'entre-elles sera concernée.

Bien, maintenant passons au cœur du sujet, je vais lister toutes les options possibles, et donner quelques exemples de ce qui est prévu.
Désolée, ça va être un peu long ! Mais n'hésitez pas si vous avez des critiques ou suggestions.

Les options

L'objet
Le nom du fichier de l'objet à répartir (sans le .itm), c'est la seule option qui sera obligatoire.
Ex: sw1h01

La cible
C'est l'endroit où l'on défini où sera réparti l'objet. C'est l'option la plus complexe, il y aura beaucoup de possibilités, voici de manière exhaustive ce qui est prévu.

Description de la cibleExempleCode
Une créature spécifiqueSur un squeletteskelet01.cre
Une créature aléatoireSur une créature aléatoire?.cre
Une créature aléatoire d'une certaine raceSur une créature aléatoire de race nainedwarf.rce
Une créature aléatoire d'une certaine classeSur une créature aléatoire de classe magemage.cls
Une créature aléatoire d'une certain kitSur une créature aléatoire possédant le kit de Kensaikensai.kit
Une créature aléatoire d'une certain alignementSur une créature loyale mauvaise aléatoirelawful_evil.alg
Une créature aléatoire d'un certain type (humanoïde, animal, mort-vivant, etc.)Sur une créature aléatoire de type mort-vivantundead.gen
Une créature aléatoire d'un certain genreSur une créature aléatoire du genre fémininfemale.gnd
Un magasin spécifiqueDans le magasin de Ribaldribald3.sto
Un magasin aléatoireDans un magasin aléatoire?.sto
Un conteneur aléatoireDans un conteneur aléatoire?.cnt
Un conteneur spécifique (nécessite que l'option "zone" soit défini)Dans le conteneur numéro 2 de la carte où il se trouve2.cnt
Un groupeSur une créature, un magasin ou un conteneur aléatoire appartenant au groupemongroupe.grp
Une zoneSur une créature, un magasin ou un conteneur aléatoire du donjon d'Irenicusar0602.are

Avec tout cela, on peut déjà faire pas mal de choses, mais ce n'est pas tout ! Car à cela, viennent s'ajouter les combinaisons et les quantités !

Les quantités

Par défaut, un seule cible par ligne aura l'objet réparti sur elle.
Pour étendre les possibilités, on peut donc définir la quantité de cibles sur lesquels répartir l'objet. 3 possibilités sont offertes, toutes les cibles, un nombre de cible bien précis, un nombre aléatoire de cibles.
Pour définir une quantité, il suffit d'ajouter au tout début, la quantité désirée, suivie du caractère "#".
Cette notion de quantité est valable pour toutes les cibles où une part d'aléatoire est présente. Voici quelques exemples.

ExempleCode
Sur 2 créatures aléatoires2#?.cre
Sur 3 magasins aléatoires3#?.sto
Sur 5 cibles aléatoires appartenant à un groupe5#mongroupe.grp
Sur toutes les créatures du genre féminin*#female.gnd
Sur 2 à 6 créatures de classe mage2-6#mage.cls

Les combinaisons

C'est ici qu'on peut commencer à vraiment s'amuser, il sera possible de combiner la plupart des notations de cible. Pour se faire, il suffit de les séparer avec le caractère "|". Vous pourrez les noter dans n'importe quel ordre, seule la quantité devra impérativement se trouver en début de cahîne.

Que diriez-vous de pouvoir répartir votre objet sur 3 nains d'alignement mauvais d'une zone précise ?
Cela se traduira par ce bout de code

3#dwarf.rce|male.gnd|evil.alg|ar0602.are

Si nous décomposons, nous obtenons
3# : 3 cibles aléatoires
dwarf.rce : De race naine
male.gnd : De genre masculin
evil.alg : D'alignement mauvais (loyal, neutre ou chaotique)
ar0602.are : Dans le donjon d'Irenicus

La source de l'objet

Si aucune source n'est définie, le mod se contentera d'ajouter une nouvelle occurrence de l'objet dans le jeu. Mais ce comportement ne sera pas toujours voulu, parfois, on veut qu'un objet unique le reste, ou qu'il n'ai pas trop d'exemplaires dans la nature. Il y a aussi le cas des mods d'objets qui centralisent tous dans un seul et unique magasin. Généralement, car c'est plus facile à faire, il y a moins de problèmes de compatibilité, ou d'autres raisons.
C'est là que la source intervient, si elle est définie, l'objet ne sera plus simplement ajouté, mais il sera retiré de sa source. Si l'objet ne serait plus présent à sa source au moment où le mod se charge de lui, alors il sera simplement ignoré.

Tout comme la cible, la source pourra avoir une part d'aléatoire. Bien qu'il serait techniquement possible d'offrir toutes les possibilités, et combinaisons de la cible, je ne pense pas proposer cela. L'intérêt est bien moindre, de fait, il n'y aura pas de combinaison ni de quantité, mais une notation simplifiée qui permettra le principal.

Description de la sourceExempleCode
Une créature spécifiqueRépartir l'objet du squeletteskelet01.cre
Une créature aléatoireRépartir l'objet d'une créature aléatoire?.cre
Toutes les créaturesRépartir l'objet de toutes les créatures qui le possèdent*.cre
Un magasin spécifiqueRépartir l'objet du magasin de Ribaldribald3.sto
Un magasin aléatoireRépartir l'objet d'un magasin aléatoire?.sto
Tous les magasinsRépartir l'objet de tous les magasins*.sto

Le nombre d'objets

Simplement définir le nombre de fois où l'objets sera ajouté à la cible, en tenant compte du nombre d'objets possible par pile.
Par exemple, il sera possible d'ajouter 20 flèches (1 pile), mais attention, si vous définissez 20 pour une épée, elle sera ajouté 20 fois dans l'inventaire de la créature. En fait, 20 maximum, dépendant de la place qu'il lui reste.
Il sera également possible de définir un nombre aléatoire d'objets

ExempleCode
1 objet-
1 objet1
2 objets2
Entre 0 et 5 objets0-5
Entre 7 et 40 objets7-40

Le chapitre

Cette option va permettre de définir à quel chapitre l'objet pourra apparaitre. Cela pourra aller d'un chapitre fixe, un chapitre minimum et/ou un chapitre maximum.
Du fait de sa nature, ce genre de répartition passera obligatoirement par un script, qui vérifiera le chapitre en cours pour savoir si l'objet sera présent ou non sur la cible.
Les chapitres iront du 1 au 22, qui correspond à la numérotation des chapitres de EET.

ExempleCode
Un objet présent à n'importe quel chapitre-
Un objet présent qu'au chapitre 33
Un objet présent à partir du chapitre 33+
Un objet présent jusqu'au chapitre 3 (inclus)3-
Un objet présent du chapitre 3 au chapitre 53-5

La difficulté

Cette option permettra de répartir un objet, uniquement si le joueur est dans une difficulté précise. Vous voulez récompenser les joueurs qui se cassent la tête à vaincre vos monstres en difficulté maximale ? Vous voulez donner un coup de pouce à ceux qui préfèrent se focaliser sur l'histoire en jouant en difficulté minimale ? Ce sera possible !
Les valeurs possibles vont de 1 à 5 et correspondent, par défaut, aux niveaux de difficultés suivants :
1 - Facile
2 - Normal
3 - Règle de base
4 - Difficile
5 - Très difficile

ExempleCode
Uniquement en difficulté de base-
Uniquement en difficulté de base3
En difficile ou plus4+
En normal ou moins2-
Entre la difficulté normale et difficile2-4

Le palier

Cette option n'est pas obligatoire, mais il sera plus que conseillé de la renseigner, afin d'éviter de déséquilibrer le jeu.
Sans elle, il serait possible que la répartition choisisse de donner un objet +5 sur un simple Gobelin, de le place dans une caisse de ChateauSuif, ou encore de placer un épée rouillée sur le Démogorgon.
Pour répondre à ce problème, le concept de palier entre en jeu. Il tente d'estimer la puissance relative d'un objet, et d'une cible. Malheureusement, ce concept est part nature assez subjectif, j'imagine qu'il y aura pas mal de modifications dans ces listes pour avoir un équilibrage intéressant.
Le mod aura donc diverses listes pour définir le palier d'un objet, d'un magasin, d'un conteneur ou d'un groupe.
Ces listes pourront être agrémentées par d'autres mods, principalement pour gérer les paliers de leurs propres objets et cibles.
Pour tous les objets et créatures pour lesquels aucun palier n'a été défini, le mod va leur en affecter un par défaut.
Je ne sais pas encore précisément quels calculs seront effectués, mais l'idée est de se baser sur le niveau d'enchantement pour les objets, et le niveau (total d'expérience) pour les créatures, en appliquant un nombre aléatoire pour augmenter ou diminuer de 2 (valeur arbitraire non fixée) le palier calculé.
Le nombre de paliers n'est pas encore arrêté, j'avais pensé à 1 palier par chapitre. C'est simple et donne une bonne idée au moddeur pour savoir environ à quel niveau le joueur se trouve.

ExempleCode
Aux cibles de n'importe quel palier-
Aux cibles de palier 55
Aux cibles de palier 6 et plus6+
Aux cibles de palier 6 et moins6-
Aux cibles de palier 3 et 93-9

Equiper

Cette option n'est valable que si la cible est une créature, elle indique si l'objet doit être équipé ou simplement ajouté dans l'inventaire.
Attention, si cette option est activée, seules les créatures pouvant porter l'objet seront sélectionnées.
Aussi, si le slot de la créature est déjà occupé par un objet, le mod s'assurera de remplacer l'objet par un autre de même type.

ExempleCode
Ne sera pas équipé-
Ne sera pas équipé0
Sera équipé1
L'objet sera aléatoirement équipé ou non?

Voler

Simplement indiquer si l'objet peut être volé ou non. Rien de spécial à ajouter ici.

ExempleCode
Ne peut pas être volé-
Ne peut pas être volé0
Peut être volé1
L'objet peut aléatoirement être volé ou non?

La chance

Une option qui indique la chance que la ligne soit prise en compte, rien de plus, rien de moins. Elle acceptera une valeur allant de 1 à 100.


Quelques règles générales

- Le mod tentera le plus possible d'éviter qu'une même cible soit sélectionnée pendant la répartition. Cependant, s'il n'y a pas assez de cible et qu'une créature est sélectionnée 2 fois pour un objet à équiper sur le même emplacement, l'objet équipé sera déterminé aléatoirement, tandis que le second ira dans l'inventaire.
- Le mod ne répartira pas, ni ne déplacera un objet qu'il aura lui-même ajouté sur une cible.
- Pour un magasin, l'objet n'y sera ajouté que si le magasin accepte ce type d'objet
- Un objet ne sera ajouté dans l'inventaire d'une créature, que s'il reste au moins 1 place. S'il ne reste plus de place, la créature sera ignorée et une autre sera sélectionnée.
- Les créatures invoquées ne pourront pas être la cible d'une répartition
- Un fichier de log sera créé pour indiquer tous les changements effectués, à des fins de vérifications, mais aussi de spoil si l'utilisateur veut savoir où trouver tel objet.

Au final le fichier 2da de répartition pourrait ressembler à ceci

Code : Tout sélectionner

Objet  Cible        Source Nombre Chapitre Difficulte Palier Equiper Voler Chance 
sw1h01 skelet01.cre -      -      -        -          -      -       -     50     
sw1h01 ?.cre        -      -      2+       -          4      1       1     100    
Merci d'avoir lu tout ce pavé !
Avatar du membre
deratiseur
Golem de fer
Messages : 3554
Enregistré le : mer. 05 déc. 2007, 18:35
Localisation : Gap, Hautes alpes
Statut : Hors ligne
.

Message par deratiseur »

Chouette outil en prévision :)

Question : si on demande de mettre l'objet dans l'équipement d'une créature aléatoire, il pourrait donc être droppé si c'est une créature aléatoire ou volé (si on l'a accordé) si c'est une créature neutre. Mais comment savoir ? Par exemple, si je rajoute une casque sur une créature aléatoire, comment savoir s'il va aller sur un hobgobelin (drop) ou sur un prisonnier dans la prison ou un membre du conseil ?
Et si je veux qu'il ne puisse qu'être volé (tant qu'à ce que le jouer l'obtienne gratuitement, je préfère que ce soit par investissement dans mass points de compétence), comment assurer qu'il soit ajouté à une créature neutre ? Et comment je gère le niveau nécessaire pour voler sur ce personnage ?
Modifié en dernier par deratiseur le ven. 25 oct. 2024, 21:04, modifié 1 fois.
Je n’oublie pas qui a mis le feu aux poudres.

A part ça, mes mods sont tous sur Mediafire et Github
Et leurs descriptions sont ici.
Selphira
Adepte de Grondemarteau
Ettercap
Messages : 888
Enregistré le : dim. 25 juil. 2004, 21:28
Contact :
Statut : Hors ligne
.

Message par Selphira »

Justement, si c'est aléatoire, tu ne peux pas vraiment savoir.
Par contre, tu peux diriger l'aléatoire grâce aux divers filtres présents (classe, race, etc.), donc si tu veux que ton objet aille sur un Hobgobelin, qu'il soit archer, mage, garde d'élite, ou autre, alors utilise le filtre de race hobgobelin.rce.
Ces filtres, qui seront disponibles par défaut, seront générés à partir des fichiers .ids du jeu. Le nom à renseigner sera le contenu du fichier .ids en minuscule.

Il est certain que l'aléatoire total du genre un simple ?.cre pourra mener à des répartitions étranges et/ou inappropriées, mais c'est le jeu de l'aléatoire.

Pour la compétence de vol à la tire, je voulais aussi pouvoir jouer dessus, mais je n'ai pas trouvé grand qui permette de jouer dessus sur les créatures. Tout ce que j'ai pu trouver qui influence la difficulté, est que la compétence de vol à la tire de la cible est soustraite à la compétence du voleur. Mais rien qui ne soit directement lié à l'objet à voler.
Idem pour les marchands, il y a bien un pourcentage d'échec, mais il est lié au magasin, pas à un objet spécifique.
Si tu as d'autres informations sur le sujet, je suis preneuse !
Avatar du membre
loupgris
Goule majeure
Messages : 1919
Enregistré le : jeu. 31 oct. 2019, 19:39
Statut : Hors ligne
.

Message par loupgris »

Donc si j'ai bien compris, si réinstallation il y a, l'avantage ici serait de contourner notamment la problématique d'item randomiser avant SCS.
C'est bien évidement intéressant, sachant qu'on peut cibler finement suivant divers critères.
L'aléatoire avec des variables OUI ! :good:
Répondre

Retourner vers « Modules (créés ou en cours de développement) »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 0 invité