Creation Kit : Packages

De Wiwiki
Révision datée du 17 août 2013 à 15:33 par Thunderan (discussion | contributions) (Page créée avec « {{Lien retour | page= Tutoriels}} Tutoriel traduit du wiki officiel: [http://www.creationkit.com/Bethesda_Tutorial_Packages Original] =Résum... »)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à la navigation Aller à la recherche


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

We've seen how to use existing "default" packages to build a schedule. What about making a new package specifically for Bendu? Let's say we want him to patrol the exterior around his house at a specific time during the day.

First, make a new package by right-clicking on the Package list and selecting "New". You'll get a blank package window that looks like this:

Package Tutorial NewPackage1.jpg

By default, the Travel template is selected - but we want to make a Patrol, so change the dropdown to Patrol. Note that the list of Package Data changes - the Patrol template requires different data than the Travel template. Now we have a blank Patrol package, ready to fill in some data for the specific package for Bendu:

Package Tutorial NewPackage2.jpg

The Patrol procedure page has the details for the data on this package. For now, the only things we need to specify on this package are:

  • Patrol Start - where should Bendu start his patrol route?
  • Schedule - what time of day should he run this package?

We haven't yet made a patrol route for Bendu, so let's load up the exterior and set up a simple one for him. (If you have the interior loaded, double-clicking on the yellow door marker is a quick way to get to the exterior; otherwise double-click on MixwaterMillExterior in the cell list for the Tamriel worldspace.)

If you're not familiar with linked references, the Encounters Tutorial is a good place to start. For now, let's just create a quick 3-point patrol route:

  1. Drop an XMarkerHeading into the render window.
  2. Duplicate it twice with CTRL-D.
  3. Move the 3 markers into a nice patrol route, then link them together using the Linked Ref tab on each reference.

You should end up with something looking like this (the exact locations of the patrol markers doesn't matter):

Package Tutorial NewPackage3.jpg

Now, in the package window, select Patrol Start and click the button on the right (it will initially say "Linked Ref". This will allow you to select the data for the Patrol Start - select the "Specific Reference" radio button and select one of your new patrol points (it doesn't matter which since they are all linked together in a circle).

Package Tutorial NewPackage4.jpg

The second thing we wanted to do was specify when Bendu should run this package (otherwise this will be the only thing he does when we put it on his package stack). Switch to the Schedule tab in the package window, and let's say he should walk around outside during the morning between 10am and 12pm:

Package Tutorial NewPackage5.jpg

The only thing left to do is give the package a name - let's say GSQBenduPatrol10x2, keeping with the standard naming conventions. Hit OK to close the window and we're done making a new package.

Now that we've made the new package, we have to add it to Bendu's package list in order to actually change his behavior. Find the new package in the Package section of the Object window, and drag it into Bendu's AI Package List. By default, all new packages are placed at the bottom of the actor's package list, but we want this new package to go to the top (or at least above the DefaultSandboxHomeowner package - otherwise it will never run because the DefaultSandboxHomeowner package is always valid). Use the << arrow key to move it to the top of Bendu's stack:

Package Tutorial NewPackage6.jpg

Hit OK to close Bendu's actor window and save your plugin. Go into the game to see Bendu do his new patrol:

coc MixwaterMillExterior
set gamehour to 10

That's it - you now know how to set up an actor's packages using existing or new packages. Most of the time, the premade Package Templates will provide all the functionality you need. But, if you find you need even more specialized behavior, you can even build your own Package Template.