Page 1 sur 1

[DLG] Comment forcer un dialogue entre Charname et un PNJ avec le bouton Dialogue ?

Posté : sam. 21 avr. 2012, 13:19
par Klare
Bonjour/Bonsoir

Problème du jour, je suis pas fichu de lancer un dialogue entre mon NPC et CHARNAME une fois le recrutement terminé.
La bestiole a finalement une intro fonctionnelle, etc etc et je comptais passer a la partie deux le dialogue 'forcé'. (Point de banter pour le moment, j'ai plus d’intérêt au sujet de la commande dialogue tout bête)

Idée : pouvoir lancer un bloc de dialogue lorsque le PJ souhaite parler au NPC pour l’interroger/perdre son temps/l'insulter.
Puis partir de ce bloc pour offrir de nouvelles options de dialogues et faire réagir un minimum le compagnon.

Sauf que, petit hic : Je ne parviens pas a lancer un bloc de dialogue avec la commande de dialogue 'forcé'. Du coup mon NPC n'a "rien a dire" à CHARNAME... petite ordure de reptile paresseux.

J'ai beau fouiner je n'ai pas encore trouver comment faire fonctionner cette commande, apparemment ça marcherai avec des triggers mais... comment? ^^ "

Merci de votre attention et de votre éventuelle (et particulièrement espérée) aide ^^

Posté : sam. 21 avr. 2012, 14:08
par Freddy_Gwendo
Je ne suis pas certain d'avoir compris ta question.

Mais tu as deux manières principales de lancer un dialogue. Les deux impliquant des variables :

Code : Tout sélectionner

Fichier .baf
IF
  NumTimesTalkedTo(0) // Compteur de discussion
  See(Player1)
  Range(Player1,20)
THEN
  RESPONSE #100
    SmallWait(1)
    FaceObject(Player1)
    SmallWait(1)
    StartDialogueNoSet(Player1)
END

puis Fichier .D
IF ~NumTimesTalkedTo(0)~ THEN BEGIN 0
 SAY ~blabla.~
  IF ~~ THEN REPLY ~blabla1~ GOTO 1
  IF ~~ THEN REPLY ~blabla2~ GOTO 1
  IF ~~ THEN REPLY ~blabla3~ GOTO 3
END

ou

Fichier .baf
IF
  Global("GWMove","LOCALS",2) // Variable
  See(Player1)
THEN
  RESPONSE #100
    SmallWait(1)
    FaceObject(Player1)
    StartDialogueNoSet(Player1)
END

Fichier .D
IF ~Global("GWMove","LOCALS",2)~ THEN BEGIN 0
 SAY ~blabla.~
  IF ~~ THEN REPLY ~blabla1~ DO ~SetGlobal("GWMove","LOCALS",3)~ GOTO 1 // Variable mofifiée pour éviter des boucles infinies du Dialogue
  IF ~~ THEN REPLY ~blabla2~ DO ~SetGlobal("GWMove","LOCALS",3)~ GOTO 1
  IF ~~ THEN REPLY ~blabla3~ DO ~SetGlobal("GWMove","LOCALS",4)~ GOTO 3
END

Tu peux aussi mixer les deux :

Code : Tout sélectionner

Fichier .baf
IF
  Global("GWMove","LOCALS",2) // Variable
  See(Player1)
  NumTimesTalkedTo(0)
THEN
  RESPONSE #100
    SmallWait(1)
    FaceObject(Player1)
    StartDialogueNoSet(Player1)
END

Fichier .D
IF ~Global("GWMove","LOCALS",2) NumTimesTalkedTo(0)~ THEN BEGIN 0
 SAY ~blabla.~
  IF ~~ THEN REPLY ~blabla1~ DO ~SetGlobal("GWMove","LOCALS",3)~ GOTO 1 // Variable mofifiée pour éviter des boucles infinies du Dialogue
  IF ~~ THEN REPLY ~blabla2~ DO ~SetGlobal("GWMove","LOCALS",3)~ GOTO 1
  IF ~~ THEN REPLY ~blabla3~ DO ~SetGlobal("GWMove","LOCALS",4)~ GOTO 3
END


Dans ce cas, tu n'es pas obligé de changer la variable GWMove, puisqu'à la fin du dialogue, le compteur NumTimesTalkedTo sera passé à 1.

1. Les possibilités sont infinies, le but du jeu étant de définir tes variables dans un fichier baf :
  • Soit dans celui de ton perso (KLARE.baf par exemple). Dans ce cas, tu peux utiliser toutes sortes de variables de types Global("Nom Variable","LOCALS",n) avec LOCALS s'appliquant uniquement au perso concerné, Global("Nom Variable","Nom de la Zone",n) qui ne s'applique que dans la zone (ou carte) concernée (par ex. "AR2500"), Global("Nom Variable","GLOBAL",n) qui gère une variable globale pouvant intervenir n'importe où dans tout le jeu.
  • Soit dans celui d'une autre créature ou d'une carte.

2. Ensuite, tu utilises ces variables comme conditions de démarrage du dialogue :
  • IF ~Global("Variable1","LOCALS",1)~ THEN BEGIN 0 : le dialogue commence à cette ligne lorsque Variable1 = 1 pour le personnage qui initie le dialogue.
  • IF ~Global("Variable2","AR9999",2)~ THEN BEGIN 2 : le dialogue commence à cette ligne lorsque Variable2 = 2 et que tu te trouves dans la carte AR9999.
  • IF ~Global("Variable3","GLOBAL",3)~ THEN BEGIN 8 : le dialogue commence à cette ligne lorsque Variable3 = 3 n'importe où dans le jeu.
Là encore, pour simplifier, je ne t'ai donné que des exemples simples impliquant une seule variable, mais tu peux en rajouter d'autres, comme l'assurance que le perso à qui tu t'adresses est disponible (pas mort, pas endormi, pas immobilisé...), est dans les parages (sinon, c'est un peu lourdingue), sans compter des combinaisons de variables différentes...
Bref, les possibilités sont infinies. La seule régle importante est que tu les reprennes dans tes dialogues et surtout que tu n'oublies pas de les modifier à la sortie du dialogue, sinon tes persos recommenceront à lancer le dialogue en boucle !
Et surtout, n'oublie-pas les "". Sans quoi, tu auras droit à des erreurs de compilation !

En espérant que cela réponde à ta question.

Posté : sam. 21 avr. 2012, 14:20
par Akadis
Petite précision concernant le fichier .D du deuxième exemple et du mix. L'instruction dans le DO est SetGlobal et non Global
Fichier .D
IF ~Global("GWMove","LOCALS",2) NumTimesTalkedTo(0)~ THEN BEGIN 0[INDENT]SAY ~blabla.~
IF ~~ THEN REPLY ~blabla1~ DO ~SetGlobal("GWMove","LOCALS",3)~ GOTO 1 // Variable mofifiée pour éviter des boucles infinies du Dialogue
IF ~~ THEN REPLY ~blabla2~ DO ~SetGlobal("GWMove","LOCALS",3)~ GOTO 1
IF ~~ THEN REPLY ~blabla3~ DO ~SetGlobal("GWMove","LOCALS",4)~ GOTO 3
[/INDENT]
END

Posté : sam. 21 avr. 2012, 14:53
par Freddy_Gwendo
Akadis a écrit :Petite précision concernant le fichier .D du deuxième exemple et du mix. L'instruction dans le DO est SetGlobal et non Global
Oups ! :$

Autant pour moi. Désolé, ça m'apprendra à ne pas vérifier mes copier-coller...
Je modifie le message en conséquence.

Merci pour ta vigilance, Akadis.

Posté : sam. 21 avr. 2012, 15:04
par Klare
Donc (jai pas encore tout decortiquer mais me semble que : )
► Afficher le texte
C'est ce que j'utilise plus ou moins pour les dialogues lorsque mon NPC s'adresse au PJ :
A savoir quand il le croise, quand il est foutu dehors, qu'il est resolicité etc

La question que je me pose c'est comment pouvoir utiliser le bouton de dialogue (En bas a gauche) quand mon PNC est dans l'equipe pour que le PJ puisse lui parler quant il le souhaite.
Si j'ecris les conditions telles que je les connais deja c'est mon NPC qui va initier le dialogue non? Ou bien je dois jongler avec son script pour lui donner une condition qui le rend pret a parler, mais qui ne prendra pas l'initiative du dialogue?

(Oui je sais, c'est confus...)

Posté : sam. 21 avr. 2012, 15:35
par Freddy_Gwendo
Pour être franc, il y a une éternité que je n'ai pas rebossé sur les dialogues. Pour l'instant, je ne fais que des tests rapides sur des parties de dialogue de mon mod et je ne me suis pas encore attaqué au gras de la chose.

Mais de mémoire, si tu veux initier des dialogues entre tes persos avec le bouton "Dialogue" de l'écran, le principe est le même, en sachant que tu peux aussi jouer sur les WEIGHT #n, à rajouter en début de condition des lignes de dialogue, pour imposer un ordre d'apparition des sujets de discussion.

Le plus simple, pour t'y retrouver, c'est de visualiser un fichier de dialogue déjà existant et d'aller vérifier dans les scripts correspondants comment les variables sont définies. Je pense notamment aux dialogues de banters et de romance. Tu y trouveras sans doute ton bonheur.
N'oublie-pas que la plupart des problèmes que l'on rencontre en moddant ont déjà été résolus et que l'étude de l'existant offre bien des solutions...

Posté : sam. 21 avr. 2012, 17:26
par Isaya
Le principe fondamental pour que le personnage principal puisse forcer un échange avec un PNJ, c'est justement que le PNJ en question n'ait rien à dire au personnage principal à l'instant en question. Sinon c'est la réplique que le PNJ devait prononcer qui va se déclencher.

En d'autres termes, le cas où le personnage principal peut s'exprimer (principe des flirts dans les mods de romance), c'est justement qu'aucune des conditions présentes dans les IF ~condition~ THEN du dialogue du PNJ n'est vérifié. Cela correspond donc au pseudo-cas IF ~False~ THEN (aucune condition de vérifiée), sauf que ce n'est pas vraiment possible d'écrire cela comme ça.

Un des mods qui utilise ce principe est BG1 NPC Project pour le composant "dialogues initiés par le joueur". Dans ce mod, c'est le fichier x#pcinit.d qui gère tous les cas. Si on élimine le code de compatibilité BGT, cela donne la chose suivante :

Code : Tout sélectionner

APPEND ~PersoJ~

IF ~IsGabber(Player1)~ THEN BEGIN InterpellationPJ
	SAY ~*Perso vous semble perdu dans ses pensées. Peut-être est-ce le moment de lui poser la question qui vous brûle les lèvres ?*~
	IF ~~ THEN REPLY ~*Vous décidez que ce n'est pas le moment.*~ EXIT
	IF ~~ THEN REPLY ~Blabla (discussion accessible autant de fois qu'on veut, donc sans condition)~ EXIT
	IF ~condition particulière, Perso a été blessé~ THEN REPLY ~Est-ce que tu as bien récupéré ?~ DO ~SetGlobal de variable si nécessaire~ GOTO RecuperationBlessure
	...
END
On vérifie d'abord que le joueur a bien sélectionné le personnage principal avant de parler. Ensuite, comme un dialogue débute forcément par une réplique du personnage dont c'est le fichier dialogue (donc ici le PNJ) puisque le personnage principal n'a pas de fichier dialogue, on utilise une forme descriptive à la place d'une réplique, puis on donne la main au joueur pour le choix des sujets de conversation, sous forme de réponses classiques.

Posté : sam. 21 avr. 2012, 18:12
par Klare
Merci pour les explications.
(J'ai par contre comme l'impression qu'il manque un bout de ton texte Isaya ^^ )

Bon je pense avoir saisit l'idée de créer une situation ou le PNJ ne fait 'rien' pour pouvoir l'utiliser comme source mais la la commande APPEND ~PersoJ~ m'echape un peu.

Deja, elle plante mon weidu présentée tel quelle (j'ai oublier quelque chose?)

J'ai donc tenter de la transformer en BEGIN "#ZKlareJ" (histoire de copier les modèles BEGIN "#ZKlare" BEGIN "#ZKlareP" que j'utilise pour déterminer ma zone d'introduction au dialogue, et celle pour le rerecrutement)
Sans succès.

J'arrive toutefois a compiler maintenant que APPEND a disparu donc c'est bien la fonction qui me bloque l'installation du mod.

Posté : sam. 21 avr. 2012, 19:43
par Freddy_Gwendo
APPEND sert à modifier un fichier de dialogue déjà existant.

Si tu as écrit APPEND #KLARE alors que #KLARE.d n'existe pas, forcément, WeiDU n'apprécie pas du tout.

Cette commande est souvent utilisée lorsque tu rajoutes des lignes ou des options de réponses à des dialogues existants, lorsque tu modifies carrément des lignes de dialogue existantes, ou bien encore, lorsque, comme moi, tu organises une partie des dialogues selon leur thématique.
En l'occurrence, tous les dialogues de mes Dragons rouges sont dans le même fichier. Mais pour rajouter une rencontre aléatoire plus tard dans la campagne, j'utilise alors le APPEND GWDgnRg2 pour rajouter des lignes à ce dialogue car c'est plus facile à coder à ce moment-là que si je l'avais fait plus tôt.

C'est pourquoi, le changement d'APPEND #ZKlareJ en BEGIN #ZKlareJ a résolu ton problème : tu ne pouvais pas modifier un fichier qui n'existait pas !

Posté : sam. 21 avr. 2012, 22:29
par Akadis
Une autre possibilité qui fait planter la compilation d'un fichier .d contenant un APPEND est l'absence de l’instruction END a la fin de l'APPEND. En effet un APPEND doit se terminer par un END. C'est comme pour le
IF ~~ THEN BEGIN Label

Exemple :

Code : Tout sélectionner

BEGIN ~Dialogue1~

IF ~Global("Variable1","GLOBAL",1)~ THEN BEGIN Label1[INDENT]SAY ~Blabla1~
IF ~~ THEN REPLY ~Réponse0101~ GOTO 0101
IF ~~ THEN REPLY ~Réponse0102~ GOTO 0102
[/INDENT]
END

...

APPEND ~Dialogue9~[INDENT]IF ~Global("Variable1","GLOBAL",9)~ THEN BEGIN Label1
[/INDENT]
[INDENT=2]SAY ~Blabla9~
IF ~~ THEN REPLY ~Réponse0901~ GOTO 0901
IF ~~ THEN REPLY ~Réponse0902~ GOTO 0902[/INDENT]
[INDENT]END
[/INDENT]
[INDENT]
[/INDENT]
...

[color=#ff0000]END [/color]// Fin du append

Posté : sam. 21 avr. 2012, 23:53
par Klare
Merci pour vos reponse (j'ai encore pas mal de chose a bien saisir sur cette nouvelle commande de modification mais je reverais ca...)

Dans l'etat actuel des choses j'ai toutefois noté
Freddy : tu ne pouvais pas modifier un fichier qui n'existait pas !

Donc je suis partit sur l'hypothese que je pouvais tenter de jongler avec un code normalement prevu pour le flirt et l'utiliser pour ma bestiole. (CF http://www.baldursgateworld.fr/lacouronne/outils-et-tutoriels-pour-linfinity-engine/11691-tutorial-ecriture-de-romance.html tuto romance de la CdC)

Si j'ai saisit le tuto, il faut deux elements :

Le dialogue du NPC libre de toutes ses conditions :
► Afficher le texte
Cette chose me servira de base pour mes autres dialogues comme disait Isarya

Et apparement la modification du script de mon NPC pour qu'il permette l'acces au dialogue.
La j'ai comme proposition :
► Afficher le texte
Allegé pour mes objectifs en :
► Afficher le texte
Or cette vilaine chose fait planter mon Weidu
► Afficher le texte
La j'avoue ne pas comprendre (encore vous me direz.) Je vais relire le tutorial j'ai peu être mal vu/saisit/compris quelque chose

Posté : dim. 22 avr. 2012, 00:10
par Isaya
Klare, je n'ai jamais prétendu que le code que j'indiquais était utilisable tel quel. J'ai fait référence explicitement au code du mod BG1 NPC Project, en le schématisant pour montrer le principe.

Comme je l'ai indiqué, ce genre de textes vient forcément en complément des banters dont dispose le PNJ (cf ce que j'ai écrit sur le fait qu'il fallait que le PNJ n'ait rien à dire à ce moment-là pour que ça fonctionne).
Donc j'insiste : puisque c'est en complément, il faut impérativement que ces dialogues soit installés APRES les banters, sinon ils risquent de prendre le pas sur les banters que pourrait avoir le PNJ avec le personnage principal. D'ailleurs, dans le mod auquel j'ai fait référence, le composant "dialogues initiés par le joueur" s'installe forcément APRES les autres composants.

Comme l'ont dit mes camarades, APPEND sert à ajouter des dialogues à un dialogue existant. C'est donc pour cela qu'on l'emploie dans ce cas : il faut impérativement avoir créé avant le dialogue pour les banters (BEGIN ~PersoJ~ ...).

Edit (puisque j'ai commencé à répondre avant de voir ton message) :

Ton problème de script vient probablement du fait que tu as des * en début de ligne avant des commandes et ça ne fonctionne pas. Ces étoiles dans le tutoriel sont des artefacts que je soupçonne de provenir des conversions de bases de données lors de migration de logiciel du forum.

Le script de flirt ne sert à rien dans ton cas : c'est toi, en tant que joueur, qui forcera le début du dialogue. Un script sert, pour une romance, à faire en sorte que le PNJ décide d'entamer la discussion dans un contexte donnée, que ce soit pour un flirt ou un dialogue qui fait progresser la romance.

Posté : dim. 22 avr. 2012, 00:16
par Freddy_Gwendo
Désolé, je n'ai pas le temps de me plonger dans tes codes because l'appel du dodo, mais à priori, essaye :

Code : Tout sélectionner

StartDialogue(Player1)
à la place de

Code : Tout sélectionner

*StartDialogue(Player1)
* doit correspondre à un copier-coller de [TAB] ou quelque chose dans le genre. En tout cas, il fait planter WeiDU en début de ligne de commande d'action.
Chaque action doit être écrite selon ce format :

Code : Tout sélectionner

IF
  liste de conditions
THEN
  RESPONSE #100 (ou autre pourcentage)
    Action 1 (ex : CloseDoor("Door01"))
    Action 2 (ex : FaceObject(Player1))
    Action 3 (ex : StartDialogueNoSet(Player1))
    ....
END
Et pas

Code : Tout sélectionner

  *Action 1
ou quoi que ce soit devant ou accolé à l'intitulé de l'action.

Ça réglera sans doute (ou peut-être...) le problème du message d'erreur, mais comme l'a indiqué Isaya, je ne suis pas certain que ça résolve ta problématique de départ.

Posté : dim. 22 avr. 2012, 01:59
par Klare
Merci encore de vos conseils.

Petit bilan :
J'ai visiblement fait fausse route dans ma façon de faire [Notamment avec les flirtpacks que j'avais mal interprétés (comme me l'as indiqué une jolie boucle infinie de dialogue)]

Quote Isaya :
Comme je l'ai indiqué, ce genre de textes vient forcément en complément des banters dont dispose le PNJ (cf ce que j'ai écrit sur le fait qu'il fallait que le PNJ n'ait rien à dire à ce moment-là pour que ça fonctionne).
Donc j'insiste : puisque c'est en complément, il faut impérativement que ces dialogues soit installés APRES les banters, sinon ils risquent de prendre le pas sur les banters que pourrait avoir le PNJ avec le personnage principal. D'ailleurs, dans le mod auquel j'ai fait référence, le composant "dialogues initiés par le joueur" s'installe forcément APRES les autres composants.
Comme l'ont dit mes camarades, APPEND sert à ajouter des dialogues à un dialogue existant. C'est donc pour cela qu'on l'emploie dans ce cas : il faut impérativement avoir créé avant le dialogue pour les banters (BEGIN ~PersoJ~ ...).
Donc au final je ne peux pas utiliser APPEND pour creer le dialogue initial de Klare mais seulement modifier les dialogues selon conditions.
C'est un outil pratique mais cette facon de faire ne colle pas vraiment a mes objectifs initiaux... (ou alors je ne comprend pas le "comment")

Si je n'ai pas de moyen d'utiliser le bouton de dialogue de la barre du PJ sur mon NPC pour lancer un dialogue particulier je pense que je vais tenter de créer un script qui se basera sur la démarche suivante :

Utilisation item > Variable Global ON
Lancement script du NPC
Récupération de l'item si consomé
Variable Global OFF
Si NPC et PJ dispo > dialogue
Sinon > rien
fin

Ca prendra un emplacement dans l'inventaire du PJ en revanche mais je pense que ca peut marcher.

Posté : dim. 22 avr. 2012, 08:48
par Armand
Si je n'ai pas de moyen d'utiliser le bouton de dialogue de la barre du PJ sur mon NPC pour lancer un dialogue particulier je pense que je vais tenter de créer un script qui se basera sur la démarche suivante :

Utilisation item > Variable Global ON
Lancement script du NPC
Récupération de l'item si consomé
Variable Global OFF
Si NPC et PJ dispo > dialogue
Sinon > rien
fin
J'ai l'impression qu'on utilise un peu un buldozer pour écraser une mouche la. ¨¨ Pourrais tu me dire clairement ce que tu veux ? Tu veux déclencher le dialogue automatiquement ou pas ? Ou que ce soit charname qui l'initie ? Pourrais tu également nous copier coller ici ce que tu as déjà codé ? Qu'on soit un peu plus sur du concret...

Parce que la j'ai l'impression qu'on part dans des élucubrations sans rien avoir de concret sous la dent. Personnellement j'attends de voir ce que tu as à nous montrer mais je pense que la solution est beaucoup plus simple que ce qui a pu être dis. ;)

Posté : dim. 22 avr. 2012, 12:15
par Isaya
Klare a écrit :Donc au final je ne peux pas utiliser APPEND pour creer le dialogue initial de Klare mais seulement modifier les dialogues selon conditions.
C'est un outil pratique mais cette facon de faire ne colle pas vraiment a mes objectifs initiaux... (ou alors je ne comprend pas le "comment")
Puisque tu n'as pas encore créé de dialogue "J" pour ton personnage (si je comprends bien, tu le feras plus tard), remplace APPEND par BEGIN, de façon à créer le dialogue "J".

Mais ce qu'il faut bien que tu retiennes, c'est que lorsque tu voudras créer les banters, il faudra IMPERATIVEMENT que tu les places dans le fichier source du dialogue (le fichier .d) AVANT tout le bloc qui gère l'interpellation par le PJ.
La raison est simple : les banters doivent être en premier dans le fichier de façon à leur donner la priorité. Si tu mettais ton interpellation par le joueur en premier, le fait qu'elle ait des conditions "faibles", donc quasiment toujours vérifiées, feraient qu'elles empêcheraient l'apparition des répliques de banter, qui ont des conditions plus "fortes" (que l'autre PNJ soit là, que tel événement se soit produit, ...), à moins de recourir systématiquement au fameux WEIGHT pour les banters (ce serait une grosse complexité inutile de le faire).

Au final, on peut voir les choses comme ça, pour être certain de bien respecter l'ordre :
  1. tu fais un fichier d pour les banters, qui commence par BEGIN ~PersoJ~ et finit par le END correspondant au BEGIN de départ (c'est à dire, pas le END du dernier bloc IF ... END précédent), où tu écris tes banters ;
  2. tu fais un autre fichier d (ou tu mets tout le contenu en question tout à la fin du précédent fichier), qui commence par APPEND ~PersoJ~ et finit par un END correspondant au APPEND ;
  3. dans le fichier tp2, tu fais bien attention à compiler les fichiers dans cet ordre.
J'insiste sur le fait que si tu crées des dialogues que le joueur déclenchera, il ne faut rien chercher à faire dans un script. Un script sert à gérer les moments où le PNJ prendra l'initiative. Ceci n'a strictement rien à voir avec le fait d'utiliser un APPEND ou un BEGIN. Par ailleurs, le fait d'utiliser une condition IsGabber(Player1) pour le bloc qui gère les dialogues à l'initiative du joueur suppose que ce soit bel et bien le joueur qui le fasse. Dans le cas où tu ferais un script qui ferait prendre l'initiative au PNJ, il y a même des chances que cette condition ne marche pas et empêche le dialogue de se réaliser, produisant le message "n'a rien à vous dire".

Posté : dim. 22 avr. 2012, 20:01
par Freddy_Gwendo
Juste quelques petits conseils :

  1. D'après ce que j'ai lu sur le forum, c'est ta première expérience de modding, donc pas de panique : on s'est tous planté à un moment ou à un autre, et ce d'autant plus facilement qu'on s'attaque à différents aspects du jeu (graphisme, scripts, dialogues, kits et j'en passe et des meilleures...).
    Bref, c'est comme ça que tu pondras un produit jouable, quelque soit l'opinion que l'on s'en fait (personnellement, les nouveaux NPC, c'est pas mon truc, je préfère les nouvelles quêtes ou campagnes, mais ça ne m'empêche en rien d'apprécier la qualité du travail réalisé).
  2. Armand a bien résumé la situation : l'idéal serait que que tu te poses 5 minutes et que tu en profites pour mettre noir sur blanc ce que tu comptes faire exactement.
    • Ça te permettrait de prendre un peu de recul et d'être un peu moins "confus" comme tu l'as toi-même reconnu un peu plus haut. De plus, tu pourrais ainsi mieux déterminer ce qui ne fonctionne pas et ce que tu voudrais faire. Mais surtout ça nous permettrait de mieux t'aider.
    • Si j'ai bien compris, tu souhaites créer un nouveau NPc et pouvoir initier des dialogues avec lui indépendants du déroulement du jeu normal ou des nouvelles quêtes.
  3. Si c'est le cas, les conseils d'Isaya sont plus que pertinents. La difficulté dans ce genre de situation, c'est de ne pas interférer avec le déroulement "classique" des autres dialogues. Exemple : en cas de romance, ton dialogue peut se substituer à un bloc de dialogue nécessaire pour faire avancer les relations entre <CHARNAME> et son(sa) bien-aimé(e).
    D'où l'intérêt de créer ton dialogue de base, du style "Bonjour, je m'appelle la Mère Michu", "Je peux me joindre à vous ?", "Tiens, j'avais oublié de vous dire, je dois retrouver mon chat..." (BEGIN). Puis, tu en crées un autre contenant toutes les répliques diverses et variées entre ton NPC et les membres du groupe (APPEND). C'est à ce moment qu'il faudra bien gérer les conditions d'apparition à l'écran des bonnes lignes de dialogue et qu'on pourra te conseiller au mieux.

Posté : lun. 23 avr. 2012, 09:28
par Klare
► Afficher le texte
Ci dessus mon .D

Alors mon objectif actuel obtenir un NPC avec dialogue d'intro, de recrutement, de renvoi et un dialogue particulier lorsque l'on lui parle (qui offirira des reponses selon variables etc etc etc). (Les Banters et les réactions en jeu(interjection je crois) seront une etape ulterieure)

Donc l'objectif c'est que lorsque charname initie le dialogue j'ai un texte, et non pas le "n'a rien a vous dire"

Resumé des capacité du Npc : J'ai acces au dialogue d'intro grace a un script
J'ai grace a mon tp2 les dialogues de recrutement/renvoit de disponibles
APPEND ~pdialog.2da~
~CKlare CKlareP CKlareJ CKlareD~
UNLESS ~CKlare~

Posté : lun. 23 avr. 2012, 22:24
par Isaya
Puisque tu crées un dialogue CKlareJ, il te suffit de reprendre un bloc inspiré de celui que je proposais, sans le APPEND, et de l'inclure juste après ton bloc "Antibanter" et avant le BEGIN "CKlareD".
Klare a écrit :BEGIN "CKlareD"
...
APPEND ~pdialog.2da~
~CKlare CKlareP CKlareJ CKlareD~
UNLESS ~CKlare~
Il y a un truc qui cloche ici : dans le fichier pdialog.2da, la quatrième colonne, où tu as mis CKlareD, attend le nom d'un script, et non pas un dialogue. Autrement dit ton dialogue CKlareD ne sera jamais utilisé dans le jeu. Il te faudrait transférer le contenu que tu envisageais dans ce fichier vers un autre fichier : CKlareJ ou BCKlare, s'il s'agit de banter avec un autre PNJ.

Si tu étudies le fichier pdialog.2da du jeu, tu verras qu'il utilise le nom AERIED pour Aerie dans cette colonne. Le fichier AERIED.DLG n'existe pas, c'est le fichier AERIE.BCS vers lequel cela renvoie. Il s'agit bien d'un script, qui sert à déclencher un dialogue juste avant le sommeil du groupe, dans certaines conditions.

Posté : lun. 23 avr. 2012, 22:47
par Klare
Et finalement tout marche :'(

Un grand merci pour toutes ces explications (et pour votre patience, surtout pour votre patience.)

EDIT :
Et pus non petite question, si le 4 élément se doit d'etre un script, cette commande dans le tp2 permet aussi d'ajouter des scripts globaux?

Posté : mar. 24 avr. 2012, 07:17
par Armand
Pour comprendre mieux je te suggère d'ouvrir near infinity et de regarder l'onlget 2da tu y retrouveras le fichier pdialog.2da, tu y une structure par tableau avec des colones et ces fameuix titre de colone ou tu a les script de ton personnage :


* POST_DIALOG_FILE JOIN_DIALOG_FILE DREAM_SCRIPT_FILE...

Donc non ce n'est pas un script "global" c'est simplement le script du personnage. Tu peux faire des scripts plus globaux par zone en patchant les zones ou sur le jeux entier en patchant un script global qui est unique (le baldur.bcs).


Pour ton idée de dialogue sur le fonctionnement d'un flirt pack n'oublis pas de rajouter le trigger isgabber comme le disais isaya et le trigger cdstatenotvalid que nous n'avons pas encore mentionné dont le tuto anglo a été traduit par phoeunix dans le temps.

Posté : mar. 24 avr. 2012, 21:24
par Isaya
Armand a écrit :* POST_DIALOG_FILE JOIN_DIALOG_FILE DREAM_SCRIPT_FILE...

Donc non ce n'est pas un script "global" c'est simplement le script du personnage.
Attention Armand, le terme "script du personnage" est ambigu. En général ce terme désigne le script qui gère les événements liés au personnage, notamment les interactions et la romance.
Celui qui est mentionné dans le fichier dialog.2da pourrait être qualifié de "script de veillée" du personnage, c'est à dire un script qui est lancé par le jeu au moment où le joueur demande à faire dormir le groupe. Ce script a pour vocation de gérer les dialogues de coucher, son contexte est sans ambiguïté le moment du sommeil.
J'ai cru comprendre qu'on pouvait obtenir le même résultat dans le script général du personnage en utilisant certains triggers, mais je trouve que c'est une hérésie de procéder par ce moyen détourné alors que le jeu offre un moyen simple via le script désigné par le fichier dialog.2da.

Bioware a bien différencié les deux pour ses personnages, en tout cas.