Tutoriel de Bethesda : Introduction aux Propriétés et Fonctions de Papyrus/fr
Tutoriel de Bethesda : Introduction aux Propriétés et Fonctions de Papyrus
Tutoriel de Bethesda : Introduction aux Propriétés et Fonctions de Papyrus/fr | |
---|---|
Série : Tutoriels sur Papyrus, page 3 | |
Sommaire du tutoriel | |
Tutoriel précédent | Tutoriel suivant |
Présentation[edit | edit source]
Pour ce tutoriel nous partirons du principe que vous avez terminé les tutoriels "Hello World" et "Variables et conditions". Ce tutoriel sera plus long que les deux précédents et vous initiera à des sujets plus pointus. Courage !
Vous apprendrez :
- davantage de choses sur les sujets non développés dans les précédents tutoriels :
- La première ligne d'un script, et ce que signifie "étendre" un script.
- Comment ajouter des infobulles dans votre script en utilisant les accolades {}.
- Comment utiliser des propriétés et les rattacher à des objets dans l'éditeur.
- Comment créer et utiliser une fonction.
Première ligne[edit | edit source]
Avant d'aller plus loin, jetons un oeil à des choses que nous avions laissées de côté précédemment.
Regardez en haut de votre script, vous verrez cette première ligne :
Scriptname HelloWorldScript extends ObjectReference
- Scriptname HelloWorldScript extends ObjectReference : "Scriptname" signifie "nom du script". La première ligne de tout script commence par cet élément.
- Scriptname HelloWorldScript extends ObjectReference : c'est ici que vous nommez votre script (dans notre cas, le script s'appelle HelloWorldScript). Ce nom sera utilisé chaque fois qu'un autre script aura besoin de s'y référer.
- Scriptname HelloWorldScript extends ObjectReference : il s'agit d'un mot spécial signifiant principalement que notre script est basé sur un autre script déjà existant.
- Scriptname HelloWorldScript extends ObjectReference : notre script "étend" ("extends" en anglais) cet autre script, ici le script "ObjectReference".
Étendre un script[edit | edit source]
En réalité tous les scripts que vous rédigez "étendent" un autre script. Lorsque vous étendez un script cela pourrait se traduire par "Mon script est le même que cet autre script, plus quelques éléments supplémentaires que je lui ai ajoutés."
Le script que vous étendez est aussi une manière de dire au jeu, "Mon script est ce type d'objet".
Par exemple, si vous ajoutez un script à un objet qui va être une référence dans le monde (comme notre pilier par exemple) votre script a besoin d'étendre le script '"ObjectReference". Si vous souhaitez ajouter un script à une quête, vous étendrez le script "Quest", et ainsi de suite.
À mesure que vous vous familiariserez avec la rédaction de scripts, vous vous familiariserez également avec le contenu des scripts que vous étendez. Pour le moment, sachez simplement que votre script doit étendre un autre script qui est basé sur le type d'objet auquel vous attachez votre script.
Ajouter des infobulles[edit | edit source]
Vous vous demandez d'où peut venir la deuxième ligne de votre script ? Celle qui ressemble à ça :
{This is my very first script!}
Lorsque vous avez créé votre nouveau script et que vous êtes entré dans le champ "documentation string", cette ligne a été créée pour vous :
Elle apparaît désormais sous forme d'infobulle lorsque vous placez votre curseur sur votre script dans l'onglet script :
Si vous souhaitez changer l'infobulle, modifiez simplement le texte entre les accolades {}.
Vous pouvez également ajouter des infobulles pour vous aider à gérer vos propriétés. Ce qui nous amène à la partie suivante de ce tutoriel :
Propriétés[edit | edit source]
La définition d'une propriété, que vous trouverez ci-dessous, est traduite à partir de la définition provenant de cipscis.com
Parce que les scripts sont extérieurs aux fichiers de données, et que le compilateur n'est pas une partie intégrante du Creation Kit, vous ne pouvez pas directement vous référer aux informations d'un fichier de données dans un script. Si vous voulez vous référer à un élément de votre fichier de données, comme un acteur particulier, alors vous aurez besoin d'utiliser un intermédiaire. Cet intermédiaire, c'est la propriété.
Une propriété permet à votre script d'utiliser une information d'un fichier de données, par l'intermédiaire d'une interface à laquelle l'un et l'autre peuvent accéder.Du point de vue de votre script, une propriété est une information arbitraire d'un certain type spécifié, comme "Actor" (acteur) ou "Quest" (quête). Du point de vue du Creation Kit, c'est un point à partir duquel des informations de ce type peuvent être insérées dans l'instance de votre script attachée à l'objet que vous modifiez.
Déclarer des propriétés est très similaire à déclarer des variables, excepté quelques trucs supplémentaires qu'il vous faudra faire, et le fait que les propriétés ne puissent pas être déclarées au sein des fonctions.
Prenons l'exemple d'une déclaration typique de propriété.
Ajoutez ceci au-dessus de la ligne "int count", dans votre script :
Message property box1 auto
{Points to the message box that is shown on the first activation.}
Message property box2 auto
{Points to the message box that is shown on the second activation.}
Message property box3 auto
{Points to the message box that is shown on the third activation.}
- Message property box1 auto : Il s'agit du type de propriété. Dans notre cas la propriété est du type "Message". (C'est semblable à la manière dont nous avons défini la variable "count" de notre script comme étant de type "int").
- Message property box1 auto : nous précisons que ce message n'est PAS une variable, mais EST une propriété.
- Message property box1 auto : nous précisons que le nom de cette propriété est "box1". (C'est semblable à la manière dont nous avons définit le nom "count" pour notre variable.
- Message property box1 auto : C'est un mot-clé spécial dont vous avez simplement à vous rappeler lorsque vous déclarez des propriétés. (Presque toutes les propriétés utiliseront le mot-clé "auto". Ne vous souciez pas du pourquoi pour le moment. Souvenez-vous simplement d'ajouter "auto" lorsque vous déclarez des propriétés).
Vous remarquerez les accolades ici {}. Elles produisent des infobulles. Jetons un oeil :
Cliquez sur "File"->"save". Fermez la fenêtre de modification du script. Puis cliquez sur le bouton "Properties" (propriétés) de la fenêtre de la référence de notre pilier. Vous devriez voir apparaître une liste de propriétés. Placez votre curseur au-dessus de leurs noms.
Créer des boîtes à message[edit | edit source]
Maintenant nous allons créer les objets Message que nous accrocherons à nos propriétés. Dans l'Object Window développez la catégorie "Miscellaneous", et cliquez sur la catégorie "Messages". Dans la liste de messages, faites un CLIC DROIT, et sélectionnez "New" (nouveau) dans le menu contextuel.
Entrez les données suivantes :
- ID (identifiant) : myMessageBox1
- Message Text (texte du message) : Hello World! This is the first time the player activated the Pillar.
Créez deux nouvelles boîtes à message avec les données suivantes :
- ID: myMessageBox2
- Message Text: This is the second time the player activated the Pillar.
- ID: myMessageBox3
- Message Text: It's been three or more times activating the Pillar.
Accrocher les boîtes à message aux propriétés dans le script[edit | edit source]
Revenez à la fenêtre des propriétés de votre script rattaché au pilier. Cliquez sur la ligne appelée "box1" puis cliquez sur le bouton "Edit Value" (modifier la valeur). Cela va créer un menu déroulant "Pick Object" (choisir un objet) à partir duquel vous allez sélectionner l'objet "myMessageBox1" que nous venons de créer. De la même manière, sélectionnez "myMessageBox2" et "myMessageBox3" respectivement pour les propriétés "box2" et "box3".
Assurez-vous d'avoir cliqué sur "OK" pour fermer la fenêtre de la référence (si vous ne procédez pas ainsi vous perdrez toutes les modifications effectuées), puis sauvegardez votre plugin.
Ce que nous venons de faire ici, c'est de créer une connexion entre nos propriétés (box1, box2, et box3) et trois objets message dans l'éditeur (myMessageBox1, myMessageBox2, et myMessageBox3).
Après confirmation que chacune des trois boîtes à messages a été accrochée à la propriété correspondante, nous sommes près à continuer la rédaction de notre script.
Appeler des fonctions sur des Propriétés[edit | edit source]
Maintenant faisons en sorte que ces boîtes à message apparaissent dans le jeu.
Ouvrez la fenêtre de modification du script, et REMPLACEZ ces lignes :
if count == 1
Debug.MessageBox("Hello, World!")
elseif count == 2
Debug.MessageBox("Hello, World. Again!")
else
Debug.MessageBox("Hello, World. Enough already!")
endif
PAR CES lignes :
if count == 1
box1.Show()
elseif count == 2
box2.Show()
else
box3.Show()
endif
Ce que nous faisons ici, c'est appeler la fonction "Show()" (montrer) sur chacun des objets accrochés aux propriétés box1, box2, et box3. Le point (.) signifie que la fonction à droite ("Show()") doit être appelée sur l'objet de gauche (le message lié à la propriété "box1").
sauvegardez le script, cliquez sur OK pour refermer la fenêtre de modification de la référence, puis sauvegardez votre plugin. Lancez le jeu ! (COC MolagBalVoiceCell)
Vous devriez voir apparaître le texte de chaque message chaque fois que vous activez le pilier.
(Si l'alerte "cannot call show() on a none objet" s'affiche, revenez à votre script et assurez-vous que vos propriétés sont correctement accrochées aux objets message, que vous avez cliqué sur OK à chaque formulaire ouvert, et que vous avez sauvegardé votre plugin. Puis réessayez.)
Bien, à présent créons une fonction !
Créer une Fonction[edit | edit source]
De la même manière que nous avons appelé la fonction "MessageBox()" sur "Debug", puis la fonction "Show()" sur les messages accrochés à nos propriétés, nous pouvons également appeler une fonction que nous avons créée dans notre propre script. Commençons par créer une nouvelle fonction.
Ajoutez ceci au bas de votre script :
Message function GetMessage(int currentCount)
Message chosenMessage
if currentCount == 1
chosenMessage = box1
elseif currentCount == 2
chosenMessage = box2
else
chosenMessage = box3
endif
Return chosenMessage
endFunction
Décomposons la première ligne :
- Message function GetMessage(int currentCount) : ici nous déclarons que la fonction nous retournera un objet de type Message.
- Message function GetMessage(int currentCount) : nous précisons ici qu'il s'agit d'une fonction, de la même manière que nous avions procédé précédemment pour les propriétés.
- Message function GetMessage(int currentCount) : C'est le nom de notre fonction. C'est ce qui nous permettra de "l'appeler" depuis notre script.
- Message function GetMessage(int currentCount) : Entre les parenthèses se trouvent les "arguments" qu'il nous faudra donner à notre fonction au moment de l'appeler. Ici nous aurons besoin de lui fournir un nombre entier ("integer" en anglais). Nous appelons notre argument "currentCount" (compte actuel). Nous utiliserons ce nom pour représenter, au sein de la fonction, la valeur qui sera traitée par la fonction lorsque nous l'appellerons.
Décomposons la ligne suivante :
- Message chosenMessage : ici nous déclarons une variable, de type "Message" (De la même manière que nous avions déclaré notre variable "count" comme étant de type "int", nous pouvons créer une variable à partir de n'importe quel objet. Ici c'est un objet "Message").
- Message chosenMessage : nous nommons notre variable "chosenMessage".
Dans la partie suivante, nous faisons en sorte que la variable "chosenMessage" prenne la valeur d'un des objets Message contenus dans les propriétés box1, box2, ou box3 (encore une fois, notez la différence entre "==" et "=").
Finallement il nous reste :
Return chosenMessage
Cela signifie que lorsque nous appelons la fonction "GetMessage()", celle-ci nous retourne l'objet "Message" qui se trouve actuellement dans la variable "chosenMessage".
Et maintenant modifions le script pour utiliser notre fonction.
REMPLACEZ ces lignes :
if count == 1
box1.Show()
elseif count == 2
box2.Show()
else
box3.Show()
endif
PAR CETTE ligne :
GetMessage(count).Show()
Dans cette ligne, nous appelons la fonction GetMessage() pour traiter la variable "count" comme paramétré. Parce que GetMessage(count) va nous retourner un Message, nous pouvons appeler la fonction Show() sur elle afin de permettre l'affichage du Message dans le jeu.
Votre script devrait maintenant ressembler à ça :
Scriptname HelloWorldScript extends ObjectReference
{This is my very first script!}
Message property box1 auto
{Points to the message box that is shown on the first activation.}
Message property box2 auto
{Points to the message box that is shown on the second activation.}
Message property box3 auto
{Points to the message box that is shown on the third activation.}
int count ;stores the number of times this object has been activated
Event OnActivate(ObjectReference akActionRef)
count = count + 1
GetMessage(count).Show()
endEvent
Message function GetMessage(int currentCount)
Message chosenMessage
if currentCount == 1
chosenMessage = box1
elseif currentCount == 2
chosenMessage = box2
else
chosenMessage = box3
endif
Return chosenMessage
endFunction
Une fois dans le jeu, nous verrons apparaître les boîtes à message correctement. (COC MolagBalVoiceCell)
Et ensuite[edit | edit source]
C'est la fin des tutoriels de base. Le prochain vous expliquera comment créer un boss spécial capable de ressuciter les morts !
Tutoriel précédent | Sommaire du tutoriel | Tutoriel suivant |
Langues : | English • français • 日本語 • 한국어 • polski |
---|