?
| 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

Masteriser Neverwinter Nights (MNWN)

Ville - Partie 1



Navigation dans la série :

Table des matières :

Vue du Module



1. Chapitre 1 : le module

Avant de se plonger dans les détails de chaque zone incluse dans ce module, il pourait être intéressant de regarder les scripts associés au module lui-même :

onAcquireItem : m1module_1
onActivateItem : m1_itemact
onPlayerDeath : nw_o0_death
onPlayerDying : nw_o0_dying
onPlayerLevelUp : nw_o0_levelup
onPlayerRespawn : nw_o0_respawn

Le premier script est impliqué dans la mise à jour du journal du PJ quand ils acquièrent un certain objet. Il serait redondant d'analyser ce script, mais, si vous y jetez un œil, vous allez voir quelques déclarations qui vérifient le tag de l'objet acquis. Selon l'objet acquis, d'autres vérifications peuvent avoir lieu pour déterminer si une entrée du journal doit être mise à jour et à quel état. Rien de bien surprenant.

Le deuxième script est court et sympa : il inclue seulement un appel à IsRecall(). Nous parlerons de la pierre de Retour plus tard, je n'entrerais donc pas dans les détails de ce tristement simple appel à ce point.

Les scripts onPlayerDeath, on PlayerDying et onPlayerRespawn exécutent les actions standards requiseS dans chaque cas (redéfinition des points de vie et de la réputation et 'vol' de points d'expérience et d'argent). Ces scripts ont été analysés, commentés et modifiés par tant de gens que je ne pense pas qu'il soit nécessaire de s'y attarder (Il y a bien plus intéressant dans ce module !).

Le script pour le onPlayerLevelUp vérifie si vous avez un compagnon avec vous (nous aurons une section détaillée sur les compagnons un peu plus tard), s'il peut augmenter de niveau, et si oui, il appelle DoLevelUp pour augmenter le niveau de votre compagnon.

2. Sanatorium

Vous entrez dans le Chapitre 1 à partir de cette petite zone avec une seule pièce qui est utilisée pour quelques victimes (choisies) de la Peste.

Avant de poursuivre, nous allons faire quelque chose que peu de joueurs font habituellement : se retourner et regarder de là où nous venons. Oui, c'est bien une porte derrière le point de départ. C'est une 'Jewelled Door', marquée comme 'Plot Item', fermée, et demandant une clé non spécifiée pour être ouverte (en gros : scellée). A part ça la porte a un script associé avec son évènement onFailToOpen, faisant dire une ligne à la porte tirée de son arbre de conversation. Comme dans le prologue, cet arbre de conversation est utilisé encore et encore par des portes diverses et variées et la variable NW_L_FEEDBACK est mise juste avant que la ligne soit utilisée pour s'assurer que le noeud correct du dialogue est choisi. Dans ce cas, le noeud dit est le suivant : 'This door is barred from the other side'. Une révision de ce que l'on a déjà vu dans le Prélude.

Le reste du Sanatorium contient Desther, Fenthick, deux infirmières, et quelques victimes de la peste. Si l'on veut être complet : il y a aussi 4 triggers (déclencheurs) et une porte menant à la zone du Hall de Justice.

Le trigger (déclencheur) entourant Desther and Fenthick :
Ce dernier est associé à deux scripts :

onEnter : m4q1ktriga_2
onExit : m1q1ktriga_3

^^^^^^^^^^^^^^^^^^^^
Script: m1q1ktriga_2
^^^^^^^^^^^^^^^^^^^^
void main()
{
    object oFenthick = GetLocalObject(
GetArea(OBJECT_SELF), "NW_G_oFenthick");
    object oPC = GetEnteringObject();
    if(GetIsPC(oPC) &&
       GetLocalInt(oPC, "NW_L_M1Q1KFenthicInit") == FALSE &&
       IsInConversation(oFenthick) == FALSE)
    {
        AssignCommand(oPC, ClearAllActions());
        AssignCommand(oFenthick, ClearAllActions());
        AssignCommand(oFenthick, ActionStartConversation(oPC));
    }
}
^^^^^^^^^^^^^^^^^^^^

Le comportement de ce script dépend de l'objet entrant, de la valeur de la variable NW_L_M1Q1KFenthicInit se trouvant sur l'objet entrant et si Fenthick est ou n'est pas en cours de conversation.
Si l'objet entrant est un PJ, la varible est déclarée comme FALSE (ou 0) et si Fenthick n'est pas en conversation, il engagera la conversation avec le pJ. Notez que Fenthick lui-même est indirectement référencé à travers une copy de l'objet Fenthick mis dans la zone elle-même. Cet objet local est configuré par le script de spaning appartenant… à Fenthick (!) (voir ci-dessous de toutes façons).

^^^^^^^^^^^^^^^^^^^^
Script: m1q1ktriga_3
^^^^^^^^^^^^^^^^^^^^
void main()
{
    object oExit = GetExitingObject();
    if(GetTag(oExit) == "M1Q1KFenthick")
    {
        AssignCommand(oExit, ClearAllActions());
        AssignCommand(oExit, ActionMoveToObject(GetNearestObjectByTag
("WP_M1Q1KFenthick")));
    }
}
^^^^^^^^^^^^^^^^^^^^

Ce trigger (déclencheur) est placé là pour vérifier si Fenthick, pour une raison étrange, sort de la zone de trigger (déclencheur) et, si oui le repositionner au niveau du point de passage WP_M1Q1KFenthick au milieu de la zone.

Le premier trigger allongé :
Peut-être que vous ne voyez pas de quel trigger je veux parler. En fait, en plus du trigger entourant Fenthick et Desther, les trois autres triggers dans la zone forment une espèce de long rectangle. 'Premier' fait référence au trigger le plus près de la position de départ. Le 'deuxième' trigger sera celui au milieu, et le 'troisième' celui le plus loin de la position de départ et proche de la porte menant au Hall de Justice.

Le premier trigger est caractérisé par un seul script sur l'évènement onEnter :

^^^^^^^^^^^^^^^^^^^^
Script: m1q1ktrigb_2
^^^^^^^^^^^^^^^^^^^^
void main()
{
    if(GetIsPC( GetEnteringObject()))
    {
        AssignCommand( GetNearestObjectByTag(
"M1Q6KPatient_03"),SpeakOneLinerConversation());
    }
}
^^^^^^^^^^^^^^^^^^^^

En clair, quand vous marchez sur ce trigger, la victime avec le tag M1Q6KPatient_03 dira une ligne tirée de son arbre de conversation.

Le deuxième trigger :
Le deuxième trigger a le script suivant associé à son évènement onEnter

^^^^^^^^^^^^^^^^^^^^
Script: m1q1ktrigc_2
^^^^^^^^^^^^^^^^^^^^
void main()
{
    if(GetIsPC( GetEnteringObject()))
    {
        AssignCommand( GetNearestObjectByTag(
"M1Q6KPatient_07"),SpeakOneLinerConversation());
        AssignCommand( GetNearestObjectByTag
("M1Q1KNurse"),SpeakOneLinerConversation( "M1Q1KConsole"));
        AssignCommand( GetNearestObjectByTag
("M1Q1KNurse"),ActionPlayAnimation
(ANIMATION_LOOPING_GET_LOW));
    }
}
^^^^^^^^^^^^^^^^^^^^

Quand vous marchez sur ce déclencheur, la victime ayant le tag M1Q6KPatient_07 dira une ligne de conversation, l'infirmière M1Q1Knurse fera de même, puis exécutera l'animation ANIMATION_LOOPING_GET_LOW.

Le troisième trigger :
C'est en fait une copie conforme du deuxième trigger… La même victime dit une ligne de sa conversation l'infirmière en dit une autre etc…

Fenthick :
Fenthick est décrit par les scripts suivants :

onConversation : m1q1kfent_4
onHeartbeat : m1q1kfenthick_1
onSpawn : m1q1fenthick_9

Ses autres évènements n'ont aucun script d'associés. Commençons par le script onSpawn (puisque 'au début il n'y avait rien').
Le script de spawning met simplement la variable NW_G_oFenthick pour être une copie, ou référence, de lui-même.
Voici le script onHeartbeat de Fenthick

^^^^^^^^^^^^^^^^^^^^^^^
Script: m1q1kfenthick_1
^^^^^^^^^^^^^^^^^^^^^^^
void main()
{
    int nCount = GetLocalInt(OBJECT_SELF,"NW_L_Count");
    if(IsInConversation( OBJECT_SELF) == FALSE)
    {
        int bFound = FALSE;
        int nNth = 1;
        object oPlayerInSight = GetNearestCreature
(CREATURE_TYPE_PLAYER_CHAR,
                                            PLAYER_CHAR_IS_PC,
                                            OBJECT_SELF,
                                            nNth,
                                            CREATURE_TYPE_PERCEPTION,
                                            PERCEPTION_SEEN);

        while (GetIsObjectValid( oPlayerInSight) &&
               bFound == FALSE)
        {
            if( GetLocalInt(oPlayerInSight, "NW_L_M1Q1KFenthicInit"))
            {
                bFound = TRUE;
            }
            else
            {
                 nNth++;
                 oPlayerInSight = GetNearestCreature
(CREATURE_TYPE_PLAYER_CHAR,
                                            PLAYER_CHAR_IS_PC,
                                            OBJECT_SELF,
                                            nNth,
                                            CREATURE_TYPE_PERCEPTION,
                                            PERCEPTION_SEEN);
            }
        }
        if(bFound == FALSE &&
           nCount >= 3)
        {
            ActionDoCommand( SetFacingPoint(GetPosition
(oPlayerInSight)));
            ActionDoCommand( SpeakOneLinerConversation());
            nCount++;
        }
        else
        {
            ActionPlayAnimation( ANIMATION_LOOPING_TALK_NORMAL);
            ActionPlayAnimation( ANIMATION_LOOPING_LISTEN);
            ActionPlayAnimation( ANIMATION_LOOPING_TALK_NORMAL);
            ActionDoCommand( SetFacingPoint(GetPosition
(GetNearestObjectByTag("WP_GroupFacing"))));
            nCount = 0;
        }
    }
    SetLocalInt(OBJECT_SELF, "NW_L_Count",nCount);
}
^^^^^^^^^^^^^^^^^^^^^^^

Si Fenthick est déjà en conversation rien ne se passera. Sinon il triera les PJS en vue et cherchera celui ou ceux ayant la variable NW_L_M1Q1KFFenthicInit définie comme True. A ce point la variable NW_L_Count définie sur Fenthick devient cruciale. A moins que la variable ne soit à 3 ou plus. Dans ce cas Fenthick fera face au PJ ayant les conditions requises, dira une ligne de sa conversation et augmentera la valeur de sa variable MW_L_Count.

Voici le script onConversation de Fenthick :

^^^^^^^^^^^^^^^^^^^^^^^
Script: m1q1kfenthick_4
^^^^^^^^^^^^^^^^^^^^^^^
void main()
{
    object oFenthick = GetLocalObject(
GetArea(OBJECT_SELF),"NW_G_oDesther");
    if(IsInConversation(oFenthick) == FALSE)
    {
        ClearAllActions();
        BeginConversation();
    }
    else
    {
        SpeakOneLinerConversation( "M1Q1KFent2");
    }
}
^^^^^^^^^^^^^^^^^^^^^^^

Assez simple : si Fenthick n'est pas engagé dans une conversation il va engager sa conversation. Sinon il utilisera le seul noeud de l'arbre de dialogue M1Q1KFent2 à savoir : 'I'm sorry I can't talk right now. I'm listening to Desther.'

De toutes façons nous allons jeter un œil au dialogue de Fenthick. Dix noeuds, pour couvrir toutes vos interactions avec lui durant le Chapitre 1. Ca pourait être pire, je suppose. Voyons voir…

Tout d'abord les scripts pour la fin 'Normal' et 'Aborted' de la conversation sont les mêmes : le script est nommé m1q1kfentend et déplace simplement Fenthick au point de passage WP_M1Q1KTFenthick, là où il commence.

Ensuite regardons la racine.

Branche #1 :
"I must speak with you"
Celle là a un Conditional attaché particulièrement intéressant :
Return !GetIsPC(GetPCSpeaker()) ;
Donc hmm… euh… quand quelqu'un qui n'est pas un PJ parle à Fenthick il répondra cela… amusant.

Branche #2 :
"<FirstName>, you were quick to answer the summons. Allow me to be the first to welcome you to the Halls of Justice."
Apparaît seulement quand NW_L_M1Q01TALKFENTHICK (sur le PJ qui parle à Fenthick) vaut 0. Dans le noeud suivant la variable NW_L_M1Q1KFenthicInit est mise à la valeur 'TRUE ' (ou 1). Desther lancera une ligne de dialogue à ce point.
Cette branche amènera Fenthick à parler de la situation actuelle en ville et mettra NW_L_M1Q01TALKFENTHICK (sur le PJ) à la valeur 1, pour que cette branche n'aparaisse qu'une fois. Le dialogue continuera et mènera Fenthick à éventuellement mettre NW_L_M1Q01TALFENTHICK à 2. Finalement vous aurez l'option de lui poser quelques question (voir le noeud à ce propos dans la branche #10) ou simplement recevoir la bénédiction de Tyr et partir (encore une fois en passant par la branche #10).

Branche #3 :
"If we are to survive the Wailing Death, Neverwinter has need of men and women like you, <FirstName>."
Cette branche apparaît quand NW_L_M1Q01TALKFENTHICK est égale à 1 et met NW_L_M1Q1KFenthicInit à la valeur 'True' (juste au cas où). A part elle vous mènera immédiatement aux mêmes nodes de dialogue qui étaient disponible dans la branche #2.

Branche #4 :
"Greetings, <FirstName>. I must congratulate you on capturing the first Waterdhavian creature."
Cette branche apparaît si les conditions suivantes sont remplies : si NW_L_FenthickTalk est inférieure à 1, si NW_G_M1Q1MainPlot (une variable du module en fait) est égale à 25, et si NW_L_oPrimary (un objet local sur Fenthick) est un objet valide et correspond au PJ parlant à Fenthick.
Cette branche mettra NW_L_FenthickTalk à la valeur 1 et NW_G_M1Q1A1PlayerConversation à 'True'.
Le dialogue vous laissera poser quelques question ou montrer à Fenthick une des notes que les assassins mystérieux ne manqueront pas de laisser tomber lorsqu'ils vous tendront des embuscades pendant la courses aux créatures Waterdhéviennes. Ce noeud est aussi dans la branche #10 ; nous l'examinerons quand nous y arriveront.

Branche #5 :
"Have you heard, <FirstName>? The first of the Waterdhavian creatures has been recovered by <CUSTOM100>."
Vous arriverez à cette branche si les conditions suivantes sont remplies :
NW_L_FenthickTalk est inférieure à 1, NW_G_M1Q1MainPlot est égale à 25, NW_L_oPrimary est valide et ne correspond pas au PJ qui parle à Fenthick.
En arrivant à cette branche cela mettra NW_L_FenthickTalk à 1 et NW_G_M1Q1A1PlayerConversation en 'True'. Dans un sens cette branche est une jumelle de la précédente sauf que la créature a été récupérée par quelqu'un d'autre.

Branche #6 :
"<FirstName>! Thanks to you we have now recovered two of the Waterdhavian creatures, and are halfway to a cure for the Wailing Death!"
Apparaîtra quand NW_L_FenthickTalk est inférieure à 2, NW_G_M1Q1MainPlot est égale à 50, NW_L_oPrimary est un objet valide et correspond au PJ discutant avec Fenthick.
Ce même noeud mettra NW_L_FenthickTalk à 2 et NW_G_M1Q1A1PlayerConversation en 'True'.

Branche #7 :
"I have good news to report, <FirstName>! The second Waterdhavian creature has been recovered by <CUSTOM100>. We are halfway to a cure!"
La jumelle de la branche #6 sauf que c'est une fois de plus quelqu'un d'autre qui a trouvé la seconde créature :).

Branche #8 :
"Well done, <FirstName>. I heard you found the third of the creatures from Waterdeep. A cure is all but within our grasp now!"
Cette branche apparaît quand NW_L_FenthickTalk est inférieure à 3, NW_G_M1Q1MainPlot est égale à 75, NW_L_oPrimary est un objet valide et correspond au PJ engageant la conversation avec Fenthick. Ce noeud mettra NW_L_FenthickTalk à 3 et NW_G_M1Q1A1PlayerConversation en 'True'.

Branche #9 :
"Well met, <FirstName>. Have you heard? The third Waterdhavian creature has been found. A cure is all but in our hand!"
Encore une fois la sœur de la branche ci-dessus, mènera aux même choix de conversations.

Branche #10 :
"Hello again, <FirstName>, and well met as always. Is there something I may do for you?"
Cette branche n'a aucune condition attaché à sa racine. C'est une branche générale utilisée quand il n'y a rien de particulier de déclenché par rapport aux variables précédemment citées.
Ce dialogue vous permet de poser des questions et inclue un noeud concernant les lettres que vous récupérerez sur les corps des assassins qui vous attaqueront durant le Chapitre 1.
Ce noeud apparaîtra seulement si le PJ parlant à Fenthick possède dans son inventaire un des objets suivant : M1Q1_LetterConspiracy, M1Q1_LetterCult ou M1Q1_LetterSpy.
Des dialogues différents s'enclencheront selon l'objet possédé. Dans tous les cas la lettre vous sera enlevée et Desther profitera de la situation pour montrer sa personnalité des plus charmantes. Vous finirez ce dialogue à grands renforts de plaintes et de grommelements.

Desther :
Ou au moins, une version de Desther ! Ce viel homme charmant est charactérisé par les scripts suivants :

onConversation: m1q1kdest_4
onHeartbeat: m1animation3_1
onSpawn: m1q1kdest_9

Puisque nous havons un onSpawn script nous commencerons de là. Le script m1q1kdest_9 met simplement une copie de Desther comme objet local dans cette zone nommé NW_G_oDesther. Cela permet à quiconque d'avoir une référencé à Desther en cas de besoin.

Le script onHeartbeat de Desther (m1animation3_1) joue simplement trois animations : TALK_NORMAL, LISTEN et TALK_NORMAL et s'assure que Desther fait face au point de passage WP_GroupFacing (comme Fenthick). Tout ça bien sûr, sauf si Desther est engagé dans une conversation.

Le script onConversation est similaire à celui de Fenthick : Si Fenthick (oui oui Fenthick et non pas Desther) est engagé dans une covnersation, Desther dira une ligne tirée du dialogue M1Q1KDest2 (Le noeud " Leave me be for the moment. I am listening to Fencthick. " est la seule dans ce dialogue.) Sinon il commencera sa conversation par défaut (m1q1kdesther).

Le dialogue par défaut de Desther possède 5 branches principales qui sont sélectionnées aléatoirement. Aucune des ces dernières n'a de conséquences sur le jeu, juste de la conversation vide et inintéressante quoi.




A. Législation

"Neverwinter Nights" est développé par Bioware Corp., produit et vendu par Infogrames, Inc., New York, NY. Bioware et le Bioware Aurora Engine sont des marques déposées de Bioware Corp. Tous les autres copyrights et marques déposées sont la propriété de leurs ayant-droits respectifs.


B. Contact

L’article "Masteriser Neverwinter Nights : Prélude" a été écrit par Frank "Olorin" Rizzi. Vous pouvez me contacter (l’auteur) par e-mail fkh1000@yahoo.com. Tout commentaire, suggestion, et même critique, sera bienvenu et apprécié. Ceci est le premier de ce qui pourrait être une série d’articles, donc il y a de la marge pour améliorer cet article, ainsi que ceux encore à venir.

J’espère que vous apprécierez la lecture de MNWN : Prélude, et qu’elle vous inspirera et vous aider pour la création de modules encore meilleurs avec le toolset Aurora et Neverwinter Nights. Je tiens à remercier BioWare pour avoir développer un aussi bon produit.

Cette traduction à été effectuée par Don Vincenzo. Vous pouvez me contacter (le traducteur) sur le forum. Toute suggestion pour améliorer la traduction sera la bienvenue. J’espère vous faciliter la lecture et la compréhension de cette très intéressante série d’articles.
Vous pouvez (et je vous le recommande) consulter la version originale à cette adresse.


 
 
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 ::