Creation Kit : Scripter

De Wiwiki
Révision datée du 13 mars 2012 à 08:17 par Jupotter (discussion | contributions) (Fin de la traduction)
Aller à la navigation Aller à la recherche



Tutoriel traduit du wiki officiel: Original

Résumé

Ce tutoriel va vous montrer comment utiliser les scripts pour faire avancer la quête suivant les actions du joueur. On a déjà vu comment scripter un dialogue, mais ici, nous allons voir comment attacher n'importe quel script a un acteur ou a un objet.

Vous allez apprendre:

  • Les généralités sur le fonctionnement des scripts et comment ils s'attachent aux objets dans le Creation Engine.
  • Comment répondre a un évènement dans le nouveau langage de scripts.


Papyrus

Le langage de scripts utilisé par le Creation Kit est appelé Papyrus (d'après ce qui compose les parchemins). Les scripts Papyrus sont de simple fichier texte qui sont compilés en bytecode que le jeu exécute au runtime.

CKNewFeature.jpg Le nouveau système est similaire au TESScript, mais requière une manière de penser légèrement différente. Vous ne pouvez plus directement manipuler les objets dans le mode; il y a maintenant des thread, votre script peut alors être interrompus en fonctionnement; il est beaucoup plus script en ce qui concerne la syntaxe (e.g. parenthèses). Pour faire court, il est beaucoup plus proche de "vrais" langages de programmation comme le Lua ou Python. Si vous êtes familier avec le TESScript, vous devriez jeter un œil a notre guide de transition.

La première chose que nous allons faire est ajouter un script sur notre voleur afin que lorsqu'il est tuée, la quête progresse.

Ajouter des Scripts

Ouvrez l'acteur GSQThief que nous avons créé. Nous allons nous intéresser a la section "Papyrus Scripts" de la fenêtre.

CKActorWindowScriptsArea.png

Cliquez sur le bouton "Add". Cela va ouvrir une liste de scripts que nous pouvons potentiellement ajouter a cet acteur. Mais nous sommes en trains d'en créer en nouveau, double-cliquez donc sur "[New Script]" en haut de la liste.

CKAddScriptWindow.png

Cela ouvrira encore une fenêtre, où nous pouvons nommer notre script. Mettez donc "GSQThiefScript" puis appuyez sur OK.

CKAddNewScriptWindow.png

Votre script est maintenant ajouté a l'acteur. Mais, comme on peut s'y attendre, il ne fait encore rien.

CKScriptAdded.png

Propriétés

Double cliquez sur le script pour ouvrir la fenêtre des propriétés de ce script. De base, les scripts ne savent rien a propos des objets du jeu autre que celui auquel ils sont attachés. Nous utilisons les propriétés afin d'attaches des objets ensemble pour qu'ils puissent s'affecter les un les autres. Dans notre exemple, nous voulons passer GSQ01 à l'étape 20 lorsque le voleur est tué, il faut donc que le script sache quelle quête nous intéresse.

CKEmptyPropertiesWindow.png

Appuyez sur "Add Property" en bas à gauche de la fenêtre. C'est ici que nous allons créer la propriété. Dans le champ Type, sois choisissez "Quest" dans le menu, sois tapez le mot "Quest". Mettez "TutorialQuest" dans le champ Name, et laissez le reste vide.

CKAddScriptPropertyWindow.png

Nous avons maintenant dit au script que il doit utiliser quelque chose qui s’appelle "TutorialQuest", mais il ne sait pas de quelle quête il s'agit. Cliquez sur la propriété que nous venons de créer dans la liste, et cliquez sur "Edit Value" a droit de la fenêtre. Un nouveau menu va apparaitre, listant toute les quêtes du jeu. Choisissez "GSQ01" dans le menu, et appuyez sur OK.

CKPropertyWindowFilled.png

Écrire le script

Maintenant que nous avons ajouté cette propriété, nous devons ajouter le script en lui même pour en faire quelque chose!, Faites un clic droit sur le nom du script et sélectionnez "Edit source" pour ouvrir l'éditeur de script.

CKScriptWindowWithPropertyAdded.png

La première ligne (Scriptname GSQThiefScript extends ObjectReference) est la base que l'éditeur a fait pour nous quand nous avons crée le script. Quelque lignes en dessous se trouve la version textuelle de la propriété que nous avons fait.

À la fin du texte, copiez et collez ce morceau de code:

Event OnDeath(Actor killer)
	TutorialQuest.SetStage(20)
EndEvent

SI vous êtes suffisamment connaisseur en programmation ou en scripting pour comprendre ce que vous venez de coller, vous pouvez directement aller à la section "Scripter l'Amulette". Pour tous les autre, nous allons voir ça lige par ligne.

  • Event OnDeath(Actor killer)
    • This ligne déclare que le script va répondre a la mort de l'acteur. Quand l'acteur meurt, le jeu va commencer a exécuter le code a partir de ce point. Le jeu va placer celui qui a tué l'acteur dans la variable "killer", mais nous n'en avons pas besoins ici.
  • TutorialQuest.SetStage(20)
    • Tout comme nous avons appelé SetStage sur la quête possédant le dialogue auparavant, nous mettons ici la quête que nous avons mit dans la propriété TutoriaQuest à l'étape 20.
    • Nous indentons pour une question de lidibilité.
  • EndEvent
    • Cela marque la fin de notre réaction a l’événement de mort.

Sélectionnez "Save" dans le menu "File" (ou faites Ctrl-S) et l'éditeur va tenter de compiler votre script. Une fenêtre de sortie vas apparaitre -- si votre script est syntaxiquement correct, elle ressemblera a ça:

CKCompilerOutputGood.png

Si vous voyez autre chose, vous avez fait une erreur en copiant. Réessayez!

Une fois finis, fermez la fenêtre de script et la fenêtre d'acteur, et sauvez votre plugin. Maintenant, nous allons scripter l'amulette elle même.

Scripter l'Amulette

Ouvrez l'objet GSQAmulet que nous avons crée dans le tutoriel précedent. Dans la fenêtre d armure, la zone de script est toute a droite.

CKArmorWindowScriptArea.png

Créez un nouveau script comme nous l'avons fait auparavant, et appelez le GSQAmuletScript. Ajoutez lui une propriété de Quête. Pour simplifier les choses, appelez la directement "GSQ01" au lieux de TutorialQuest.

CKAutofilledProperty.png

Il va remplir automatiquement la propriété pour vous, puisque la propriété a un nom qui correspond a un ID existant. Si vous utilisez beaucoup de propriétés, cela permet de gagner du temps.

Ouvrez le script, nous allons y ajouter quelques évènement. L'amulette ne peut évidemment pas mourir, mais nous voulons savoir quand est-ce que le joueur la prend. Notre évènement devrais ressembler a ceci:

Event OnContainerChanged(ObjectReference newContainer, ObjectReference oldContainer)
	if (newContainer == Game.GetPlayer())
		GSQ01.SetStage(30)
	endif
EndEvent

Il y a certaines choses a noter dans ce script:

  • Les paramètres dans la déclaration (newContainer and oldContainer) seront automatiquement remplis par le jeu quant il demandera au script de gérer l'évènement.
  • Comme l'évènement OnContainerChanged est lancé a chaque fois que l'objet change de main, nous devons être sur de ne changer le stage que quand le joueur le prend, d'où le block if/endif.
  • Game.GetPlayer() est un moyen simple d'avoir la référence du joueur sans avoir besoins de créer une propriété, et newContainer est remplis par le moteur lorsque l'évènement est lancé. On peut donc facilement comparer pour voir si l'objet est bien pris par le joueur.
  • Comme le script est actuellement, SetStage est appelé a chaque fois que le joueur prend l'amulette. Ce n'est pas un problème, car chaque étape de quête ne peut se passer que une seule fois --- Appeler SetStage(30) n'a aucun effet après la première fois.

Le script est maintenant près. Fermez le script est la fenêtre de l'amulette, et sauvegardez votre plugin.

Vous pouvez maintenant tester votre quête du début a la fin, en utilisant la console et SQV (SQV GSQ001) pour voir l'étape changer.

Mais les joueurs ne vont pas utiliser la console, nous allons donc apprendre a leur donner de meilleurs indications de leur progrès dans le prochain chapitre.

CKProtip.jpg Les scripts dans Skyrim sont de simple fichier texte dans votre dossier Data avant d'être compilés en bytecode. Cela signifie que si vous avez un éditeur de texte favoris, vous pouvez l'utiliser pour scripter. Le wiki officiel possède quelques exemples de configuration qui permet la coloration syntaxique, une autocompletion basique et des raccourcis de compilation. Si vous allez scripter intensément, ces outils peuvent vraiment vous simplifier la vie.