?
| Nos forums | NwN2.fr | Lyncya | Notre channel IRC |
La Bibliothéque de Neverwinter Nights
La Bibliothéque de Neverwinter Nights
 
 
 
 
 
Bienvenue, connectez vous ou créez votre compte. Changer d'interface
 
Se connecter:
Login:

Password:


 
Neverwinter Nights 2
  Compendium NWN/NWN2
Classe, Warlock
Classes de Base
Classes de Prestige
Forum Joueur NWN2
Forum Concepteur NWN2
Bestiaire (Créatures)
Races
Tests
 - Collector Chaotique Mauvais (bbnwn, 4 nov 2006)
 - Mask of the Betrayer
 - Storm of Zehir
 - Mysteries of Westgate
Mondes
 - Les Artisans du Mitan
 - Les Légendes de Luiren
 - LanceDragon
 - La Bataille pour Cormanthor
 - Man O'War
 - Sendarie Nouvel Âge
Preview
 - 29 Mars 2006 (BBNWN)
 - 2 mai 2006 (Gamespot)
 - 17 Mai 2006 (WarCry)
 - 19 Mai 2006 (NWVault)
 - Designer Diary #1 (Gamespot, 1er Juin 2006)
Interview
 - Dorian Richard (20/02/2006)
 - Ferret Baudoin (22/02/2006)
 - Feargus Urquhart (2 mai 2006)
 - La Lettre Ouverte de Papermonk
 - Chris Avellone (Total Video Games)
Logs IRC
 - Warcry (27/01/2006)
 - NWVault / NWC (3 Juin 2006)
 - NWN2News.net (30 Juin 2006)
Faciliter la diffusion et l'installation de vos créations

 
Communauté
  Forums
Channel #nwnights-fr
Guide IRC
Liens
CEP

 
Fichier
  Tileset
Module
Hakpak
Objets
Portraits
Créatures
Scripts
Tutoriaux
Autres
Wallpapers

 
Editeur
  Tutorial Editeur
Cinématiques
Musiques
Textures
Tutoriaux NWScripts
Scripts

 
Le jeu
  Solution
Sorts
Classes
Dons (feat)
Aptitudes (skill)
Bestiaire
Règles 3e Edition
Jouer en multiplayer

 
Hordes of the Underdark
  Informations Générales
Solution [forum]

 
Shadows of Undrentide
  Preview
Informations générales
Classes de Prestige
'Lisez Moi.txt' de la Démo
FAQ
Nouveaux tilesets
Solution [forum]

 
Divers
  Traductions Logs Irc
Guides divers

 
Présentation
  Généralités
Configuration minimale
Serveur Dédié
Traduction FAQ
Historique (nwn et bioware)
Contrats de Bioware (vf)

 
Site
  Copyrights
Webmasters

 
     
 
Dîtes non aux inutiles protections contre la copie dans les jeux (SecuROM, StarForce, etc) !!
HADOPI - Le Net en France : black-out

11. Vos premiers dialogues, et première approche des NWScripts

Pour notre essai, nous avons mis qu'un objet que notre marchand vendra à l'infini. Pour le moment, ce marchand ne peut rien vendre : pour cela, il faut voir du côté des conversations.

Sélectionnez notre pingouin et dans ses propriétés allez dans l'onglet Basic : dans la partie Conversation cliquez sur Edit. Une fois l'éditeur de dialogue ouvert, cliquez de suite sur l'icône Save the Current File : vous le nommerez tutfr_merch.

Conseil : privilégiez des noms de fichiers comportant le nom du module, et pourquoi pas de la zone : cela vous permet de vous repérer dans vos dialogues. Les noms en « nw_ » sont « pris » par les modules officiels du jeu Solo de Neverwinter Nights.

Note : Si vous fermez l'éditeur, que vous ne savez pas où retrouver votre dialogue : sachez que celui-ci apparaît automatiquement dans l'onglet de gauche dans le groupe Conversations. (Ou encore, utiliser la commande Open an existing File de l'éditeur de Dialogue !) Vous noterez aussi que vous êtes sévèrement limité dans le nombre de caractères du nom de fichier.

Cliquez ensuite sur le premier bouton de la palette de gauche : ceci ajoutera un dialogue au noeud courant (c'est-à-dire au dialogue parent). Pour le supprimer, utilisez le troisième bouton de gauche. Enfin, les deux icônes au bas de la palette de la gauche vous permettent d'étendre ou de fermer tous les Dialogues. (Ca fonctionne comme si c'était une fenêtre affichant le contenu d'un dossier)

La première section de dialogue qui s'affiche concerne le porteur du dialogue (ou un autre personnage non joueur) : elle est en rouge (cela peut se changer). Rentrez ici un dialogue tout bête comme une formule de politesse comme « Bienvenue, chère <FirstName> » (en sélectionnant la langue française, puis Female... par exemple... (Voir plus bas « À propos du support multi langue »))

Vous remarquez ce FirstName entouré de crochets comme s'il s'agissait d'une balise HTML. En fait, il s'agit d'un Token : la balise va être remplacée - en tout cas avec FirstName - par le nom du joueur. Vous pouvez apparemment ajouter vos Tokens pour avoir des Tokens disons plus français que « mister » (par exemple). (Ndla : ceci nécessite d'utiliser des scripts, et particulièrement la fonction SetCustomToken(int nCustomTokenNumber, string sTokenValue))

Ceci constituera le dialogue de départ du PNJ : après cela, on peut aussi décider qu'un autre personnage du jeu parle. Vous pouvez changer le Speaker Tag et y mettre par exemple... la caisse juste à côté ! Nous garderons OWNER pour tout notre dialogue, ceci nous permet entre autre de nous resservir du dialogue sachant que l'on ne fait pas appel à des objets qui risquent de ne pas être présent sur une autre zone.

Note : sur la version originale du jeu, le fait de ne rien mettre dans la section « English » (par défaut bien sur...) ne fera pas apparaître le dialogue dans l'éditeur de conversation et lorsque vous testez la conversation (en faisant un clic droit sur « Root » et en sélectionnant Test). Cela se passe aussi dans le jeu...

Une fois que nous avons notre texte de départ, nous devons choisir des options pour notre personnage, nous en placerons trois : pour cela, restez sur le dialogue « Bienvenue... ». Cliquez sur le bouton d'ajout de dialogue trois fois. Rentrez successivement : « J'ai des questions ... », « Vous vendez quoi ? », et « Au revoir... ». Vous pouvez mettre ceci dans le dialogue pour utilisateur ayant la version originale.

A « j'ai des questions », le marchand répondra « allez y », puis le joueur pourra lui demander le « temps qu'il fait », s'il veut bien « donner tout son argent » (on sait jamais) et « Finalement, j'ai rien à dire... ».

A « Vous vendez quoi », le marchand expliquera qu'il vend qu'une pauvre petite armure et vous demandera si vous voulez voir. Le joueur lui répondra : « Montrez toujours... », « File moi tout ton fric!!! » , « ça ne me tente pas ». Vous remarquerez que nous dirons deux fois la même chose pour arriver au même événement : en effet, dans le premier noeud (J'ai des questions), nous désirons lui prendre tout son argent, et dans le deuxième aussi. Avant de créer un choix de dialogue identique à celui que nous avons mis dans le premier noeud, faites un clic droit sur la première option de dialogue où le joueur désire voler le marchand, et copiez là. Maintenant, allez sur le noeud « Une pauvre armure... vous voulez voir? » , faites encore une fois un clic droit : et choisissez non pas « paste » (coller) , mais « Paste as link » (coller comme un lien). Cela aura pour effet de faire un lien vers le « File moi tout ton fric!!! » du premier noeud. Aussi cela nous évite de refaire tout : par exemple, on a pas à remettre un script qui déclenche l'attaque. Ceci est un atout, et nous vous conseillons de vous en servir le plus possible : cela permet entre autre de revenir sur une section de dialogue. Nous pouvons par exemple ajouter un lien vers « J'ai des questions ».

Maintenant, que nous avons le chemin principal de notre conversation, nous allons utiliser les scripts pour dynamiser celle-ci : vous verrez, ce n'est pas compliqué du tout (pour le moment en tout cas).

Sélectionnez notre dialogue « il fait quel temps » : il serait souhaitable que le marchand nous dise quel temps il fait et non pas un dialogue statique nous racontant toujours la même chose. Etant donné qu'on a grosso modo trois type de temps : Beau temps, pluie et neige; on va donc ajouter trois dialogues de réponses.

Dans l'onglet Text appears when, cliquez sur Edit de la section Script et enregistrez le script sous le nom de tutfr_merc_pluie. En deux mots, voici ce que doit faire notre script pour le cas où il pleut :

SI il pleut ALORS on renvoie « true » (on affiche le dialogue)
SINON on renvoie « false »

Il s'agit d'une simple condition : cependant, comme tout script, il faut juste espérer qu'il y ait une fonction facile (exemple : GetWeather). Ce qui n'est pas le cas des NWScripts ! Pour cela, nous allons tricher : nous allons définir nous même le temps !

Allez dans les propriétés de la zone, sélectionnez l'onglet Events, puis cliquez sur Edit pour l'événement « OnEnter ». Notez bien : nous vous expliquerons vaguement comment fonctionne cette partie du script. Sauvegardez le sous le nom de tutfr_setweather.

void main()
{
  // note : Random ne fournira jamais un vrai nombre aléatoire.
  int iRandomWeather = Random( 100 ); 
  int iWeatherType = 0;

  if ( iRandomWeather < 33 )
    iWeatherType = WEATHER_CLEAR;
  else if ( iRandomWeather >= 33 && iRandomWeather < 66 )
    iWeatherType = WEATHER_RAIN;
  else
    iWeatherType = WEATHER_SNOW;

  object oArea = GetArea( GetFirstPC() );
  SetWeather( oArea, iWeatherType );

  SetLocalInt( GetModule(), "WEATHER_CURRENT", iWeatherType );
}
 

Nous avons stocké le temps dans une variable locale nommée WEATHER_CURRENT.

Revenons en à notre script tutfr_merc_pluie : maintenant que nous avons définie une variable locale au niveau du module, nous pouvons l'appeler. Voici le script :

int StartingConditional()
{
    int iResult;
    int iWeatherType = GetLocalInt( GetModule(), "WEATHER_CURRENT" );

    if ( iWeatherType == WEATHER_RAIN )
      iResult = TRUE;
    else
      iResult = FALSE;

    return iResult;
}
 

Pour les autres temps, nous ferons pareil sauf que pour la neige, nous changerons WEATHER_RAIN par WEATHER_SNOW, et WEATHER_RAIN par WEATHER_CLEAR pour le beau temps. (A vous de choisir le nom de fichier) Pour finir le dialogue, nous ajouterons un gracieux « merci » que nous collerons en tant que lien pour les temps « il fait beau » et « il neige ».

Maintenant que nous avons vu comment afficher un texte en fonction d'une condition, on va voir comment utiliser les aptitudes du personnage (Skill). L'une des aptitudes les plus importantes dans les dialogues est l'aptitude Persuade. Dans le jeu, nous avons un dialogue sous la forme suivante :

[Persuade] En considérant que les trolls étaient des durs à cuire... vous ne pensez pas qu'un petit extra serait envisageable ?

Et ensuite, on a deux choix :

  • [Success] Hé bien, oui... C'est vrai, je peux vous donner quelques 100 communs de cuivre supplémentaires, cela paiera les potions que vous avez sûrement du acheté...
  • [Failure] En temps normal, j'aurais pu vous donner un peu plus, mais hélas la ville est à cours de moyen...

Bien sur, même si nous n'avons pas l'aptitude adéquate, nous pourrons quand même tenter de persuader la personne de nous donner un peu plus. Reconsidérons notre dialogue au moment où on demande au marchand de donner tout l'argent qu'il a au joueur : plutôt qu'avoir une option de dialogue aussi brute, on va repasser à quelque chose de plus poli :

<StartCheck>[Persuade]</Start> J'ai besoin d'argent, je suis à cours... pourriez-vous me filer cent ou deux cents pièces ?

Notez bien l'ensemble de balises : <StartCheck> et </Start>. Cela vous permet d'afficher du texte en rouge. Par exemple, vous pouvez mettre en rouge [Insinue] pour sous-entendre qu'en répondant au PNJ le joueur insinuera quelque chose (par exemple : il peut insinuer qu'il a volé quelqu'un et que s'il veut la paix, il a intérêt à donner tout son argent...). Nous verrons plus tard un autre ensemble de balise. (nota : ce sont des tokens au même titre que <FirstName>)

Maintenant, nous allons envisager les réponses :

  • <StartCheck>[Success]</Start> Bon ... je peux peut-être consentir à vous les donner...
  • <StartCheck>[Failure]</Start> Hum ... écoutez je suis marchand, pas banquier... je ne fais pas de prêt à la minute !

Encore une fois, nous devons utiliser les scripts : en effet, l'option « Success » doit apparaître que si le joueur a réussi son coup.

Nous utiliserons ce bout de script : (placez le dans l'endroit réservé « Text appears When ...»)

#include "nw_i0_plot"

int StartingConditional()
{
	return AutoDC(DC_HARD, SKILL_PERSUADE, GetPCSpeaker());
}
 

Que nous enregistrons sous le nom de tutfr_hardpers. Vous pouvez changer DC_HARD par DC_EASY ou DC_MEDIUM. (Ce que nous avons fait) Enfin, allez dans l'onglet « Actions Taken » : nous allons utiliser l'assistant, même si ce n'est pas obligatoire, pour donner de l'argent. Cliquez sur le bouton à côté de « Edit ». Cochez la case « Give Rewards ».

Mettez 100 dans « Give gold ». Nous ne le donnons qu'au joueur, donc pas la peine de cocher la case « To party » (qui concerne plus les parties en réseau). Mettez « tutfr_merc_cc » comme nom de script, et cochez la case Open Script Editor : l'assistant a automatiquement placé ce qu'il fallait pour donner des Communs de cuivre. (Si le système monétaire est basé sur des communs de cuivre bien sur !)

Etant donné que nous voulons une valeur d'or aléatoire, nous allons utiliser la fonction Random. En bref : nous allons modifier le script par celui-ci :

void main()
{

    int iRandom = Random( 20 );
    int iTotalCc = ( 100 + ( iRandom * 5 ) );

    // Give the speaker some gold
    GiveGoldToCreature( GetPCSpeaker() , iTotalCc );

}
 

Nous donnerons de 100 à 200 communs de cuivre.

Maintenant que nous avons vu comment utiliser une aptitude (en tout cas, on a appréhendé la manière de le faire), et comment marquer cette utilisation par la mise en rouge de l'aptitude : vous pouvez en ajouter d'autres. Par exemple, on pourrait vérifier la sagesse et voir si le personnage peut insinuer quelque chose (imaginez : insinuer qu'un gros balaise est un voleur alors que vous n'êtes qu'un simple mage : un mage sage ne provoquerait pas le gros balaise... au contraire il tenterait de le persuader.). Neverwinter vous permet aussi de mettre en évidence une action par exemple l'action « Décrire ce qui s'est passé » : pour cela, on utilise aussi un couple de balises qui sont <StartAction> et </Start>. On retrouve aussi <StartHighlight>: nous vous en déconseillons l'usage vu que ceci affichera le texte en bleu marine ; en plus de bien marquer le texte (c'est le but original certes), cela le rend illisible !

Cependant, notre script n'a toujours pas atteint son but : en effet, on devrait pouvoir commercer lorsqu'on clique sur « Montrez toujours » mais rien, on n'affiche pas de magasin ! Ne vous inquiétez pas, nous y venons ! Allez sur le noeud (ou dialogue) « Montrez toujours » : sélectionnez l'onglet « Action Taken » en bas à droite : utilisez encore une fois l'assistant, et cochez la case « Perform an action », sélectionnez « Merchants », rentrez « oMarchand001 » dans le champs adéquat, mettez « tutfr_merch_dem » comme nom de script.

Voilà : vous aurez votre marchand !

Nous n'avons pas tout vu des possibilités des dialogues :

  • nous avons un onglet Comments qui nous ne nous intéresse pas pour le moment.
  • un onglet Other Actions : celui-ci vous permet d'ajouter des entrées dans le journal (nous étudierons son fonctionnement plus tard), de jouer une animation (nous avons mis Greetings comme animation pour le noeud « Bienvenue, cher <FirstName> »), de jouer un son (par exemple une voix qui dit « Bienvenue dans mon échoppe »).
  • un onglet Current File qui vous permet de changer le script du personnage selon deux conditions : soit la conversation se déroule normalement, on le continue en mettant le script « Normal » : par exemple, le marchand peut s'amuser à jeter un sort de guérison sur le joueur. Soit la conversation est interrompue : par exemple, vous sauvegardez en plein milieu de conversation, alors le marchand pourra le prendre mal et se mettre à vous insulter.

Notes : Revenons un peu sur l'assistant Script. Celui-ci vous aidera la plupart du temps pour les choses basiques. N'hésitez pas à vous en servir. Aussi, n'hésitez pas à faire des fichiers génériques plutôt qu'un script par personne. Dans notre conversation, nous avons un script tutfr_hardpers qui va renvoyer Vrai si la persuasion a réussi sur l'interlocuteur du joueur : vous pouvez tout à fait le réutiliser pour un autre dialogue ! En fait, pour être plus juste il faudrait 3 fichiers : un pour un DC « easy », pour un DC « medium » et un dernier pour un DC « hard ».

Au passage, si vous laissez vide une option de dialogue pour un joueur et qu'après cette option vous ajouter un dialogue pour l'interlocuteur, l'éditeur placera [CONTINUE] au lieu de [END DIALOGUE] pour l'option de dialogue vide : cela demandera au joueur de cliquer sur « Continue » et ça affichera le dialogue de suite de l'interlocuteur. (Dans notre exemple : « Bon ben au revoir !»)

A propos du support multi langue : Vous le comprendrez bien assez tôt, celui-ci est décevant. En effet, aux premiers abords, on aurait pu pensé que le jeu cherchait un texte s'il n'en trouvait pas dans la langue du jeu, par exemple : si vous regardez le commentaire de notre module, celui-ci est visible alors qu'il est placé dans la section française ! Cependant, lorsque vous jouez, c'est différent : un dialogue placé dans la section française ne sera tout bonnement pas visible si vous jouez avec une VO du jeu (bien sur, il n'y a pas de dialogue pour la section originale du jeu). Pire encore : pour palier à ce problème, on devra placer des textes dans chacune des sections de langue (une pour l'anglais, et une (ou deux) pour le français !) ce qui risque de grossir la taille du module pour rien... Bien sur, on aurait pu espérer de la part de Bioware la possibilité de choisir une langue par défaut, ainsi s'il n'y a pas de texte dans la langue du jeu, on aurait directement le texte de la langue par défaut. On peut espérer un patch futur ...

Aussi, avec les scripts on peut créer nos propres Tokens, il risque donc d'y avoir ce qu'il faut pour avoir un module 100% en français !

Les conversations sont très importantes dans un jeu de rôle, même si apparemment vous êtes limité à 1024 caractères, n'hésitez surtout pas à mettre de longs dialogues : en bref, de faire un module intelligent (comme Planescape : Torment : ça fourmille de dialogues, et ça a une histoire passionnante !). Sachez que vous pouvez donner une conversation aux différents objets du jeu : portes, personnages (logique), armoire (avec par exemple une option « pousser un livre ») et autres.









Navigation rapide:
 
 
Revenir à la page d'accueil du site Ajouter la Bibliothéque de Neverwinter dans vos favoris Afficher une version imprimable de la page
  NeverList - Liste ...
Lyncya 3 - La Gue ...
Sarmates!
Le dernier des fi ...
Bonne année
Joyeux Noël 2010
The Witcher 2 en ...

Archives
Rechercher
 
 
Le Site



NwN 2 - Support des Modules Solos


Groupes
Archives
 

:: design by ghaxir :: coding by baldurien :: la bibliothèque de neverwinter :: tous droits réservés ::