Creation Kit : Packages

De Wiwiki
Aller à la navigation Aller à la recherche
La version imprimable n’est plus prise en charge et peut comporter des erreurs de génération. Veuillez mettre à jour les signets de votre navigateur et utiliser à la place la fonction d’impression par défaut de celui-ci.


Tutoriel traduit du wiki officiel: Original

Résumé

Ce tutoriel va vous montrer comment mettre en place des packages (la structure qui contrôle le comportement des personnages) sur un acteur pour le faire bouger dans le jeu.

Vous apprendrez :

  • Comment les listes de packages fonctionnent
  • Comment créer un emploi du temps quotidien simple pour un PNJ
  • Comment créer un nouveau package

Packages et les listes

Un package est un terme utilisé dans le Creation Kit pour désigner les structures qui contrôlent le comportement d'un acteur (un PNJ). A chaque instant, un acteur est toujours soumis à un et un seul package, qui lui dit quoi faire : dormir, manger, se promener, suivre un itinéraire de patrouille, travailler à la forge, etc.

Comment un acteur peut savoir quel package utiliser à quel moment ? C'est là qu'intervient la liste de packages (Package Stack). L'idée est que chaque PNJ possède une liste de package qu'il peut utiliser. Le jeu va ensuite régulièrement parcourir cette liste, utilisant le premier de la liste puis les utilisant un par un en descendant pour trouver celui qu'il peut utiliser. Un package est valide si :

  • Ses conditions sont vraies et
  • L'heure correspond à celle de son agenda.

Un NPC va toujours utiliser le premier package valide dans la liste. Les PNJ proches du joueur vont régulièrement mettre à jour leur liste de package à la différence de ceux dans des zones non-chargées.

Créer un emploi du temps simple

Voyons maintenant comment mettre en place ces packages en donnant à notre bon Bendu Olo un emploi du temps. (Veuillez avoir terminé le turoriel Créer un acteur avant).

Double-cliquez sur GSQBenduOlo et cliquez sur l'onglet AI Packages, qui doit ressembler à ceci :

Package Tutorial PackageList.jpg

Vu qu'il n'y a aucun package dans la liste, Bendu ne fait que rester à sa place toute la journée. Faisons-le faire quelque chose pour qu'il agisse plus comme un être humain.

Pour ajouter un package à un acteur, cliquez-droit sur la liste et sélectionnez "Add". Vous pouvez aussi prendre un package déjà fait depuis la fenêtre d'objet (onglet Character > Package). Utilisons la deuxième façon : descendez dans la liste et trouvez les packages nommés "Default..." (ce nom est utilisé pour indiquer que le package n'est lié à rien de particulier et peut être utilisé par n'importe qui).

Package Tutorial DefaultPackages.jpg

On peut ainsi créer un emploi du temps simple pour Bendu grâce à ces packages. Disons que l'on veut qu'il prenne son petit-déjeuner et son diner chez lui, qu'il dorme la nuit et sinon se promène dans sa maison.

Pour manger, regardons le package "eat" qui existe déjà : utilisons DefaultEatEditorLoc8x1 pour le petit-déjeuner et DefaultEatEditorLoc18x1 pour le diner.

Note : pour les packages qui ont des horaires, les noms utilisés sont "DEBUTxDUREE". Donc 8x1 indique un package qui commence à 8h du matin et dure 1 heure. Attention quand même, le nom peut être faux...

Vérifions que nos packages correspondent à leurs noms. Une heure dans le jeu correspondant à 3m dans la réalité (20min dans le jeu = 1min en vrai donc 24h = 72min).

Ouvrez les deux packages et sélectionnez leur onglet "Schedule" (emploi du temps) qui doit ressembler à ceci :

Package Tutorial DefaultEatEditorLoc8x1.jpg

Leurs noms sont corrects ! Ces packages ont les horaires attendus. Parfait, ajoutez-les à la liste de Bendu qui ressemblent maintenant à ça :

Package Tutorial PackageList2.jpg

Comme on l'a évoqué avant, l'ordre de la liste est très important puisque l'acteur va toujours utiliser le premier package valide. Pour ces deux packages, ce n'est pas très important puisqu'ils ne sont pas valides au même moment. Entre 8 et 9h du matin, "DefaultEatEditorLoc8x1" est valide mais entre 6 et 7h du soir, c'est DefaultEatEditorLoc18x1 qui le devient. A toute autre moment, aucun des deux n'est valide.

Si pour l'instant l'ordre n'a donc que peu d'importance, faites attention, car il le deviendra avec les prochains packages qu'on va ajouter.


On voulait aussi faire dormir Bendu la nuit, on peut trouver un package pour ça dans la liste "default" : DefaultSleepEditorLoc1x8 qui n'est pas le meilleur choix mais permet d'illustrer l'importance de l'ordre dans la liste des packages.

Si vous faites attention, vous avez pu noter que ce package, valide de 1h à 9h du matin, empiète sur le package du petit-déjeuner (DefaultEatEditorLoc8x1) qui est valide de 8 à 9h du matin. C'est ici que l'ordre importe !

Si nous mettons le package pour dormir en haut de la liste comme ceci :

Package Tutorial PackageList3.jpg

Comme c'est le plus haut qui "gagne", à 8h du matin, Bendu va faire la grasse-matinée puisque le package de petit-déjeuner, plus bas, de sera jamais utilisé.

Pour faire fonctionner tout cela, il va falloir mettre le package pour dormir en dessous de celui pour le petit-déjeuner dans la liste :

Package Tutorial PackageList4.jpg

Désormais, Bendu va aller dormir à 1h du matin comme prévu (c'est le seul package valide à ce moment-là) puis, à 8h, Bendu va se lever et prendre son petit-déjeuner puisque ce package est le plus haut dans la liste. Bendu n'aura donc que 7h de sommeil sur les 8 prévues par le package mais il ne loupera pas son petit-déjeuner !

Nous avons maintenant une bonne partie de la journée de Bendu couverte par un emploi du temps : il mange pendant 2h et dort pendant 7. On pourrait continuer à remplir sa journée avec des packages à horaires mais c'est toujours une bonne idée de lui donner un package de recours quand rien n'est valide. Ce package ne doit avoir ni conditions ni horaires et donc être placé en toute fin de liste.

On utilise souvent un package "Sandbox" pour cet usage. Cela laisse le PNJ bouger dans son environnement proche et choisir quoi faire presque au hasard. Très pratique quand on n'a pas besoin de faire faire quelque chose à un PNJ tout en le laissant se comporter naturellement.

Ici, DefaultSandboxHomeowner est un bon choix. Ouvrez-le et regardons ses données :

Package Tutorial DefaultSandbox.jpg

Sa "location" indique "Near editor location, radius 1500" ce qui veut dire qu'il va "sandbox" (on y mettra ce qu'on veut) autour de l'endroit où il est avec un périmètre de 1500 unités (assez pour couvrir un petit intérieur). Si vous regardez dans les autres packages "default" de Bendu, vous pouvez voir qu'ils utilisent tous l'option "Near editor location". Cela ne spécifie aucune localisation précise dans le monde et donc peut être utilisé par n'importe qui.

Une autre option intéressante est "Unlock On Arrival = True". Cela déverrouille les portes de l'endroit dès que le PNJ commence à utiliser ce package. Très pratique puisque notre Bendu est sensé accueillir le joueur pour lui donner une quête.

Vous pouvez regarder les onglets de conditions et d'emploi du temps (schedule) pour vérifier qu'il n'y a rien dedans (et donc toujours valide, ce qu'on cherche précisement).

Mettez le package dans la liste de Bendu, tout en bas. Il a maintenant un emploi du temps complet :

Package Tutorial PackageList5.jpg

Si vous voulez voir Bendu en action, chargez le jeu et déplacez vous vers lui:

coc MixwaterMillWorkersHouse

Pour le voir à différentes période, changez simplement l'heure du jeu :

set gamehour to 2

Bendu a désormais de simples comportements dans sa maison (manger, dormir, se déplacer). S'il ne veut pas dormir et vous demande de partir, utilisez la commande toggledetection, il ignorera votre présence.


Créer un nouveau Package

Nous avons vu comment utiliser les packages "default" pour créer des emplois du temps. Mais pourquoi ne pas créer un package spécialement pour Bendu ? Disons que l'on veut qu'il "patrouille" à l'intérieur de sa maison à certains moments de la journée.

D'abord, créez un nouveau package en cliquant-droit sur la liste des packages et sélectionnez "New". Vous allez avoir une fenêtre vide comme celle-là :

Package Tutorial NewPackage1.jpg

Par défaut, le template "Travel" est sélectionné, mais on veut créer une patrouille donc changez l'option pour "Patrol". Notez que la liste des "packages data" a changé, le template de patrouille nécessitant des données différentes du "Travel". Maintenant on a un package de patrouille vide, prêt à être completé avec des données spécifiques à Bendu :

Package Tutorial NewPackage2.jpg

Pour avoir tous les détails sur les données possibles de ce package, regardez sur la page du wiki de Bethesda (http://www.creationkit.com/Patrol_%28Procedure%29). Pour l'instant nous n'aurons besoin que de deux données :

  • Départ de la patrouille : où Bendu doit-il commencer sa patrouille ?
  • Emploi du temps : à quelle heure Bendu doit utiliser ce package ?

Nous n'avons pas encore fait le chemin de patrouille pour Bendu donc chargez l'extérieur et créez un chemin simple pour lui (si vous avez l'intérieur de la maison chargé, double-cliquez sur le marqueur jaune. C'est un lien rapide vers l'extérieur de la maison. Sinon double-cliquez sur MixwaterMillExterior dans la liste des cellules dans le worldspace Tamriel).

Créons un rapide chemin de patrouille avec trois points :

  1. Placez un XMarkerHeading (vous pouvez le chercher dans la fenêtre d'objet en sélectionnant *all à la fin de la liste et en recherchant ensuite dans la case prévue à cet effet) dans la fenêtre de rendu (render window).
  2. Dupliquez-le deux autres fois avec la commande CTRL-D.
  3. Déplacez les trois marqueurs pour former un chemin correct, ensuite, liez-les grâce aux "linked references" dans l'onglet approprié.

Pour créer des références liées : 1. Double-cliquez sur le premier marqueur et ouvrez l'onglet "Linked Ref". 2. Double-cliquez sur la zone blanche vide et une boite de dialogue "Choose Reference" va apparaitre. 3. Cliquez sur "Select Reference in Render Window" et double-cliquez sur le deuxième marqueur. Ouvrez ensuite la fenêtre du deuxième marqueur et faites la même chose avec le troisième marqueur.

Une ligne doit maintenant relier les trois points comme ça :

Package Tutorial NewPackage3.jpg

Maintenant, dans la fenêtre des packages, sélectionnez "Patrol Start" et cliquez sur le bouton à droite (ça devrait dire "Linked Ref". Cela vous autorisera à sélectionner les données pour le départ de la patrouille : sélectionnez le bouton "Specific Reference" et sélectionnez un de vos points de patrouille (n'importe lequel puisqu'ils sont liés ensemble).

Package Tutorial NewPackage4.jpg

La deuxième chose que l'on voulait faire était de définir quand Bendu doit utiliser ce package (sinon Bendu ne ferait que ça si l'on placerait le package dans sa liste). Passez dans l'onglet Schedule dans la fenêtre des packages et disons que notre Bendu devra se promener dehors le matin entre 10h et midi :

Package Tutorial NewPackage5.jpg

La dernière chose à faire est de donner un nom à ce package, nommons-le GSQBenduPatrol10x2, en gardant les règles de nomination. Appuyez sur OK puis fermer la fenêtre. Nous voilà avec un nouveau package !

Maintenant que l'on a crée notre package, il reste à l'ajouter à la liste de package de Bendu pour lui faire changer son comportement. Trouvez notre nouveau package dans la section Package de la fenêtre d'objet (Object Window) et placez-le dans la liste de Bendu (AI Package List).

Par défaut, tous les nouveaux packages sont placés à la fin de la liste, mais nous voulons que ce nouveau soit tout en haut (ou au moins au dessus le package DefaultSandboxHomeowner, sinon le package ne sera jamais utilisé puisque le DefaultSandBox est toujours valide rappelez-vous). Utilisez les flèches << et >> pour bouger le package tout en haut de la liste :

Package Tutorial NewPackage6.jpg

Appuyez sur OK et fermez la fenêtre de Bendu puis sauvegardez votre mod. Chargez le jeu pour voir notre Bendu faire sa petite promenade :

coc MixwaterMillExterior
set gamehour to 10

Et voilà ! Maintenant vous savez comme créer un package existant ou en créer un nouveau. La plupart du temps, les Package Templates vous donnera toutes les fonctionnalités que vous voulez. Mais si vous désirez un comportement spécial, vous pouvez créer votre propre Package template.