Il est question ici de spécifier le mode d'interrogation des bots. Il a été choisi un mode d'interrogation par mots-clés. Chaque bot est associé à un ensemble de couples (mot-clé, réponse). Ex.~: Pour un bot qui s'appelle Raoul et qui est boulanger.
Name -> My name is Raoul.
Job -> I am the baker.
Chaque bot devra ainsi répondre aux mots-clés suivants~:
>Raoul
Bot: Raoul the baker is a vile enemy of mine.
You can find it in the vicinity of North Midgaard.
>Marcel
Bot: I don't know that.
Les mots-clés doivent aussi permettre d'élargir la conversation~:
>Job
Raoul: I am the baker.
>baker
Raoul: I cook breads, pies and cakes.
>cakes
Raoul: My cakes are the best of Midgaard.
Mais ils peuvent aussi servir de fil rouge dans une quête~:
>treasure
Old Pirate: I had a map but I sold it to an adventurer named Raoul.
(...)
>treasure
Raoul: I have only 1 half of the map. Robert has the other part.
(...)
>treasure
Robert: I have the other part of the map.
Jusqu'à présent, nous avons considéré les bots comme étant complètement passifs, répondant uniquement aux interrogations des joueurs. Mais il n'y aucune raison, et même au contraire, que les bots ne puissent pas être plus actifs dans la conversation. Ils peuvent proposer des sujets de discussion (parler de la pluie et du beau temps, de l'actualité locale), entamer une discussion avec un passant (joueur ou non), notamment si le bot à quelque chose à vendre. Ex.~: Un garde aborde Janselmeer. Il ne le connaît pas, donc il l'interroge pour savoir qui il est.
A guard is approaching.
Guard: What's your name, stranger?
case 1: >Janselmeer
Guard: I am watching you, Janselmeer.
case 2: >Oumph
Guard: I am watching you, Oumph.
Janselmeer peut dire son véritable nom (1) ou mentir (2). Les deux réponses
seront acceptées par le garde. Janselmeer sera alors connu sous le nom qu'il
a donné à ce garde (Janselmeer ou Oumph), et aussi par les autres personnes
en ville de manière potentielle.
Maintenant, reprenons à nouveau cet exemple mais cette fois-ci le garde connaît déjà Janselmeer.
A guard is approaching.
Guard: What's your name, stranger?
case 1: >Janselmeer
Guard: I am watching you, Janselmeer.
case 2: >Oumph
Guard: You lie! I know that you are not Oumph.
A guard attacks you.
Ici, le garde attendait 'Janselmeer' comme réponse. Toute autre réponse
, 'Oumph' par exemple, peut être considérée comme un mensonge par le
garde.
Cet exemple permet d'effleurer deux nouveaux aspects. Le premier, c'est l'ajout de nouveaux mots-clés (ici 'Janselmeer' a été rajouté). Le deuxième, plus intéressant, est l'intégration des réponses du joueur à la mémoire du bot. Sur l'exemple, le garde va associer le nom du joueur Janselmeer à son apparence. Bien sûr, rien n'empêche de mentir mais l'exemple montre de façon simplifiée les risques encourus. Il peut arriver que l'on ne désire pas répondre aux questions. Dans ce cas, une créature peut utiliser le mot-clé JOKER pour le signifier. Une absence de réponse (au bout d'un temps limité) pourra aussi être considérée comme un refus de communiquer. Les joueurs préféreront peut être la deuxième solution tandis que les bots utiliseront la première. Si les joueurs doivent utiliser JOKER, il serait mieux de lui donner un alias comme '...' pour l'interface utilisateur, ce qui est plus explicite.
Appliquons ce que l'on a défini précédemment à la communication entre 2 bots. Reprenons l'exemple du garde. Vu par le joueur, cela devrait donner ça~:
Guard to Bot: What's your name, stranger?
Bot to Guard: My name is Bot.
Guard to Bot: I am watching you Bot.
Vu par un bot~:
Guard to Bot: Name
Bot to guard: Bot
Guard to Bot: ""
La principale difficulté pour réaliser ceci est que le garde ne sait pas qu'il
parle à un bot. Celui à qui il parle doit pouvoir comprendre qu'il soit bot ou
joueur.
Pour être certain de se faire comprendre, le garde doit donc s'adresser à son
interlocuteur de manière compréhensible par les joueurs et les non-joueurs.
De plus, s'il y a d'autres créatures qui écoutent la conversation, elles
pourront aussi comprendre qu'il s'agisse de joueurs ou non.
La solution que suggère l'exemple est d'intégrer dans un message à la fois une
version courte interprétable par les bots (correspondant aux mots-clés), et une
version longue du message pour les joueurs.
Exemple du garde, vu par le jeu~:
Guard to Bot: ("Name", "What's your name, stranger?")
Bot to Guard: ("Bot", "My name is Bot.")
Guard to Bot: ("", "I am watching you Bot.")
Lorsqu'un bot ou un joueur envoie un message qui ne peut être compris ou qui ne
nécessite aucune réponse, la version courte sera vide. Aucun traitement ne sera
alors fait pour interpréter le message. Par contre il pourra être répété.
Ex.~:
Guard: Now you die, Raoul !
Message ("", "Now you die, Raoul !")
Ex.~:
Épicier: Elles sont belles mes outres ! Achetez-les !
(a priori destiné uniquement aux joueurs, ou alors les bots sont
sacrement intelligents)
Message ("", "Elles sont belles mes outres ! Achetez-les")
Le joueur peut envoyer des messages de 2 façons~:
Ex~: tell Oumph "Ou étais-tu passe?" Ceci générera ce message ("", "Ou étais-tu passe?"). Il ne sera compris par aucun non-joueur~; néanmoins n'importe quelle créature est capable de rapporter les paroles qu'elle entend (espion, commère, etc).
Ex~: tell Oumph Job Ceci générera ce message ("Job", "What's your job?") qui pourra être compris par les bots et les joueurs. Une liste d'alias devra être implémentée dans le contrôleur. Le joueur aura bien sûr la possibilité de les modifier à sa guise. Si l'alias n'existe pas, 'tell Oumph cloporte' générera le message ("cloporte","cloporte").
Pour que les bots puissent mieux se comprendre, nous rajoutons les codes de retour NONE, ANS, WRONG_ANS et BAD_ANS. Ces codes ne sont pas lisibles par les joueurs et ces derniers ne peuvent pas non plus en utiliser directement (la commande 'answer' permettra d'envoyer un message avec le code de contrôle ANS). Leur usage est donc limité aux bots. NONE est le code de contrôle par défaut. Il ne signifie rien. Il est employé quand aucun autre code de contrôle n'est utilisé. Le code ANS signifie que le message est une réponse à une précédente question. WRONG_ANS sert à indiquer que la réponse est considérée comme fausse et mensongère. L'interlocuteur peut donner ainsi une autre chance de dire la vérité (ou plutôt ce que le bot considère comme la vérité), changer de sujet de conversation ou bien rompre la discussion avec des conséquences fâcheuses (combat, baisse de la réputation...). Ex.~: un garde interroge un joueur.
A guard is approaching.
Guard: What's your name, stranger?
(name, "What's your name, stranger?",NONE)
>Janselmeer
("Janselmeer", "Janselmeer",ANS)
Guard: You lie! I know you are not Janselmeer.
("", "You lie! I know you are not Janselmeer.", WRONG_ANS)
>Oumph
("Oumph", "Oumph", ANS)
cas 1 :
Guard: You lie! I know that you are not Oumph.
("", "You lie! I know that you are not Oumph.", WRONG_ANS)
A guard attacks you.
cas 2 :
Guard: I'm watching you Oumph.
("", "I'm watching you Oumph.", NONE)
Il convient bien sûr de limiter le nombre d'essais possibles...
BAD_ANS indique que la réponse est incorrecte, non conforme au type
de réponse souhaité.
Ex.~:
A guard is approaching.
Guard: What's your name, stranger?
(name, "What's your name, stranger?", NONE)
>43
("43", "43", ANS)
Guard: "I said 'What's your name?'."
("", "I said 'What's your name?'." BAD_ANS)
Un code BAD_ANS généré par un bot est une erreur grave dans le code du jeu ou du
bot. Un enregistrement de l'erreur doit être effectué pour débogage et
correction.
Un code BAD_ANS généré par un joueur signifie une faute de frappe, une mauvaise
compréhension de la question, un mensonge volontaire, une tentative pour
perturber le bot, etc.
Le codeur est libre de faire réagir son bot comme bon lui semble (poli et
compréhensif, énervé et agressif, etc). Le bot peut donc ou non reposer sa
question.
Note~: le bot ne peut et ne doit pas savoir s'il parle à un autre bot ou à
un joueur. Pour cette raison, le nombre de réponses BAD_ANS doit être limité,
afin qu'aucun bot bogué ne provoque de boucles infinies...
Un modificateur d'expression est une information contextuelle qui accompagne le message. Cette information est signifiante pour le bot qui reçoit le message et lui permet de réagir de manière plus appropriée.
Par exemple, il y a plusieurs façons de demander son nom à quelqu'un.
L'exemple suivant explique comment les modificateurs d'expressions peuvent être utilisés. Janselmeer rencontre Robert le boucher (le frère de Raoul) et lui demande des informations sur Raoul le boulanger.
Janselmeer: (RAOUL, "Do you know RAOUL?", NONE, NEUTRAL)
Robert: ("", "I am not concerned with that RAOUL.", ANS, RUDE)
Janselmeer: (RAOUL, "O MIGHTY ONE, may I beg you a little of your
knowledge about Raoul?", NONE, OBSEQUIOUS)
Robert: ("", "RAOUL? This thing exists only in your sick mind.",
ANS, INSULTING)
Janselmeer: (RAOUL, "Tell me something about Raoul or I'll kill you!",
NONE, THREATENING)
Robert: ("", "I swear I don't know Raoul.", ANS, NEUTRAL)
Janselmeer punches at Robert.
Janselmeer: (RAOUL, "Tell me something about Raoul or I'll kill you!",
NONE, THREATENING)
Robert: ("", "Raoul is the baker. He lives North of here. Please don 't
kill me!", ANS, POLITE)
Il n'y a aucune obligation d'utiliser un modificateur d'expression plutôt qu'un autre. C'est purement une question de comportement. Certaines personnes sont plutôt insolentes tandis que d'autres se montrent polies tout simplement parce qu'elles sont comme cela. Mais évidemment, les créatures n'auront pas les mêmes réactions avec les premiers qu'avec les seconds. Cela dépend d'elles. Par exemple, un seigneur est normalement habitué à ce qu'on s'adresse à lui de manière obséquieuse et pourrait s'offusquer de quelqu'un qui ne le ferait pas. Le choix du modificateur d'expression dépend donc à la fois de la personnalité du du personnage qui parle et de la réaction attendue de celui qui écoute.
Le système des mots-clés a été choisi pour des raison de simplicité de mise en oeuvre. Néanmoins, cela devrait évoluer et tendre vers un vrai dialogue avec des phrases (sujet verbe complément). La première extension aux mots-clés pourrait être l'utilisation des pronoms et adverbes interrogatifs~: what, who, where, why, how, how many, which, when. Ex.~:
>Who Raoul
Bot: Raoul is the baker.
>Where Raoul
Bot: You can find it in the vicinity of North Midgaard.
>What Raoul
Bot: I've never heard of this.