[Scripts] Ajouter de nouveaux objets dans les Leveled Lists

Vous trouverez ici les conseils indispensables pour bien modder et maîtriser les outils de modding des jeux.
Avatar du membre
sagittarius22
Moddeur émérite | Traducteur chevronné
Moddeur émérite | Traducteur chevronné
Messages : 2948

Ajouter de nouveaux objets dans les Leveled Lists

Message par sagittarius22 »

Une Leveled List, ou en français un objet nivelé ("mettre au même niveau"), est une liste d'objets parmi lesquels le jeu en choisira un ou plusieurs pour les ajouter de façon dynamique aux personnages et conteneurs.
Le problème, c'est que plusieurs mods modifiant directement les mêmes Leveled Lists sont pour la plupart incompatibles. Il faudra donc les rajouter par scripts.
Pour ceci, nous allons donc tout d'abord créer une FormList. C'est une liste d'objets divers et variés. Nous la nommerons LaListe dans ce tuto:
Image
Une fois ceci fait, il nous reste à glisser les objets qui seront plus tard ajoutés aux Leveled Lists, dans la FormList. Je rajoute ici des armes dans la FormList:
Image
Maintenant, la partie la plus délicate. Il nous faut créer une quête avec un Alias attaché au joueur. La quête s'appelle ici MonAjout, notez bien les cases qui sont cochées:
Image
Maintenant, le script. Les Leveled Lists modifiées par script sont remises à la normales à chaque chargement du jeu, il faut donc que le script se lance à chaque chargement:

Code : Tout sélectionner

scriptname _ScriptDuTuto Extends ReferenceAlias
LeveledItem Property ArmesBandits Auto
FormList Property ListeArmes Auto

Event OnInit()
Int RandItems = Utility.RandomInt(1,5)
Int RandLevel = Utility.RandomInt(0,1)
Int PlayerLevel = PlayerREF.GetLevel()
Int Index = 0

While Index < ListesArmes.GetSize() ; si nous n'avons pas ajouté tous les objets, alors...
    ArmesBandits.AddForm(ListesArmes.GetAt(Index), PlayerLevel + RandLevel, RandItems) ; ... On ajoute entre une et cinq armes de chaque    ;exemplaire qui apparaîtront au niveau du joueur + un nombre aléatoire entre 0 et 1 (donc soit au niveau actuel soit au prochain niveau)...
    Index += 1 ; puis on passe à l'objet suivant dans la FormList.
EndWhile
EndEvent

Event OnPlayerLoadGame()
Int Index = 0

While Index < ListesArmes.GetSize() ; si nous n'avons pas ajouté tous les objets, alors...
    ArmesBandits.AddForm(ListesArmes.GetAt(Index), 5, 2) ; ... On ajoute deux armes de chaque exemplaire qui apparaîtront au niveau 5...
    Index += 1 ; puis on passe à l'objet suivant dans la FormList.
EndWhile
EndEvent
Avec un petit script légèrement plus avancé, on peut même ajouter les objets selon le niveau du joueur, voire carrément randomiser le tout:

Code : Tout sélectionner

scriptname _ScriptDuTuto Extends ReferenceAlias

Actor Property PlayerREF Auto
LeveledItem Property ArmesBandits Auto
FormList Property ListeArmes Auto

Event OnInit()
Int RandItems = Utility.RandomInt(1,5)
Int RandLevel = Utility.RandomInt(0,1)
Int PlayerLevel = PlayerREF.GetLevel()
Int Index = 0

While Index < ListesArmes.GetSize() ; si nous n'avons pas ajouté tous les objets, alors...
    ArmesBandits.AddForm(ListesArmes.GetAt(Index), PlayerLevel + RandLevel, RandItems) ; ... On ajoute entre une et cinq armes de chaque    ;exemplaire qui apparaîtront au niveau du joueur + un nombre aléatoire entre 0 et 1 (donc soit au niveau actuel soit au prochain niveau)...
    Index += 1 ; puis on passe à l'objet suivant dans la FormList.
EndWhile
EndEvent

Event OnPlayerLoadGame()
Int RandItems = Utility.RandomInt(1,5)
Int RandLevel = Utility.RandomInt(0,1)
Int PlayerLevel = PlayerREF.GetLevel()
Int Index = 0

While Index < ListesArmes.GetSize() ; si nous n'avons pas ajouté tous les objets, alors...
    ArmesBandits.AddForm(ListesArmes.GetAt(Index), PlayerLevel + RandLevel, RandItems) ; ... On ajoute entre une et cinq armes de chaque    ;exemplaire qui apparaîtront au niveau du joueur + un nombre aléatoire entre 0 et 1 (donc soit au niveau actuel soit au prochain niveau)...
    Index += 1 ; puis on passe à l'objet suivant dans la FormList.
EndWhile
EndEvent


N'oubliez pas de bien remplir vos Properties bien entendu. Ce script est utile lorsque vous souhaitez ajouter plusieurs objets d'une traite.
Bon travail :bye:
Moddeur, Testeur et Traducteur
Avatar du membre
Gerauld
Confrère
Messages : 2439

Re: Ajouter de nouveaux objets dans les Leveled Lists

Message par Gerauld »

Classe. D'ailleurs c'est ton script que j'utilise dans SEI pour les leveled lists. ;)
Merci encore.
Avatar du membre
sagittarius22
Moddeur émérite | Traducteur chevronné
Moddeur émérite | Traducteur chevronné
Messages : 2948

Re: Ajouter de nouveaux objets dans les Leveled Lists

Message par sagittarius22 »

Pas de soucis :)
Moddeur, Testeur et Traducteur
Sita
Légende de la Confrérie
Légende de la Confrérie
Messages : 18422

Re: Ajouter de nouveaux objets dans les Leveled Lists

Message par Sita »

Très intéressant comme méthode, mais une forte quantité de script n'a pas tendance à consommer beaucoup de ressources ? (Je demande même si dans le cas présent il s'agit seulement d'un script), mais dans le cas d'une dizaine de mods utilisant ce même principe ? (Voir plus)
Avatar du membre
sagittarius22
Moddeur émérite | Traducteur chevronné
Moddeur émérite | Traducteur chevronné
Messages : 2948

Re: Ajouter de nouveaux objets dans les Leveled Lists

Message par sagittarius22 »

Normalement non, je pense que Beth' utilise les mêmes techniques.
Moddeur, Testeur et Traducteur
Avatar du membre
Gerauld
Confrère
Messages : 2439

Re: Ajouter de nouveaux objets dans les Leveled Lists

Message par Gerauld »

Un petit complément de réponse détaillé concernant une idée reçue que l'on voit souvent dans les forums.
Beaucoup pensent que les scripts mangent énormément de ressources et peuvent ralentir le jeu. En règle générale, c'est faux.

Les scripts consomment moins de ressources que les statics affichés à l'écran. Ils ne peuvent faire chuter les fps ou ralentir le jeu car les script se partagent une plage de temps fixe appelée à intervalle régulier. Avoir beaucoup d'instances de scripts lancées ne fait que ralentir sensiblement la vitesse d'exécution des scripts eux-même et non le jeu.

Je parle d'instances et non de scripts car un même script peut être amené à tourner 10 fois en même temps si l'évènement le déclenchant a lieu alors que celui-ci n'a pas fini.

Ce script pour les leveled lists n'est actif qu'au moment où la sauvegarde est chargée donc transparent pour le reste de la partie. Il y a donc peu de chances qu'il viennent interférer avec quoi que ce soit.

Avec les scripts, il y a beaucoup moins de risques pour les ressources qu'avec des mods de donjons ou de maisons mal optimisés.
Avatar du membre
sagittarius22
Moddeur émérite | Traducteur chevronné
Moddeur émérite | Traducteur chevronné
Messages : 2948

Re: Ajouter de nouveaux objets dans les Leveled Lists

Message par sagittarius22 »

J'ai mis le tuto à jour en ajoutant un script avancé pour plus de dynamisme ;)
Moddeur, Testeur et Traducteur
Avatar du membre
Gerauld
Confrère
Messages : 2439

Re: Ajouter de nouveaux objets dans les Leveled Lists

Message par Gerauld »

Je vais utiliser ton script avancé pour SEC - Skyrim Enhanced Crafting, vu que j'utilise déjà le premier dans SEI... Merci encore.
Avatar du membre
sagittarius22
Moddeur émérite | Traducteur chevronné
Moddeur émérite | Traducteur chevronné
Messages : 2948

Re: Ajouter de nouveaux objets dans les Leveled Lists

Message par sagittarius22 »

Pas de quoi :)
Moddeur, Testeur et Traducteur
Avatar du membre
sagittarius22
Moddeur émérite | Traducteur chevronné
Moddeur émérite | Traducteur chevronné
Messages : 2948

Re: Ajouter de nouveaux objets dans les Leveled Lists

Message par sagittarius22 »

Petite "découverte", utiliser un Array est plus efficace qu'une FormList :)
Moddeur, Testeur et Traducteur
Répondre

Retourner vers « Tutoriels et conseils de réalisation »