[Scripts] Trucs, astuces et conseils

Vous trouverez ici les conseils indispensables pour bien modder et maîtriser les outils de modding des jeux.
Avatar du membre
Gerauld
Confrère
Messages : 2439

Trucs, astuces et conseils

Message par Gerauld »

Salut, vous avez tous remarqué que de nombreux mods ne sont pas compatibles car modifiant la même chose.
Le but de ce sujet est de vous donner quelques pistes pour modifier des objets du jeu de manière propre afin d'éviter au maximum les soucis de compatibilité.
Cependant, deux mods ayant des fonctionnalités très voisines ou opposées resteront incompatibles.
Il est néanmoins facile, en suivant ces quelques méthodes, de créer des menus pour activer/désactiver la plupart des fonctionnalités de chaque mod une par une. Je créérai également un topic si ça intéresse du monde de savoir comment faire un menu.

Il est nécessaire d'avoir quelques bases sur le CK pour tout suivre.

I. Modifier un objet (objectreference) ou un perso (actor) dont le joueur sans soucis de compatibilité.

Il suffit de créer une quête, de quitter la fenêtre d'édition de quête.
De réouvrir la fenêtre d'édition de cette quête, de créer un referencealias dans l'onglet "Quest aliases".
Il faut de nouveau fermer les fenêtres d'édition d'alias et de quête pour les réouvrir toutes les deux.
Ensuite, il faut placer l'alias sur l'objet que l'on veut :
- s'il s'agit d'une référence à un objet du jeu, il faut choisir "specific reference" et renseigner la cell et la référence de l'objet. Il est aussi possible de sélectionner l'objet dans la render window.
- s'il s'agit d'un acteur unique, choisir unique actor et choisir dans la liste à côté.
- Si c'est lié à un alias d'une autre quête : External Alias Reference (renseigner la quête et l'alias).

Il suffit d'ajouter le script que l'on veut, les objets que l'on veut dans l'inventaire, des keywords, des sorts ou capacités si c'est un actor.

Si on veut que les modifications soient prises en compte dès le début du jeu, il suffit de cocher "Start game enable" dans le premier onglet de la fenêtre d'édition de quête.
Si cela touche le joueur, il est conseillé d'ajouter une consition à cet alias du genre getstage MQ101 >= 250 pour éviter des bugs. Le mieux étant de faire un menu en jeu permettant d'activer/désactiver les modifications. Il suffit de démarrer ou stopper la quête via un script pour le faire.
Une même quête peut avoir plusieurs alias.

Il ne faut pas oublier de cocher la case optionnal de l'alias sinon la quête peut planter s'il n'est pas rempli pour une raison x ou y.

Il est possible d'ajouter des conditions aux alias.
Par exemple, on peut assigner un script au joueur, ajouter des sorts en fonction de la race.


II. Modifier tous les objets d'un même type ou d'une même formlist autour du joueur ou faire des modifications à intervalles réguliers

Tout d'abord, il va falloir créer une variable globale (que j'appelerai variableglobaleMOD ici) ayant une valeur par défaut à 1. C'est très important pour le fonctionnement de ce qui suit et pour supprimer les traces du mod dans les saves à la désinstallation.

Nous utiliserons toujours des alias mais deux quêtes.
La première quête se construit comme la précédente (avec les ouvertures et fermetures de fenêtres d'édition pour éviter les bugs).
La différence se situera dans la manière de remplir les alias.
Si les alias doivent contenir des objets de type actor, il faudra créer un alias ciblant le joueur et ne surtout pas cocher la case "Allow reuse in quest". Les cases "Optionnal", "Allow reserved" (grisée si la quête est "start game enable"), "allow disable" et "allow dead" peuvent être cochées sans soucis.

Pour les autres alias, il faudra choisir : "Find Matching Reference" et cocher les cases "In loaded Area" et "closest". Cocher également les cases "Optionnal", "Allow reserved" (grisée si la quête est "start game enable") et "allow dead" (si la modif concerne des objets de type actor morts).
Le mieux est de créer plusieurs alias et ne surtout pas cocher la case "allow reuse in quest". Plus il y aura d'alias, moins on aura besoin de rafraichir souvent la quête.

Appliquer les scripts et modififications voulues aux alias. Il est possible de faire des modifications via le oninit() du script.

Ensuite créer une deuxième quête qui servira à mettre à jour les alias de la 1ère.
Après avoir créé la quête, fermer et réouvrir la fenêtre d'édition de cette quête.
Onglet "Quest Data" Mettre "priority 99", cocher "start game enable" si les modifs doivent être effectives dès le début du jeu (dans le cas contraire, c'est un script qui démarrera cette quête), cocher la case "Allow repeated stages".

Onglet "quest stages" : créer un INDEX (clic droit + new), puis un "log entry" (laisser EMPTY), cocher "startup stage" et placer dans la "fenêtre papyrus fragment" :

Code : Tout sélectionner

registerforsingleupdate(4)
où 4 peut être remplacé par la période de rafraichissement des alias en secondes.
Cliquer sur le bouton "Compile"

Onglet "Scripts" :
cliquer sur "Add" puis "new script", entrer le nom de votre nouveau script.
Editer la source du script et y coller ceci :
► Afficher le texte
Il suffit de remplir les propriétés en mettant la quête créé précédemment pour quete1 et la variable globale crée tout à l'heure dans variableglobaleMOD.

III. EVITER LES REGISTERFORUPDATE() et REGISTERFORUPDATEGAMETIME()
Un registerforupdate() reste actif dans la sauvegarde même si l'esp est désactivé. Si le script est encore présent sur le disque dur, il se lancera encore et encore...
Le seul moyen d'être sûr d'arrêter ces instructions est de les remplacer par des registerforSINGLEupdate() et registerforSINGLEupdategametime() ET de conditionner la réutilisation de ces instruction avec une variable globale ajoutée par le mod.

Un exemple de script "sale" :
► Afficher le texte
La même chose de manière "propre" :
► Afficher le texte
IV. Modifier les leveleditems de manière propre

Cela nécessite au moins la version 1.6 de Skyrim pour fonctionner.

Voir les ressources de scripts de Sagittarius22 (scripts tout faits) :
http://www.confrerie-des-traducteurs.fr ... 25&t=13784

Les modifications des leveled items par les scripts ne sont pas sauvegardées. Pour l'instant, nous allons voir comment remplacer les modifications qui auraient été faites directement dans le CK par un script.
Cela est un peu plus long à faire mais garantit une parfaite compatibilité avec d'autres mods modifiant les mêmes objets. En effet, si un objet a déjà été retiré par un autre mod, le script se contentera de retourner un "false" qui de toute façon n'est pas testé donc c'est sans douleur.

Tout d'abord, il nous faut créer une quête (comme cité plusieurs fois) et créer un referencealias sur le joueur. Créer un nouveau script et s'inspirer de l'exemple en s'assurant bien que la première ligne commençant par "Scriptname" se termine par "extends referencealias".
► Afficher le texte
Cet exemple ne contient pas tout le script. Il est possible d'utiliser plusieurs formlists pour ajouter des objets à des niveaux différents d'un leveled item. Il suffira de refaire la routine pour chaque formlist et de modifier les paramètres d'ajout à la liste de niveau.
Le fait que les modifications soient faites à chaque chargement du jeu permet de s'affranchir du fait que ces modifs ne sont pas sauvegardées.

Il n'est pas possible de retirer directement des objets d'une leveled list. Il faut utiliser des alias de quête placés sur les conteneurs concernée (méthode du chapitre I ou du chapitre II) et lors du oninit() vérifier la présence des objets à virer et les virer le cas échéant. Il faut ensuite ajouter un event onitemadded() qui virera tous les objets non désirés et les enverra en Oblivion. Il faut juste tester que le aksourcecontainer ne soit pas le joueur s'il s'agit du coffre d'un vendeur.

Bon, c'est un bon début. Je rajouterai des choses par la suite comme par exemple : comment ajouter des capacités sur le joueur sans polluer les sauvegardes.
Modifié en dernier par Kesta le 02 oct. 2015, 22:25, modifié 3 fois.
Avatar du membre
Pr. ChemicalSong
Traducteur aguerri
Traducteur aguerri
Messages : 632
Contact :

Re: COMPATIBILITE-PROPRETE : TRUCS, ASTUCES et CONSEILS

Message par Pr. ChemicalSong »

*-*

Je t'aime mon nounours !

*je ne suis pas près de sortir DME moi*

Je sens que je vais travailler main dans la patte avec toi (comme d'habitude).
Merci à Crisis pour l'avatar!


À toi ma grande, à toi ma belle, sache qu'un chat ne meurt jamais.
Avatar du membre
Tony67
Confrère
Messages : 668

Re: COMPATIBILITE-PROPRETE : TRUCS, ASTUCES et CONSEILS

Message par Tony67 »

:honneur:

Merci pour toutes ces infos :top:
Avatar du membre
Disciplus
Moddeur aspirant
Moddeur aspirant
Messages : 23

Re: COMPATIBILITE-PROPRETE : TRUCS, ASTUCES et CONSEILS

Message par Disciplus »

:top:

Je dois bien avouer que je ne comprend pas encore tout ce que tu dis mais je ne désespère pas.
Merci à toi de faire ce genre de message plus qu'instructif :)
Avatar du membre
Gerauld
Confrère
Messages : 2439

Re: COMPATIBILITE-PROPRETE : TRUCS, ASTUCES et CONSEILS

Message par Gerauld »

J'ai édité le premier post au niveau de la modification des leveled lists de manière propre.
Marcoousik
Moddeur aspirant
Moddeur aspirant
Messages : 189

Re: [TUTO] COMPATIBILITE-PROPRETE : TRUCS, ASTUCES et CONSEI

Message par Marcoousik »

Trop bien fait tout cela. top.
Avatar du membre
Gerauld
Confrère
Messages : 2439

Re: [TUTO] COMPATIBILITE-PROPRETE : TRUCS, ASTUCES et CONSEI

Message par Gerauld »

Merci. Il faudrait que je le refasse en pdf comme les tutos 3D pour mettre des captures.

EDIT : j'ai ajouté un lien vers les ressources de Sagittarius22 (scripts tout faits de distribution dans les leveled lists et tuto).
Marcoousik
Moddeur aspirant
Moddeur aspirant
Messages : 189

Re: [TUTO] COMPATIBILITE-PROPRETE : TRUCS, ASTUCES et CONSEI

Message par Marcoousik »

hey Gerauld,

J'espère que tu vas trouver ce message par là... J'ai rencontré un souci qui me casse la tête avec ton système de double quêtes pour détection des actors avec rafraichissement de la quête portant les alias (méthode décrite ici en haut, point II).
Tout marche pour le mieux, sauf un point: L'arrêt de la quête toutes les 3 ou 4 secondes a pour effet de couper la séquence des animations type boire ou manger chez les acteurs NPC pris dans les alias...
Alors comme mes mods raffolent de cette méthode, ils souffrent tous de cette critique.
Oll a posté une vidéo montrant bien le bug d'interruption, voici le lien:
http://www.confrerie-des-traducteurs.fr ... &start=120

Est-ce que tu peux m'aider ??
Merci
Avatar du membre
Gerauld
Confrère
Messages : 2439

Re: [TUTO] COMPATIBILITE-PROPRETE : TRUCS, ASTUCES et CONSEI

Message par Gerauld »

Hors-sujet
Dur de se remettre dans ce langage de scripting après tout ce temps...Surtout que je dois aussi me remettre à la musique...
Il suffit de tester si la commande d'activation du joueur et celle pour switcher de caméra sont actives avant de faire un arrêt/marche de la quête.
Si l'un des deux n'est aps disponible, on rappelle la que^te de rafraichissement plus tard pour retester ça :
if Game.IsActivateControlsEnabled() and Game.IsCamSwitchControlsEnabled()
Debug.Trace("Le joueur a la main sur la caméra et les commandes donc pas d'animation en cours.")
endIf
Hors-sujet
Il faudra vérifier la synthaxe car je jongle actuellement en plusieurs langages de programmation et suis noyés dans les requêtes de bases de données... (le scripting même à tout, merci Skyrim)
Marcoousik
Moddeur aspirant
Moddeur aspirant
Messages : 189

Re: [TUTO] COMPATIBILITE-PROPRETE : TRUCS, ASTUCES et CONSEI

Message par Marcoousik »

Euh...Je pige pas trop le rapport à la caméra ou aux commandes en fait..

Je parle des NPC qui sont mis en alias par quête de détection "closest" to player.
Ceux-ci par l'éternel boucle quest,stop() / quest.start() sont interrompus dans leur séquences d'idle boire manger.

ALors j'ai pu règler le problème ainsi...mais seulement à supprimer sur les alias les idles de nourriture et boisson pour en imposer d'autres de plus courte séquence.
Bon cela anime un peu plus les NPC dans le jeu mais parfois de façon absurde, ceci dit ils font maintenant plus que seulement manger et boire dans les auberges.
La mise en alias n'interrompt plus les séquences, celles-ci étant choisies courtes, ce qui dérange moins, mais comme dit les persos ne mangeront et boiront que si ils ne sont PAS attrapés dans un alias, cad suffisamment éloignés du player...
Répondre

Retourner vers « Tutoriels et conseils de réalisation »