WB Traduction de topics.

Admosdean

Sergeant at Arms
Best answers
0
Bon, je post, mais ce n'est pas du tout en rapport avec la traduction de mod.

Enfin, presque, je vais me remettre à la traduction des topic d'aide etc... tel que ceux dans la "liste de tout ce qu'il y a savoir" section Modding. En effet, nombre de jeunes moddeurs se sont vut couper les ailles à cause d'un horrible topic anglais tout plein de "-ing" de "is" de "to". Bref en anglais.

Donc amis moddeurs, si vous avez un topic particulier que vous voulez voir traduit dans notre belle langue, Pmez moi, ou faites vos demandes sur ce topic!

Réalisé:

Tutorial: Creating new spawn point/party par Kolba.
Tutoriel: Comment Éditer une Police?

Travail en cours:

Tutorial: Making new quests par Kolba (Aide requise, le tutoriel ne marche pas chez moi, quelqu'un pourrais essayer de faire ce qui est indiqué ici, et me dire si ça marche chez lui?)

A suivre:

Compilation of 82 little tweaks to the text files to change your gameplay

Voila, je posterais ici, dans le sous-forum et notre Maitre Incontestée Mr Roy (MIMRtm) déplacera à son bon vouloir!
 

Cotin

Master Knight
M&BWB
Best answers
0
Excellente initiative !

Ca fait déjà quelque temps que je projette de traduire la documentation pour le modding, mais mon manque de connaissances en la matière me freine un peu...

Merci de ta proposition !
 

Admosdean

Sergeant at Arms
Best answers
0
Comme vous le savez, j'ai pour ambition de traduire tout les tutos&aides du forum, de devenir le maitre incontesté du monde, de trouver une jolie fille célibataire et de manger des petits pois. Si vous ne le saviez pas, c'est fais.

Mais pour ca, j'ai besoin de vous! Oui, j'ai calculer rien que pour traduire tout les tuto, il me faudrait 749H61minutes01secondes!


Bref, si vous êtes intéressés, envoyez moi un p'ti PM. Toute aide est précieuse!

Vous devez:

  • Parler/écrire anglais.
  • Ne pas écrire en sms
  • Des compétences en modding (peu, juste pour tester ce qu'on traduit!)
  • Etre une jolie fille célibataire

Ps: Ne vous tracassez pas pour l'orthographe, moi même, j'fé 1 cèrtin nonber de fote!

Merci à tous!
 

BerTolkien

Sergeant Knight
Best answers
0
Hello

Pas de bousculade pour t'aider !  :sad:
Faut dire qu'il ne doit pas y avoir une seule jolie fille célibataire sur ce forum !  :razz:

Mais courage, il ne devrait plus que te rester 748H73minutes81secondes !  :lol:

Tchin
:twisted:
 

Kiriel

Sergeant
WBWF&S
Best answers
0
Je peu t'aider mais que si l'on collabore parce qu'une certaine traduction ma laissé un gout amer et que je n'est pas envie de donner de mon temps pour rien. J'espère que tu comprends ,maintenant comme je le disais je serais ravi de t'aider  :wink:
 

Go_Khla_Yeh

Master Knight
Best answers
0
Ouvrez le spolier et vous pourrez lire le tutoriel sur la création de dialogue avec le module system!!

Je suis en train de le tester.



PARTIE 9 : Dialogues.
Dans cette partie nous examinerons le dossier module_dialogs.py, un des plus grands et des plus importants dans le système de module, parce qu’il contient tous les dialogues de Mount&Blade. Tout dialogue que vous souhaiteriez créer sera à installer dans ce dossier. Comprenez que ce dossier est lu de haut en bas chaque fois qu’un dialogue démarre. Quand le critère d’un tuple est rencontré, alors il est exécuté.

9.1 -- Détails du Module_Dialogs
***NOTE : Mise au point… Est-ce que le "anyone"  de dialogue fonctionne toujours ? Je pense qu'1 seul tuple est activé en rapport à la section **** …

Le dossier de module_dialog.py est bien plus complexe que ce qu’il n’y paraît. Examinez le premier tuple, et vous verrez que la cible  ‘anyone’ est employée avec les divers états de start-dialog (expliqués plus loin). Il y a des conditions qui sont vérifiées et classées, les chaîne classées et les $variables sont réglées. Ce qui peut sembler bizarre c’est que chaque 'état' de texte de dialogue déclare que le dialogue n'est pas affiché. Ces dialogues ont programmé que ces données seront utilisés ultérieurement dans le dossier. De cette façon, ces blocs de codent ne seront tapés qu'une seule fois au clavier, et non pas à chaque conversation. Si le personnage associé au dialogue ne correspond pas au critère de ce tuple, alors il est zappé. Ceci vous facilitera l’ajout d’un nouveau NPCs générique (quidam), chef de village, etc. comme Marnid, sans avoir à s'inquiéter de comment arranger leurs conversations. Examinez rapidement l'un d'entre eux, tout en haut ci-dessous :
dialogs = [
[anyone ,"start", [(store_conversation_troop, "$g_talk_troop"),
(store_conversation_agent, "$g_talk_agent"),
(store_troop_faction, "$g_talk_troop_faction", "$g_talk_troop"),
# (troop_get_slot, "$g_talk_troop_relation", "$g_talk_troop", slot_troop_player_relation),
(call_script, "script_troop_get_player_relation", "$g_talk_troop"),
(assign, "$g_talk_troop_relation", reg0),
(try_begin),
(this_or_next|is_between, "$g_talk_troop", village_elders_begin, village_elders_end),
(is_between, "$g_talk_troop", mayors_begin, mayors_end),
(party_get_slot, "$g_talk_troop_relation", "$current_town", slot_center_player_relation),
(try_end),

Il y en a d’autres, mais celui ci est assez représentatif. Ce sera vérifié quand vous "lancerez" une conversation avec "quelqu'un ("anyone’). Regardons le bloc (try_begin), nous voyons qu'il vérifie si "$g_talk_troop " est présent entre les constantes "village_elders_begin" et  "village_elders_end ". Parce que l’étiquette (flag) de négation "this_or_next" est utilisée, cette condition et la prochaine condition seront lues en tant qu'OU conditionnel.
Cela signifierait que si la première condition n'est pas trouvée, mais que la deuxième condition est présente (is_between, "$g_talk_troop", mayors_begin, mayors_end), alors le reste du bloc de code sera exécuté.
Les flags de négation et les constantes sont définis dans module_constants.py. C'est pourquoi, si vous voulez ajouter un chef de village, il/elle devra être placé/e entre "trp_village_1_elder" et "trp_merchants_end" comme défini dans ce dossier pour tirer profit des paramètres prédéfinis pour les chefs de village.

Voyons un peu vers le bas, on trouve un dialogue plus spécifique, à savoir la conversation de départ avec Ramun le marchand d'esclaves :
[trp_ramun_the_slave_trader, "start", [
(troop_slot_eq, "$g_talk_troop", slot_troop_met_previously, 0),
], "Good day to you, {young man/lassie}.", "ramun_introduce_1",[]],

Décortiquons les lignes de tuple :
1) Partenaire de dialogue : Sélectionne le partenaire à qui le joueur parlera, habituellement c’est un troop-id. Vous pouvez également employer un party-template-id en ajoutant à ce champ '|party_tpl'. Utilisez la constante ‘anyone’ si vous voulez que la ligne soit attribuée à n’importe qui. Attribuer "|plyr" à ce champ signifie que cette ligne sera dite par le joueur.
Attribuer '|other(troop_id)' signifie que cette ligne sera dite par une troisième personne présente dans la scène. (Assurez-vous qu'elle soit bien présente dans la scène)
2) Dialog-state de départ :
Dans un dialogue il y a toujours un Dialog-state actif.
Une ligne de dialogue au début d'un dialog state doit être la même que celle du dialog-state actif, pour que la ligne soit potentiellement sélectionnée.
Si le dialogue est lancé en rencontrant un personnage sur la carte, d’office, l'état actif du dialogue sera ’start’
Si le dialogue est lancé en parlant à un NPC (quidam) dans une ville, d’office, l'état actif de dialogue ‘start’
Si le dialogue est lancé en aidant une armée à gagner une autre armée, d’office, l'état actif de dialogue sera ‘party_relieved’
Si le dialogue est lancé en libérant un prisonnier, d’entrée, l'état actif de dialogue sera ‘prisoner_liberated’
Si le dialogue est lancé en battant une autre armée dirigée par un héro, d’office, l'état actif de dialogue sera ‘enemy_defeated’
Si le dialogue est commencé par un trigger  (Déclencheur), d’office, l'état actif de dialogue sera ‘event_triggered’
3) Bloc de conditions (liste) : Doit être un bloc d'opération valide. Voir le fichier header_operations.py pour les références. = []
4) Texte de dialogue (string) :
5) dialog-state final :
Si une ligne de dialogue est sélectionnée, le dialog-state actif commencera par la dernière ligne du dialog-state.
6) Bloc de conséquences (liste) : Ceci doit être un bloc valide d'opération. Voir le header_operations.py pour la référence. = []

Regardez le segment départ de Ramun :
1) Partenaire du dialogue : trp_ramun_the_slave_trader
2) Dialog-état-début : "start"
3) Bloc conditions : (troop_slot_eq, "$g_talk_troop », lot_troop_met_previously, 0),
4) String (Chaînes) du texte de dialogue : "Good day to you, {young man/lassie}."
5) Dialog-state final : "ramun_introduce_1"
6) Conséquences : []

Les choses les plus importantes à retenir dans ce tuple sont les dialog-states, ils commencent et terminent les dialog-state. A présent nous allons les examiner un peu plus profondément.
Le dialog-state final ("ramun_introduce_1") c'est lui qui dirige la conversation d'une ligne vers une autre. Vous pouvez mettre ce que vous voulez dans le segment du dialog-state final mais il doit y avoir un autre tuple avec un dialog-state début identique.

Par exemple, si nous devions faire un tuple avec un dialog-state final "blue_oyster ",
cela correspondrait à n'importe quel tuple dont le dialog-state début serait "blue_oyster". Il doit y avoir une correspondance exacte ; s’il n’y a pas de correspondance, alors le build_module.bat indiquera une erreur lors de la compilation.
S'il y a beaucoup de tuples avec un dialog-state début "blue_oyster", alors quelque chose de spécial se produira. Si les tuples sont dits par le joueur, il y aura comme conséquence un menu où le joueur pourra choisir entre les différents tuple fournis.
S’il est dit par un NPC (quidam), le système de module emploiera le premier tuple dans module_dialogs.py pour lequel toutes les conditions seront réunies -- même s'il y a beaucoup de lignes qui correspondent.
Pour terminer une conversation, vous devez employer le dialog-state final "close_window".
Pour lancer une conversation, vous avez différents choix de dialog-state début spéciaux. Nous nous référerons à ces derniers en tant que dialog-state début initiaux.
Voici la liste complète de dialog-state début initiaux :
"start" -- Utilisé quand on parle à un NPC dans une scène ou quand une conversation est déclenchée à l'intérieur d'une scène.
"party_encounter" -- Utilisé quand on rencontre un autre personnage sur la carte sur le terrain ou dans une scène.
"party_relieved" -- Utilisé quand on aide une armée à combattre sur la carte du monde, une fois que le joueur a gagné le combat.
"prisoner_liberated" -- Utilisé quand le joueur bat un ennemi avec un ou plusieurs Héros prisonniers.
"enemy_defeated" -- Utilisé quand le joueur défait une armée ennemie menée par un Héro.
"event_triggered" -- Utilisé quand un dialogue est déclenché par un évènement en dehors d’une scène.
Comme vous pouvez le voir, chaque dialog-state initial est conçu pour une situation spécifique. On ne l’activera pas pour autre chose que son utilisation spécifique. Puisque notre tuple d'exemple est utilisé pour parler à l'agent de police Hareck dans la ville de Mod, son dialog-state initial sera "start".


9.2 – Exigences et bloc de conditions
L'interface de dialogue est très flexible, et peut être employée de différentes façons. Elle gère autant les événements sur la carte du monde que les événements dans les scènes. Il permet de déclencher des dialogues quand bon vous semble.
Dans les paragraphes suivants, nous examinerons comment employer au mieux l'interface de dialogue, et ensuite nous apprendrons comment créer des dialogues complexes pour nous même.
Comme nous l’avons décrit dans le paragraphe précédent, une ligne de dialogue sera validée si toutes ses conditions sont rencontrées. Tout d'abord, le joueur doit parler au personnage concerné. Une ligne avec trp_ramun_the_slave_trader ne sera activée que si le joueur s’adresse à trp_constable_hareck.
La constante anyone peut être utilisée dans le cas où la phrase doit être dite par un interlocuteur quelconque choisi par le joueur.
En second lieu, le dialog-state début doit être conforme à l’une des deux options suivantes ; Soit la ligne de dialogue est initiée par un dialog-state initial, soit la ligne est suivie par un dialog-state de fin similaire dans une autre ligne.
Si le dialog-state début ne répond pas aux critères, alors il ne sera pas utilisé.
Troisièmement, la même logique des deux points précédents s’applique aux blocs de conditions. La ligne ne sera pas validée, à moins que toutes les lignes de conditions soient remplies.
Si les conditions du dialog-state début sont incorrectes, alors vous rencontrerez des problèmes ; build_module.bat signalera une erreur ; et Il se peut également que les lignes incorrectes de dialogue se figent simplement dans le jeu, puisque leur dialog-state final ne pourra pas trouver un autre tuple à activer.
C'est pour cette raison que vous devez porter une attention particulière aux blocs de conditions. Assurez-vous que vous ne saborderez pas votre propre dialogue par des conditions qui ne seraient pas correctement interprétées. Cependant, quand tout fonctionne en harmonie, les blocs de conditions peuvent être très puissants. Ils peuvent contenir des blocs de test. Vous pouvez appeler des segments situés à l'intérieur des blocks de conditions, et puis utiliser le résultat dans un segment de condition à l'intérieur du même bloc. Vous pouvez constituer des registres et des registres de string afin de les utiliser dans le dialogue réel. Nous réaliserons une par une toutes ces choses.
Vous pouvez observer l'utilisation d'un bloc de conditions dans le tuple de l'utilisation de module_dialogs pour parler avec Ramun le marchand d'esclaves :
[trp_ramun_the_slave_trader, "start", [(troop_slot_eq, "$g_talk_troop", slot_troop_met_previously, 0),],

Ce bloc contient seulement une condition, qui exige la variable slot_troop_met_previously de "$g_talk_troop" pour être égal à 0. Tous les registres et les variables sont égaux à 0 au début d'une nouvelle partie.
Et si vous examinez le prochain tuple, et analysez le bloc de conséquences :
[trp_ramun_the_slave_trader|plyr, "ramun_introduce_1", [], "Forgive me, you look like a trader, but I see none of your merchandise.",
"ramun_introduce_2",[
(troop_set_slot, "$g_talk_troop", slot_troop_met_previously, 1),]],

Le troop_set_slot de ce bloc place la variable slot_troop_met_previously de "$g_talk_troop" (à qui vous parlez) à 1 une fois que la ligne a été affichée.
En d'autres termes, après que cette ligne a été montrée une fois, elle ne sera jamais plus montrée -- parce qu'après, la variable slot_troop_met_previously ne sera jamais plus égale à 0. Le système de dialogue ignorera alors cette ligne et ira directement au prochain tuple dans le dossier qui répondra aux exigences :
[trp_ramun_the_slave_trader,"start", [], "Hello, {playername}.", "ramun_talk",[]],

Les seules conditions de cette ligne sont que le joueur doit parler à Ramun dans une scène. Elle sera toujours choisie en tant que réponse de Ramun.
Il est important de savoir que plusieurs variables sont placées dans les 3 premiers tuples de ce dossier. Elles sont placées quand vous parlez avec… "anyone". Chacun a son dialog-état-début spécifique, mais seules seront reconnues les conversations entre vous et quelqu'un que vous ciblez spécifiquement pour une conversation. "$g_talk_troop" est justement une des variables cataloguées et réglées dans ce processus. Dans les premières lignes du premier tuple, est stocké également votre relation avec "$g_talk_troop" de reg0,
c’est calculé dans le script troop_get_player_relation (contrôlé à l’intérieur de module_scripts.py) et entreposé dans  "$g_talk_troop_relation" :
[anyone ,"start", [(store_conversation_troop, "$g_talk_troop"),
(store_conversation_agent, "$g_talk_agent"),
(store_troop_faction, "$g_talk_troop_faction", "$g_talk_troop"),
# (troop_get_slot, "$g_talk_troop_relation", "$g_talk_troop", slot_troop_player_relation),
(call_script, "script_troop_get_player_relation", "$g_talk_troop"),
(assign, "$g_talk_troop_relation", reg0),

Voilà comment se passent les choses, ainsi vous ne devriez pas avoir à le refaire à chaque fois que vous créez un nouveau bloc de dialogue. Si vous avez des dialogues spéciaux cela prendra en considération les choses qui sont en relation avec la cible, alors il serait bon de vérifier ces derniers (ou le dialog-état-début spécifique) et voyez si ce que vous vérifiez est en place.


9.3 -- Ajouter le nouveau dialogue
Ici nous avons finalement la chance de donner à notre nouveau personnage Geoffrey un certain dialogue spécifique. Cependant, comme le module_troops, le module_dialogs est un autre dossier où vous ne pouvez pas ajouter comme bon vous semble d’autres tuples en bas de liste. La fin de la liste du module_dialogs de Python contient les conversations de placeholder qui se déclencheront pour qui que ce soit, et parce que le dossier est balayé de haut en bas pour trouver une correspondance, tous les dialogues ajoutés après les conversations de placeholder seront complètement ignorés.
On recommande d’ajouter le nouveau dialogue avant le commentaire suivant : COMPAGNONS ###
Notre but initial est de créer une introduction pour Geoffrey. Ceci nous permettra de gagner un peu d'expérience avant que nous nous jetions dans la création d'une véritable quête. Copiez le tuple suivant et collez le juste au-dessus du commentaire COMPAGNONS ### :
### Dialogue supplémentaire de JIK
[trp_npc17,"start", [], "What? What do you want? Leave me be, peasant, I have no time for beggars.", "geoffrey_talk",[]],

La première note que j'ai ajouté un commentaire qui en fait est le premier des commentaires qui suivront. Aux endroits où vous ajouterez de gros blocs de code, il est toujours recommandé de les commenter. C'est le premier tuple dans notre nouvelle conversation. Il est activé par le dialog-state initial "start", dit par Geoffrey, et il activé par le dialog-state début "geoffrey_talk".
Après nous ferons une autre ligne qui sera la réponse dite par le joueur.
Copiez le tuple suivant et collez le dans le module_dialogs, juste au-dessous du nouveau tuple :
[trp_npc17|plyr,"geoffrey_talk", [], "Nothing, never mind.", "close_window",[]],

Cette ligne sera montrée juste après la première. Elle sera dite par le joueur. En raison du dialog-state final  "close_window", cette conversation finira dès que cette ligne sera affichée. Comme nous l’avons expliqué précédemment, ajouter de multiples tuples avec le même dialog-state début aura pour conséquence un menu d'option auquel le joueur pourra choisir sa ligne, réponse préférée. Encore une fois, rappelez-vous que cela fonctionne seulement pour les tuples qui sont dits par le joueur (comme trp_npc17|plyr,…), et non pour toute autre personnage (uniquement [trp_npc17,…). Copiez les tuples suivants et collez les dans votre fichier module_dialogs : [trp_npc17|plyr,"geoffrey_talk", [], "And who are you supposed to be?", "geoffrey_talk_2",[]],
[trp_npc17,"geoffrey_talk_2", [], "Why, I'm Geoffrey Eaglescourt, son of the Baron Eaglescourt! Leader of the Red Riders, bane of bandits,\
and crusher of pirates!", "geoffrey_talk_3",[]],
[trp_npc17|plyr,"geoffrey_talk_3", [], "Oh, I see. And how many pirates have you killed?", "geoffrey_talk_4",[]],
[trp_npc17,"geoffrey_talk_4", [], "See for yourself! I scalp every one of the dogs I kill. They are my battle trophies.", "geoffrey_talk_5",[]],
[trp_npc17|plyr,"geoffrey_talk_5", [], "That's nice. I'll be going now.", "close_window",[]],

C'est la totalité du codage d’une conversation possible -- un petit échange entre Geoffrey et le joueur. Rien d’important ne se produit encore, mais nous sommes sur le point d'ajouter plus de choses à cet échange. Ajoutez les deux tuples suivants au dialogue :
[trp_npc17|plyr,"geoffrey_talk", [], "Nothing, never mind.", "close_window",[]],
[trp_npc17|plyr,"geoffrey_talk", [(check_quest_active,"qst_mod_trouble"),(quest_slot_eq,"qst_mod_trouble",slot_quest_current_state,0)],
"You look familiar. Haven't I seen your face in a pigsty before?", "geoffrey_hostile",[]],
[trp_npc17|plyr,"geoffrey_talk", [], "And who are you supposed to be?", "geoffrey_talk_2",[]],
[trp_npc17,"geoffrey_talk_2", [], "Why, I'm Geoffrey Eaglescourt, son of the Baron Eaglescourt! Leader of the Red Riders, bane of bandits,\
and crusher of pirates!", "geoffrey_talk_3",[]],
[trp_npc17|plyr,"geoffrey_talk_3", [], "Oh, I see. And how many pirates have you killed?", "geoffrey_talk_4",[]],
[trp_npc17,"geoffrey_talk_4", [], "See for yourself! I scalp every one of the dogs I kill. They are my battle trophies.", "geoffrey_talk_5",[]],
[trp_npc17|plyr,"geoffrey_talk_5", [], "That's nice. I'll be going now.", "close_window",[]],
[trp_npc17|plyr,"geoffrey_talk_5", [(check_quest_active,"qst_mod_trouble"),(quest_slot_eq,"qst_mod_trouble",slot_quest_current_state,0)], "Really?\
Those scalps look suspiciously like horse tails to me.", "geoffrey_hostile",[]],

Ces deux lignes créeront des choix supplémentaires de menu pour les dialogue-state débuts "geoffrey_talk" et "geoffrey_talk_5", respectivement. Techniquement, il n’est pas possible d’importer dans les module_dialogs des tuples avec le même dialog-state début. Le système de dialogue les trouvera tous si les conditions sont réunies, et les ajoutera aux options de menu. Cependant, vous devriez essayer de regrouper des tuples de menu afin de maintenir votre code clair et lisible.
Le dispositif le plus remarquable de ces lignes est leurs blocs de condition. Une ligne apparaîtra comme option dans le dialogue si la requête "qst_mod_trouble" est active et si le ‘slot’ de quête "slot_quest_current_state" est égal à 0. Si l'une ou l'autre de ces conditions n'est pas validée, la ligne ne sera pas affichée.
Maintenant, copiez et collez ces derniers tuples :
[trp_npc17,"geoffrey_hostile", [], "What?! I'll see you dead for that insult, peasant! Don't you know who I am?", "geoffrey_hostile_2",[]],
[trp_npc17|plyr,"geoffrey_hostile_2", [], "No . . . Was I supposed to remember?", "geoffrey_hostile_3",[]],
[trp_npc17,"geoffrey_hostile_3", [], "Why, I'm Geoffrey Eaglescourt, son of the Baron Eaglescourt, and you have delivered the gravest\
insult to my family's honour! I demand satisfaction! Meet me outside the town walls at noon, or you will be known a coward to every\
man in this countryside. Good day, {knave/wench}.", "geoffrey_hostile_4",[]],
[trp_npc17|plyr,"geoffrey_hostile_4", [], "Charming lad. Noon, eh? I shouldn't miss it...", "close_window",
[(quest_set_slot,"qst_mod_trouble",slot_quest_current_state,1)]],


Le système de dialogue affichera également des mots identifiables en genre (Ndlr : Masculin ou féminin). Dans la ligne "geoffrey_hostile_3", l'affichage dans le dialogue des mots ' knave “or” wench ' ('valet «ou» gamine') dépendra du genre du joueur.
A présent cela étant dit, nous avons maintenant une conversation avec plusieurs conditions et conséquences requête-connexes, c’est un tuple prêt à l'emploi pour une requête ; mais nous avons à créer encore les conditions qui permettront au joueur d'activer la quête en premier lieu. Nous ferons cela dans le prochain paragraphe.
En attendant, vous pouvez lancer build_module.bat et aller rencontrer Geoffrey, pour voir comment se passe la conversation.

9.4 -- Dialogue et Quêtes

En ajoutant de nouvelles lignes à une conversation existante, nous devons faire très attention que nos nouveaux tuples se combinent bien avec celles déjà en place.
Rappelez-vous que le dossier de dialogue est balayé de haut en bas ; rappelez-vous de vérifier vos blocs de conditions ; de bien vérifier votre syntaxe. Un mot mal écrit peut provoquer le rejet de blocs entiers de code. Contrôlez souvent votre module de sorte que vous puissiez déceler toutes les erreurs de syntaxe le plus tôt possible.
D'abord, nous allons ajouter un tuple de plus pour Geoffrey, et nous allons l'ajouter avant toutes les autres lignes. Cela signifie qu'il sera considéré en premier par rapport aux autres lignes. Si les conditions de ce tuple sont présents, il sera choisi indépendamment de tous les autres qui pourraient éventuellement être rencontrés.
Actuellement, voici le premier tuple de Geoffrey :
[trp_npc17,"start", [], "What? What do you want? Leave me be, pesant, I have no time for beggars.", "geoffrey_talk",[]],

Maintenant, copiez le tuple suivant et collez-le dans votre fichier de dialogues positionnez-le au-dessus du tuple mentionné ci-dessus :
[trp_npc17,"start", [(quest_slot_eq,"qst_mod_trouble",slot_quest_current_state,1)],
"Noon time, {knave/wench}. I will deal with you then...", "close_window",[]],

Avec ce tuple en place, normalement la conversation de Geoffrey s'arrêtera une fois qu'il vous aura défié en duel. De cette façon, vous pouvez changer les conversations selon leur situation, et créer des variétés infinies de dialogue avec des blocs de conditions pour contrôler quand chaque ligne apparaîtra.
Puisque les conversations des versions plus anciennes de M&B ne sont plus disponibles, nous devrons les mettre dans un dialogue de base qui apparaîtra au moment où vous parlerez à l’agent de police Hareck. Nous ajouterons son dialogue après celui de Geoffrey. Ces 2 lignes feront l’affaire:
[trp_hareck,"start", [], "Yes? Can I help you?", "hareck_talk",[]],
[trp_hareck|plyr,"hareck_talk", [], "Nothing. Good-bye.", "close_window",[]],

"hareck_talk" est un dialog-state de menu qui peut avoir plusieurs options, dont ce tuple sera le dernier. Normalement avant que cette option de dialogue puisse apparaître dans le menu au-dessus de celui-ci, au-dessus nous devons ajouter dans des module_dialogs ce tuple.
Copiez le tuple suivant et collez-le entre les deux tuples mentionnés ci-dessus. Nous devons garder le premier dialogue de "start" ("début") de Hareck au dessus :
[trp_hareck|plyr,"hareck_talk",[(neg|check_quest_active,"qst_mod_trouble"),(neg|check_quest_finished,"qst_mod_trouble")],
"Is something wrong? You look worried.", "hareck_troublemakers",[]],

Ce tuple sera affiché uniquement si la quête "qst_mod_trouble" n'est pas  activée et non accomplie. C'est dû au préfixe de négation neg|, qui provoque la condition négative ou opposée à l'opération qui est exigée normalement. Par exemple, l'opération de condition eq exige deux valeurs égales ; neg|eq exige des valeurs non égales. Maintenant, juste au-dessous de ce nouveau tuple, copiez et collez les tuples suivants.

Nous ne garderons que le tuple “Nothing, Good-bye” en bas de tous les tuples du dialogue de Hareck :
[trp_hareck,"hareck_troublemakers", [], "Oh, it's nothing, just . . .", "hareck_troublemakers_2",[]],
[trp_hareck|plyr,"hareck_troublemakers_2", [], "You can tell me, sir.", "hareck_troublemakers_3",[]],
[trp_hareck,"hareck_troublemakers_3", [], "No harm in it, I suppose. The trouble is, a few of the town's young nobles . . .\
Spoiled dandies and fops, the lot of them . . . they've decided that suddenly they're men to be respected, and that they\ should 'take matters into their own hands', to 'take action where the official government has failed'. They say they're going\ to kill all the river pirates that have been troubling Zendar of late. Of course, they've not actually gone out to fight any river\
pirates, but they've been making a great ruckus in town and there's not a thing I can do about it.", "hareck_troublemakers_4",[]],
[trp_hareck|plyr,"hareck_troublemakers_4", [], "Hmm . . . Would there be a reward for solving this problem?", "hareck_troublemakers_5",[]],
[trp_hareck,"hareck_troublemakers_5", [], "What? What are you saying?", "hareck_troublemakers_6",[]],
[trp_hareck|plyr,"hareck_troublemakers_6", [], "Nothing, sir. However, it sounds to me like a neutral third party might be just\
what you need. I could talk to them.", "hareck_troublemakers_7",[]],
[trp_hareck,"hareck_troublemakers_7", [], "Heh. Well, you can try, friend. If you manage to do any good, I'll even throw in a\ few coins for getting the sand out of my breeches. Their leader is a boy named Geoffrey, spends most of his time on\ watered-down ale and whores. Chances are you'll find him up the stairs in the back.", "hareck_troublemakers_8",[]],
[trp_hareck|plyr,"hareck_troublemakers_8", [], "Thank you, constable. I shall return.", "close_window",
[(setup_quest_text,"qst_mod_trouble"),(start_quest,"qst_mod_trouble"), (quest_set_slot,"qst_mod_trouble",slot_quest_current_state, 0)]],
[trp_hareck|plyr,"hareck_talk",
[(check_quest_active,"qst_mod_trouble"),(quest_slot_eq,"qst_mod_trouble",slot_quest_current_state,3)],
"Constable, I've taken care of the toublemakers for you. They shouldn't be a worry any longer.", "hareck_troublemakers_10",[]],
[trp_hareck,"hareck_troublemakers_10", [], "Truly? Thank God! A few more days and I would've thrown them all into a cell and thrown\
away the key. Here, take this. You've earned it.","hareck_troublemakers_11",
[(troop_add_gold,"trp_player",100),(add_xp_as_reward,750),(succeed_quest,"qst_mod_trouble")]],
[trp_hareck|plyr,"hareck_troublemakers_11", [], "My pleasure, constable. If you've any other jobs that need doing, please let me know. Farewell.",
"close_window",[]],
[trp_hareck|plyr,"hareck_talk", [(check_quest_active,"qst_mod_trouble"),(quest_slot_eq,"qst_mod_trouble",slot_quest_current_state,4)],
"Constable, I failed. I'm sorry.", "hareck_troublemakers_15",[]],
[trp_hareck,"hareck_troublemakers_15", [], "Oh . . . Oh well. I suppose you did the best you could. Thanks anyway, friend. Perhaps some other\
job will suit you better. I shall let you know when I have any. Farewell.", "close_window",[(fail_quest,"qst_mod_trouble")]],

Le premier bloc défini la quête, expliquant les détails et comment la commencer. Le deuxième bloc finit la requête avec une petite récompense de pièces d'or et de points d'expérience, une fois que la requête ‘perte’ "slot_quest_current_state" a été réglée à 3, lorsque nous aurons neutralisé Geoffrey. Le troisième bloc termine la requête si le joueur ne réussi pas à vaincre Geoffrey
(en réglant "slot_quest_current_state" à 4), ce qui signifie qu'il ne recevra aucune récompense. Faut toujours vérifier que la requête soit activée. C'est un bon retour d'expérience qui vous oblige à nettoyer les variables.
Dans ce cas-là, même après que la quête soit terminée,  son slot_quest_current_state est toujours à 3 ou à 4, ce qui signifie que les dialogues de fin continueraient à être employés puisque l'essai serait vrai.
Une dernière chose que nous allons lui ajouter. Nous voulons que Geoffrey agisse différemment quand il est confronté à un duel. Pour que cela fonctionne, nous aurons besoin d'un indicateur présent sur lez terrain et prêt à se battre en duel. Nous l’emploierons quand "slot_quest_current_state" sera placé à 2 faites-nous savoir quand nous devrons employer les dialogues suivants, que nous mettrons au dessus du groupe de dialogue de Geoffrey. Ceci sera réglé plus tard :
[trp_npc17,"start", [(quest_slot_eq,"qst_mod_trouble",slot_quest_current_state,2)],
"You have come to meet your doom, {knave/wench}...","geoffrey_duelling",[]],
[trp_npc17|plyr,"geoffrey_duelling", [], "Let's get this over with...",
"close_window",[(quest_set_slot,"qst_mod_trouble",slot_quest_current_state,4)]],

Nous assignerons également "slot_quest_current_state" à 4. Souvenez-vous que l’état d’échec est fixé à 4 pour la quête. C'est pour vous assurer que lorsque vous commencerez le combat avec Geoffrey, ou bien vous gagnez (et l'état passe à 3 ce qui sera un succès), ou vous échouez. Comme vous pouvez le voir, il peut prendre en fait tous les aspects possibles d'une quête. Les nôtres sont à moitié terminées. Le plus gros du dialogue est maintenant en place, à présent nous sommes prêts à passer à la prochaine partie de cette documentation, où nous manipulerons les "triggers" déclenchements et les modifications de variables.


(Traduit par lolitablue.)

Bon jeu!!