NwScript - Les bases

Les informations suivantes ont donc pour but de présenter briévement et aussi simplement que possible la "structure" d'un tel langage ainsi que les possibilités mises à la disposition des créateurs de modules, dans le cadre de NeverWinter Nights. Chaque élément détaillé dans cette page sera illustré à l'aide d'exemples concrets.

Les dialogues

Dans Neverwinter Nights, il est possible de "scripter" les paroles de chaque personnage non joueur (PNJ) afin de construire des chaînes de dialogues avec les personnages joueurs (PJs). Dans ce but, les répliques de chaque perosnnage pourra contenir des mots clefs importants qui permettrons d'orienter les réponses des PNJs.

  • Syntaxe : événement_réplique ("mot / phrase clef") { action }
  • Détails et explication:
    • événement_réplique : il s'agit du nom "officiel" de la fonction. Ce premier élément indique à l'interprétateur qu'il s'agit d'un dialogue (il doit donc interpréter la suite du code comme un dialogue).
    • ("mot / phrase clef") : il s'agira d'inscrire ici les mots clefs qui feront réagir le PNJ qui écoute le dialogue.
    • { action } : entre les acolades, il conviendra de noter les 'actions' qui doivent suivre l'énonciation des mots clefs. cette action peut prendre la forme d'une réponse du PNJ et une éventuelle attitude à l'égard du PJ.
  • Exemple : dansle cadre de cet exemple, imaginons qu'un aventurier ait entendu desrumeurs concernant un dragon. Il entre dans le premier bar afin d'enapprendre plus et interroge le patron.

evenement_replique "dragon"
{
say "Je n'ai pas vu un dragon dans la région cette année!";
   emote baisse les yeux dans ces choppes de bières;
}

En détaillant, on s'apperçoit qu'il s'agit d'un dialogue, et que si le mot "dragon" est prononcé par le joueur à l'intension du patron du bar, ce dernier lui répond qu'il n'a pas vu de dragon depuis un an, tout en reprenant son activité "gestuelle".

Dans un deuxième temps, l'aventurier tente sa chance auprès d'un autre personnage, qui en sait plus que le patron du bar, mais se montre réticent à révéler ces informations à l'aventurier.

evenement_replique "dragon"
{
   say "Des dragons! Ah oui, j'en ai vue un...";
   emote vous regarde plus attentivement.;
}

Maintenant, l'aventurier sait qu'il a vu un dragon. Ce même personnage peut donc réagir à d'autres 'mots clefs' plus précis.

evenement_replique "où est le dragon?"
{
   say "Hum... vous semblez très courageux, hein?";
   emote Tousse bruyamment;
   say "Je ne peux pas être totalement sûr, mes sens de l'orientation n'est plus ce qu'il était, mais je pense qu'il est pres des falaises à l'est";
}

Ainsi, après avoir demander "Où est le dragon?" à ce second PNJ, le joueur se voit répondre "Hum... vous semblez très courageux, hein?". Le PNJ tousse et continu sa réplique "Je ne peu pas être totalement sûr..."

Actions

Les "actions" permettent d'associer un "événement" à une fonction. C'est à dire qu'à chaque fois que l'événement se réalise (le personnage marche sur portion de sol précise), une action préprogrammer se déclenche (un piège s'active, par exemple) et se poursuit jusqu'à ce qu'elle atteingne son terme ou soit interrompu par une autre action.

  • Syntaxe : événément_action (déclencheur d'actions) {action}
  • Détails et explication :
    • événement_action : il s'agit du nom "officiel" de la fonction. Ce premier élément indique à l'interprétateur qu'il s'agit d'une action (il doit donc interpréter la suite du code comme une action).
    • (déclencheur d'actions) : il s'agira d'inscrire ici les événements qui lanceront les actions à exécuter.
    • { action } : entre les acolades, il conviendra de noter les 'actions' qui doivent suivre la réalisation de l'événement.
  • Exemple : danscet exemple, un aventurier se trouve dans un sombre donjon et saprogression vers le nord est empêchée par une lourde porte de métal. Prèsde la porte, il trouve un levier qu'il lever ou abaisser. Que peut onscripter ici :

evenement_action Levier_Descendu
{
   PorteNord.Deverrouillee;
   PorteNord.Ouverte;
}

Ce script attaché au levier, permet de déverouiller la porte et de l'ouvrir, si ce levier est abaissé.

evenement_action Levier_leve
{
   LumiereSalle=off;
   PorteSud.Fermee;
   PorteSud.Verrouillee;
   PiegeFleche.Tire
}

A l'inverse, ce script présente les actions qui se déclenchent si l'événement "lever le levier" se réalise. Ainsi, la lumière de la salle dans laquelle se trouve le perosnnage s'éteint, la porte 'sud' se ferme et se verrouille et un piège se déclenche et envoie une flèche en direction du personnage.

Association "Salutation"/"Entrée"

Il est également possible d'associer différents types de fonction, comme "paroles" d'une part et "action" d'autre part. Ici, nous essayerons de rédiger un visant à lancer un message de bievenu, quand un personnage entre dans un lieu précis (une boutique, par exemple).

  • Syntaxe : événément_salutation (% de lancement la salutation) {action}
  • Détails et explication:
    • événement_salutation : il s'agit du nom "officiel" de la fonction. Ce premier élément indique à l'interprétateur qu'il s'agit d'une salutation (il doit donc interpréter la suite du code comme une salutation).
    • (% de lancement de la salutation) : la salutation peut être lancer automatiquement, dès qu'un personnage entre dans la boutique (100% de chance qu'elle soit dîtes), ou lancer de façon plus aléatoire.
    • { action } : entre les acolades, il conviendra de noter les 'actions' qui doivent suivre la réalisation de l'événement.
  • Exemple : dans le cadre de cet exemple, un personnage entre dans une pièce et un second (le marchand de la boutique) lui souhaite la bienvenue.

evenement_salutation 100
{
   say "Bonjour! Puis je vous montrer mes articles?";
   emote sourire;
}

Un marchand moins aimable pourra tenir un discours moins jovial

evenement_salutation 25
{
   emote regarde d'un drôle d'air;
   say "Que diable voulez vous?";
}

On remarquera qu'ici, cette action (attitude du marchand, puis sa réplique "Que diable voulez vous?") n'a que 25% de chance de se lancer quand le personnage entre dans la pièce (l'évenement de cette fonction).

Gestion du temps (time)

La gestion du temps permet de générer des actions qui s'exécuteront à un instant T, prédéterminé. La gestion du temps peut prendre deux aspects distincts : générer une action à une heure précise dans la journée ou générer une action se répétant à intervals réguliers.

  • Syntaxe : événement_temps_exact (une heure précise dans une jouréne) {action}
  • Détails et explication :
    • événement_temps_exact : il s'agit du nom "officiel" de la fonction. Ce premier élément indique à l'interprétateur qu'il s'agit d'une donnée temporelle (il doit donc interpréter la suite du code comme une heure, dans une jouréne).
  • Exemple : pour l'exemple, imaginons qu'un aubergiste doive fermer son établissement tous les soirs à 23h. Il avertit ses clients 15 minutes avant la fermeture qu'ils doivent partir.

evenement_temps_exact (22:45)
{
   yell "Il est tard! Nous sommes fermé dans 15 minutes!";
}

evenement_temps_exact (23:00)
{
   yell "C'est l'heure de fermer! Tout le monde sort!";
   DoorSouth.Fermee;
   DoorSouth.Lock;
}

Ainsi, une première annonce sera faîte à 22h45, puis l'établissement sera fermé définitivement à 23h00, alors que les portes seront fermées et verrouillées. Et disons maintenant qu'un crieur parcours la ville toute la nuit et ennonce un message toutes les 30 minutes.

evenement_interval_temporel (00:30)
{
   yell "Tout est calme! Dormez bonnes gens!";
   emote soupire
}

Donner un "objet" (object )

Cette variable permet d'exécuter une action, dès qu'une chose spécifique (un objet) est donné à un autre personnage.

Réactions


Personne n'a encore réagi. Soyez le premier.

Que pensez-vous de Neverwinter Nights ?

122 aiment, 11 pas.
Note moyenne : (140 évaluations | 4 critiques)
6,5 / 10 - Assez bien

152 joliens y jouent, 1068 y ont joué.