Page 1 sur 1

[DLG] Comment utiliser les CHAIN... les BEGIN ?

Posté : mer. 13 mars 2013, 11:05
par Klare
Alors voila, je me suis lancé dans l'ajout d'un marchand dans mon mod... seulement voila, j'ignore tout à fait comment faire pour que mon premier personnage, Klare, intervienne dans le dialogue.

J'ai donc pensé à la commande CHAIN présentée ici. Sauf que... Je ne comprend pas tout (ou je ne comprend pas du tout).

Le BEGIN des deux NPC doivent toujours être dans le même bloc texte ? Mais pourquoi s'ils sont compilés ensuite ?

Ou bien, je peux utiliser mon plan actuel, faire un .D pour les deux personnages et juste utiliser CHAIN dans le bloc .d du marchand pour appeler Klare ?

Ce qui me donnerait des blocs :

Code : Tout sélectionner

BEGIN "CKHele"

IF ~True()~ THEN BEGIN Elayne01
 SAY ~Encore a fouiller dans les poches d'Helene?~
 IF ~~ THEN REPLY ~Oui.~ DO ~StartStore("CKhele", LastTalkedToBy())~ EXIT
 IF ~~ THEN REPLY ~Non, pas maintenant.~ EXIT
END

BEGIN "CKHelF"

IF ~True()~ THEN BEGIN Croc01 
 SAY ~Grrrrr~
 IF ~~ THEN EXTERN ~CKHele~ ICI
END

CHAIN IF ~~ THEN "CKHele" ICI
 ~La ferme Croc~
END
IF ~~ THEN EXTERN ~CKHelf~ Croc02

IF ~~ THEN BEGIN Croc02 
 SAY ~*couinne*~
 IF ~~ THEN EXIT
END
Ce qui dans ma tête donne :
On parle avec Croc CKhelF
On obtient :
une phrase de Croc, une de Helene, une nouvelle de Croc?

En pratique :
Error Weidu, try again ^^

En clair, c'est 100% CHAIN ou rien?

Posté : mer. 13 mars 2013, 13:03
par Armand
La méthode 100% CHAIN (que j'ai passablement vendu dans mes tutos alors je vais pas forcément trés impartial) permet entre autre de ne pas s’embêter avec l'ordre de compilation. En fait tu génère des dlg via les begin contenu dans tes d et par conséquent ils se compilent dans l'ordre où tu compiles les d dans ton tp2. Donc c'est vrai qu'à titre personnel j'ai tendance à mettre mes BEGIN en début de fichier et de tout faire en chain afin d'organiser mon fichier comme je l'entends. Mais en theorie tu peux parfaitement melanger les deux du moment que tu ecri sà l'intérieur de tes BEGIN lorsque tu place tes IF.

Je ne saurais d'emblée pas te dire d'ou vient l'erreur peut etre de tes EXTERN (ici un GOTO suffirait) et vu que tu code en if sur cette partie peut etre que c'est ça qui pose problème. Peut etre que si tu fourissait l'erreur que te renvois weidu on pourrait t'aider...

Par ailleurs je ne comprend pas ton utilisation d'un CHAIN en plein milieu ici alors que tu ne t'en servais pas jusqu'alors ?

Posté : mer. 13 mars 2013, 13:33
par Klare
Et bien l'objectif du CHAIN etait de faire parler le PNJ CKhele au milieu du dialogue prevue entre CKhelf et CHARNAME lorsque celui ci embete la bete.


L'idée etant que, CHARNAME lance le dialogue avec un personnage : CkhelF

CkhelF lui reponde agressivement,
Un autre personnage CKhele, situé a coté lui donne l'ordre de se coucher,
le pnj CkhelF se couche

Fin du dialogue

Or, j'ai cru comprendre [notament avec ton tuto] que c'etait CHAIN qui permetait d'aller arracher des paroles a d'autres PNJ justement.
Pour le message d'erreur, je modifirai le .d dans l'apres midi pour la retrouver.

Posté : mer. 13 mars 2013, 13:36
par Freddy_Gwendo
Si tu tu contentes de ces seules lignes de dialogue et que tu débutes dans le modding, oublie les CHAIN.

Ce qui ne fonctionne pas dans ton dialogue, c'est que tu appelles des blocs inexistants. Par exemple, IF ~~ THEN EXTERN ~CKHele~ ICI appelle le bloc ICI du fichier CKHele.dlg. Or ce bloc n'existe pas puisque tu l'as créé dans le fichier CKHelf.dlg.


Pour tes lignes, le codage "basique" serait celui-ci :

Code : Tout sélectionner

BEGIN ~CKHele~

IF ~True()~ THEN BEGIN Elayne01
 SAY @1 //~Encore a fouiller dans les poches d'Helene?~
 IF ~~ THEN REPLY @2 DO ~StartStore("CKhele", LastTalkedToBy())~ EXIT // ~Oui.~ 
 IF ~~ THEN REPLY @3 EXIT // ~Non, pas maintenant.~ 
END

IF ~~ THEN BEGIN ICI
 SAY @4 //~La ferme Croc~
END
IF ~~ THEN EXTERN ~CKHelf~ Croc02

BEGIN ~CKHelF~

IF ~True()~ THEN BEGIN Croc01 
 SAY @5 //~Grrrrr~
 IF ~~ THEN EXTERN ~CKHele~ ICI
END

IF ~~ THEN BEGIN Croc02 
 SAY @6 //~*couinne*~
 IF ~~ THEN EXIT
END

Si tu souhaites utiliser les blocs CHAIN, il faut déclarer l'ensemble des dialogues à utiliser au début du fichier .d,

BEGIN ~CKHele~
BEGIN ~CKHelF~

puis passer de l'un à l'autre dans les blocs CHAIN comme indiqué dans le [Thread=26182]tuto d'Armand[/thread].

Posté : mer. 13 mars 2013, 16:31
par Klare
Merci a vous deux, j'arrive desormais a faire parler mes PNJ comme je l'ai voulu.

Petit point etrange, les accents ne semble pas passer dans le dialogues des NPC [ é > @trucmachin ]
alors que ca fonctionne tres bien dans les dialogues du PNJ recrutable, une fausse manipulation de ma part?

EDIT : Nouveau probleme rencontré, EXTERN ca fonctionne tres bien du moment que je travaile sur un même document .D, lorsque j'ai essayer de faire intervenir Klare depuis sont .D et son CKlareJ, c'est le drame, Weidu ne veut plus.

J'essaye avec mon dialogue remodifier pour que les deux PNJ interviennent entre eux, plus de soucis. EXTERN est donc limité ?

Posté : mer. 13 mars 2013, 19:32
par Freddy_Gwendo
Je ne suis pas certain d'avoir saisi ton problème.

Mais si par exemple tu souhaites faire intervenir CKHele dans un dialogue de Klare en utilisant EXTERN, tu dois procéder ainsi :

Code : Tout sélectionner

dialogue de Klare

IF ~~ THEN BEGIN BONJOUR
 SAY ~Bonjour~
 IF ~~ THEN EXTERN ~CKHele~ BONJOUR REP
END



[color="#FFFF00"]APPEND ~CKHele~[/color] 
IF ~~ THEN BEGIN BONJOUR REP
 SAY ~Toi même !~
... <-- Tu continues le dialogue comme tu l'entends
END

[color="#FFFF00"]END[/color] // END supplémentaire pour la fin de la procédure APPEND
Ceci ne fonctionne que si tu as déjà créé le fichier CKHele ailleurs.

Posté : mer. 13 mars 2013, 19:45
par Klare
Ca a resolu mon probleme, merci !
[Ca va m'aider pour la suite cette commande... ]

Une idée quant a l'origine du bug d'affichage des lettres? [au pire je retire les accents.]

Posté : jeu. 14 mars 2013, 00:38
par Freddy_Gwendo
Désolé, mais là, je n'ai aucune soluce.

D'ailleurs, je n'ai jamais rencontré ce genre de problème sauf la restriction bien connue des caractères spéciaux (oe, etc...) qu'il faut éviter à tout prix.

Peut-être as-tu installé un mod qui modifie les fonts ?

Je pense que quelqu'un plus au fait des différents mods graphiques pourrait te répondre.

Posté : jeu. 14 mars 2013, 22:49
par Isaya
Klare a écrit :Petit point etrange, les accents ne semble pas passer dans le dialogues des NPC [ é > @trucmachin ]
alors que ca fonctionne tres bien dans les dialogues du PNJ recrutable, une fausse manipulation de ma part?
La présence d'une combinaison @ et d'un autre caractère bizarre est révélatrice d'un texte encodé en UTF8. Je ne sais pas quel éditeur tu utilises pour tes textes, mais il est manifestement configuré pour écrire les caractères spéciaux de cette façon. Je suppose que tu as employé des éditeurs différents pour tes fichiers de dialogue ou tra, ou que tu as repris un fichier qui était avec le mauvais encodage.

Avec un éditeur comme Notepad++, tu peux non seulement choisir l'encodage (il faut ANSI pour les vieux jeux Infinity Engine) mais tu peux aussi visualiser quel encodage il considère qu'un fichier utilise. Par contre il ne va pas convertir tes textes existants d'UTF8 vers ANSI, même si tu demandes à changer l'encodage. Il existe des outils pour ça, iconv sous Linux et Cp Converter sous Windows notamment. Liens trouvables avec n'importe quel bon moteur de recherche.

Posté : jeu. 14 mars 2013, 23:26
par Klare
C'etait bien ca, je pense que mon probleme est donc reglé.

Merci de l'information.