Tutorial de construction de module Chapitre 9: Scripts

Introduction

Le langage NWScript est très puissant, et vous permet de réaliser des choses vraiment étonnantes. Le jeu tente d'exécuter un script sur une instance d'un object à chaque fois qu'un Event (évènement) particulier a lieu. Les instances de chaque type d'object du jeu ont une série d'events auxquels peuvent être attachés des scripts. De plus, chaque area et le module lui même ont des events particuliers. Il n'est pas nécessaire qu'un script soit attaché à chaque event du jeu. Le but de ce chapitre est d'introduire les bases du langage NWScript et du Script Editor du Toolset.

Objectifs

Attachez une script personnalisé à l'even onAcquireItem (A l'Acquisition d'un Item) qui mettra à jour le journal d'un joueur lorsque celui-ci ramasse l'anneau de Jacen.

Tutorial

OnAcquireItem Script

1. Démarrez le Toolset et chargez le module "tutorial".

2. Sélectionnez 'Module Properties' dans le menu 'Edit' pour ouvrir le menu de propriétés du module.

3. Cliquez sur le bouton 'Edit' de la ligne 'OnAcquireItem' dans l'onglet 'Event' pour ouvrir le Script Editor avec un nouveau script.

4. Remplacez le contenu original du script par le texte suivant:


void main()
{
// déclaration des variables
object oPC; // le PC qui acquiert l'item
object oItem; // l'item qui a été acquis
// récupérer l'item qui a été acquis
oItem = GetModuleItemAcquired();
// si cet item est un objet valide
if (GetIsObjectValid(oItem) == TRUE)
{
// si le tag de l'item valide est "it_RingJacen"
if (GetTag(oItem) == "it_RingJacen")
{
// récupérer le PC qui a acquis l'item
oPC = GetItemPossessor(oItem);
// amener le journal avec le tag "jt_Falstadd" à sa seconde entrée pour ce PC
AddJournalQuestEntry("jt_Falstadd", 2, oPC);
} // si
} // si
}

5. Enregistrez le script sous le nom 'me_acquireitem' et fermez le Script Editor.
Note: Un avertissement devrait apparaître, disant que les scripts doivent être compilés avec qu'il fonctionnent dans le jeu. A mois que cette option ne soit désactivée (ce qui est déconseillé), le Script Editor compilera automatiquement chaque script modifié.

6. Cliquez sur 'OK' pour fermer le menu de propriétés du module.

Un Script "Action Taken" Personnalisé

1. Ouvrez la conversation de Falstadd en sélectionnant 'Edit' dans son menu contextuel.

2. Sélectionnez le noeud 3 ("Je vous remercie..."). Dans l'onglet 'Action Taken', cliquez sur le bouton du ScrptWizard.

3. Cochez la case 'Give Rewards' (Récompenser) et cliquez sur 'Next'.

4. Tapez '2000' (basé sur la valeur entrée dans le Journal Editor pour cette quête) dans le champ 'Give XP' (Donner des XP), cochez la case 'Give To Party' (Donner à tout le groupe) située en-dessous et cliquez sur 'Next'.

5. Nommez le script 'at_falstadd03', cochez la case 'Start the Script Editor' (Ouvrir le Script Editor) et cliquez sur 'Finish'.

6. Une fois le Script Editor ouvert, le script devrait ressembler à cela:


void main()
{
// Donner des XP au joueur qui parle
GiveXPToCreature(GetPCSpeaker(), 2000);
}

7. Le seul problème avec ceci est que lorsque la montant de la récompense spécifié pour cette quête dans le Journal Editor change, ce script doit être changé et recompilé aussi. Une meilleure façon de procéder serait de déterminer le montant d'expérience actuellement assigné à la catégorie du journal lorsque le module est joué et utilisé ce dernier à la place. Ceci nécessite d'écrire un script qui ressemble à ceci.


void main()
{
// déclaration des variables
int iXP;
// Déterminer à combien d'XP s'élève la récompense de cette quête
iXP = GetJournalQuestExperience("jt_Falstadd");
// give the speaker some XP
GiveXPToCreature(GetPCSpeaker(), iXP);
}

8. Après que le script ait été modifié, sauvegardez le, fermez le Script Editor, sauvegardez la conversation et fermez le Conversation Editor.

Sauvegardez le module, fermez le Toolset et essayez de tester le module du début à la fin.

Pour aller plus loin

Créez une conversation pour les mineurs. Le mineur à qui parle le PC devrait être reconnaissant pour avoir été secouru, et le PC devrait leur dire de quitter la mine immédiatement. Le PC devra être récompensé de 50XP et le mineur devrait alors se dirigeait vers la sortie et retourner à Fern. Si le PC parle à nouveau au mineur, ce dernier devrait le remercier à nouveau mais sans réaliser d'actions supplémentaires (pas de récompense en XP, ni de déplacements).

Ceci devrait être possible en créant trois scripts, dont 2 avec le Script Wizard (ne requérant que de légères modifications) et un fait "à la main". D'abord créez la conversation. Elle sera similaire à celle de Falstadd, dans le sens où la première fois qu'un PC lui parle, il dira une chose, puis lors des tentatives suivantes, il devra dire autre chose.

Les deux scripts qui contrôlent ce que le mineur dit devrait définir et vérifier une variable local du mineur. Ces scripts devraient être créés avec le Script Wizard, comme dans le chapitre 6 et modifiés de façon à utiliser la constante OBJECT_SELF à la place de la fonction GetPCSpeaker(). OBJECT_SELF renvoie simplement l'object qui exécute le script, dans ce cas le mineur. Ceci permet au PC de secourir plusieurs mineurs et de recevoir une récompense pour chaque. Si la variable était placée sur le PC, seul un mineur pourrait être secouru puisque la vérification sur les mineurs suivants indiquerait que le PC leur aurait déjà parlé.

Le troisième script devrait être lancé depuis une 'Action Taken' d'un nœud de conversation qui est uniquement accessible la première fois que le PC parle avec le mineur. Ce script devrait récompenser le PC de 50XP et ensuite faire que le mineur se déplace vers la sortie, puis vers la ville. La façon la plus simple pour déplacer une créature et de la faire se déplacer vers une Location ou un Object. Utilisez les fonctions GetObjectByTag, AssignCommand et ActionMoveToObject pour faire courir le mineur vers Falstadd.

N'oubliez pas d'utiliser OBJECT_SELF comme il faut et d'assigner la conversation au blueprint de mineur.

Et maintenant ?

Vous pouvez vérifier régulièrement http://nwn.bioware.com/builders pour plus d'informations sur la création d'aventures.

__________________
Kemay
Cinq personnes sur quatre ont des problèmes avec les fractions.