Creation Kit : Alias

De Wiwiki
Révision datée du 18 août 2013 à 22:23 par Thunderan (discussion | contributions) (Page créée avec « =Résumé= Ce chapitre va vous apprendre à utiliser plus profondément les alias, vous montrant toutes les fonctionnalités et les usages de cette importante structure. Vou... »)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à la navigation Aller à la recherche

Résumé

Ce chapitre va vous apprendre à utiliser plus profondément les alias, vous montrant toutes les fonctionnalités et les usages de cette importante structure.

Vous apprendrez :

  • Comment utiliser les alias conditionnels
  • Comment organiser la structure des quêtes avec les alias


Mal faire les choses

Jusqu'ici, nous avons mal fait les choses.

Bon, pas complètement, juste assez pour éparpiller notre structure dans tout le fichier : cela rend assez difficile la recherche de problèmes.

Voyons cela : Bendu a pour l'instant un script attaché à lui qui place l'étape (stage) de la quête GSQ01 à 200 s'il meurt. Cela fonctionne assez bien dans notre cas mais imaginez que nous n'ayons pas crée Bendu juste pour notre quête. Si une autre quête veut l'utiliser, le programmeur devra certainement modifier notre script ou en ajoutant un autre. Si c'était un PNJ "normal" du jeu, il n'aurait pas non plus le "GSQ" à son nom, ce qui veut dire plus de difficultés pour savoir d'"où vient le script qui plante ma quête GSQ ?".

Le même problème s'applique à l'amulette et au voleur. Notre mod fonctionne bien, mais ne serait-il pas mieux d'avoir tout ce dont notre quête à besoin au même endroit ? Et bien on peut avoir ça avec les alias !

Les alias comme couverture

La meilleure façon d'aborder les alias est de les voir comme des rôles, définis pour le besoin spécifique d'une quête donnée. Les personnages et objets prennent ces rôles pendant la durée de la quête et les abandonnent une fois celle-ci finie. Cela permet d'avoir un mod plus propre et de libérer de la mémoire.


Ouvrez la fenêtre de Bendu (GSQBenduOlo). Après avoir effectué les dernières finitions, il a soit un script qui permet de gérer sa mort, soit il a été marqué comme "essentiel". Les deux options sont très liées à notre quête. Posez-vous la question : si notre quête GSQ01 n'existait pas, y aurait-il une raison pour eux d'être là ? Puisque la réponse est non, enlevez-les donc de notre objet de base : décocher la case "Essential" et utilisez le bouton "remove" sur le script pour le supprimer.

Maintenant ouvrez l'alias de Bendu. La grande majorité de la fenêtre d'alias a été ignorée jusqu'ici, on va donc s'y attarder un peu mais n'ayez crainte.


FilledFirstAliasWindow.png


Donc, jetons un oeil là-dedans. On peut y voir plusieurs éléments familiers. On y trouve ainsi une partie pour les scripts, pour des listes de "packages", un inventaire, etc. Ces espaces s'utilisent comme ceux présents dans les objets de base, ceux-ci prenant les données (qui remplacent les leurs) qui s'y trouvent lorsqu'ils deviennent des alias. Plus important encore, quand une quête se termine, tous les alias sont supprimés, les objets reprenant leurs caractéristiques originelles.

Ceci est le plus important à comprendre : Un acteur ne prend les caractéristiques de son alias tant qu'une quête est en cours et que cet alias lui est attaché. Une fois la quête accomplie, l'acteur enlèvera son alias comme s'il enlevait un manteau. Il est aussi possible d'enlever un alias d'un acteur alors que la quête est toujours en cours.

Tout ceci a plusieurs avantages :

  • Nos scripts peuvent être spécialement fait pour notre quête, les rendant plus simples et plus facile à débugger.
  • On peut créer des packages spéciaux pour notre quête qui ne changera le comportement d'un acteur que pendant la quête (les packages des alias se plaçant automatiquement en haut de la liste de package de son acteur).
  • On peut appliquer des sorts et faire intégrer des factions seulement le temps d'une quête, ce qui a des effets importants sur le comportement de notre acteur, surtout en combat.
  • Si la quête change et qu'on décide d'utiliser un personnage différent, il suffit de changer la cible de l'alias et tout fonctionnera. C'est assez plaisant !

Pour rendre le changement de cible plus facile, il est de bonne habitude d'utiliser les GetIsAliasRef au lieu des GetIsId dans les conditions de dialogue. Dans ce cas, il faudra reprendre tous les dialogues et remplacer les "GetIsID GSQBenduOlo == 1" par des "GetIsAliasRef Bendu == 1".

La seule exception avec ce concept de rôle/couverture est l'inventaire : tous les objets placés dans l'inventaire d'un acteur restera même lorsqu'il n'aura plus d'alias (il reste bien sûr possible d'utiliser un script pour enlever un objet si besoin mais attention aux possibles conséquences).

ATTENTION : pour beaucoup d'ordinateurs, la fenêtre des "Reference Alias" est trop grande, empêchant d'atteindre le bouton OK en bas. Pour résoudre ce problème, il suffit de cliquez sur le texte de la case "Alias Name" puis d'appuyez sur la touche ENTRER de votre clavier. Cela sauvegardera les données de la fenêtre.

Corriger Bendu

Assez de discours, corrigeons donc l'alias de Bendu afin que ses caractéristiques liées à la quête y soit placées. Comme précédemment, deux options :

Bendu l'Immortel

Il suffit simplement de cliquez sur la case "Essential" en haut de la fenêtre d'alias, et Bendu ne pourra être tué tant qu'il a cet alias. Une fois la quête terminée, il redeviendra un mortel comme les autres.

Gérer sa mort

On peut aussi attacher un script à son alias pour gérer la mort de Bendu, comme nous l'avions fait pour l'objet de base. Le seul changement se fait sur la première ligne du script pour qu'il soit attaché à une référence d'alias "ReferenceAlias" plutôt qu'à l'acteur lui-même. Le script s’appellera "GSQQuestgiver" et devra ressembler à ça :

Scriptname GSQQuestgiver extends ReferenceAlias

Event OnDeath(Actor akKiller) if (!GetOwningQuest().IsCompleted()) GetOwningQuest().SetStage(200) endif EndEvent


Notez que nous n'avons pas besoin de définir la quête comme propriété puisque chaque Alias sait à quelle quête il appartient. On peut donc y accéder avec la fonction GetOwningQuest().

Désormais, modifier une étape de quête lorsqu'un personnage meurt devient d'une simplicité sans nom, plus besoin d'un script spécial pour ça. Quand vous cliquez sur "Add" pour ajouter un script à l'alias, cherchez ceux qui commencent par "default" (ce sont ceux donnés pour les tâches de base). Leurs noms sont généralement assez descriptifs et il est facile de deviner à quoi ils servent. Dans notre cas, nous avons besoin de "defaultSetStageOnDeathRefAlias". Il suffit ensuite de mettre les propriétés suivantes :

  • myQST: GSQ01
  • preReqStage: <leave blank>
  • StageToSet: 200

En utilisant des scripts "default", on peut réduire le nombre de scripts dans le jeu, ce qui permet de libérer de la mémoire. Mais puisque vous modder pour un PC qui a pas mal de mémoire, ce n'est pas la première des priorités).

Changer de nom

Un dernier mot : vous pouvez même changer le nom d'une référence lorsqu'elle a un alias, faisant que le joueur puisse voir différents textes lorsqu'il passera dessus. Vous pouvez définir le Message avec le texte de votre choix puis sélectionnez-le depuis la case "Display Name" en haut de la fenêtre d'alias.

AliasDisplayName.png

Par défaut, une fois placé un nouveau nom sur une référence, il le gardera même une fois la quête terminée. C'est pour éviter que le joueur qui revient dans un donjon terminé ne voit de nouveaux noms sur les cadavres jonchant le sol. On peut empêcher cela avec la case "Clears Name When Removed" en haut à droite.

Packages

La liste des packages pour un alias sera placé en haut de la liste normale d'un acteur, la remplaçant.