Oyez, oyez !
Les résultats du vote sur les meilleurs RPG de tous les temps sont désormais dévoilés dans ce message !
Merci à toutes et à tous pour votre participation !
N'hésitez pas à aller commenter, ajouter des jeux auxquels vous n'auriez pas pensé...
Les résultats du vote sur les meilleurs RPG de tous les temps sont désormais dévoilés dans ce message !
Merci à toutes et à tous pour votre participation !
N'hésitez pas à aller commenter, ajouter des jeux auxquels vous n'auriez pas pensé...
[DLG] Comment forcer un dialogue entre Charname et un PNJ avec le bouton Dialogue ?
- Klare
- Tasloï
- Messages : 75
- Enregistré le : lun. 16 avr. 2012, 17:16
- Localisation : Picardie, fausses terres de la pluie annuelle.
- Statut : Hors ligne
[DLG] Comment forcer un dialogue entre Charname et un PNJ avec le bouton Dialogue ?
.
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
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
- Freddy_Gwendo
- Adepte de Grondemarteau
- Orbe ancien
- Messages : 5877
- Enregistré le : sam. 23 avr. 2011, 00:26
- Localisation : Égaré dans un vortex entre Féérune et le Royaume de Diamant Éternel
- Statut : Hors ligne
.
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 :
Tu peux aussi mixer les deux :
1. Les possibilités sont infinies, le but du jeu étant de définir tes variables dans un fichier baf :
2. Ensuite, tu utilises ces variables comme conditions de démarrage du dialogue :
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.
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.
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.
CARPE DIEM...Co-modérateur de La Forge et de La Chambre des Scribes
Moddeur qui s'arrache les cheveux...
Moddeur qui s'arrache les cheveux...
... avec Menace sur le Royaume de Diamant Éternel.
- Akadis
- Adepte de Grondemarteau
- Araignée éclipsante
- Messages : 1224
- Enregistré le : lun. 28 avr. 2003, 10:58
- Localisation : Bordeaux
- Contact :
- Statut : Hors ligne
.
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
- Freddy_Gwendo
- Adepte de Grondemarteau
- Orbe ancien
- Messages : 5877
- Enregistré le : sam. 23 avr. 2011, 00:26
- Localisation : Égaré dans un vortex entre Féérune et le Royaume de Diamant Éternel
- Statut : Hors ligne
.
Oups !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
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.
CARPE DIEM...Co-modérateur de La Forge et de La Chambre des Scribes
Moddeur qui s'arrache les cheveux...
Moddeur qui s'arrache les cheveux...
... avec Menace sur le Royaume de Diamant Éternel.
- Klare
- Tasloï
- Messages : 75
- Enregistré le : lun. 16 avr. 2012, 17:16
- Localisation : Picardie, fausses terres de la pluie annuelle.
- Statut : Hors ligne
.
Donc (jai pas encore tout decortiquer mais me semble que : )
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...)
► Afficher le texte
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...)
- Freddy_Gwendo
- Adepte de Grondemarteau
- Orbe ancien
- Messages : 5877
- Enregistré le : sam. 23 avr. 2011, 00:26
- Localisation : Égaré dans un vortex entre Féérune et le Royaume de Diamant Éternel
- Statut : Hors ligne
.
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...
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...
CARPE DIEM...Co-modérateur de La Forge et de La Chambre des Scribes
Moddeur qui s'arrache les cheveux...
Moddeur qui s'arrache les cheveux...
... avec Menace sur le Royaume de Diamant Éternel.
- Isaya
- Adepte de Grondemarteau
- Planaire
- Messages : 6990
- Enregistré le : mar. 22 juil. 2003, 21:03
- Localisation : Plaisir
- Contact :
- Statut : Hors ligne
.
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 :
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.
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
:!: Peu disponible
Guide d'installation (et FAQ) de Baldur's Gate, Baldur's Gate II, Baldur's Gate Trilogy (BGT), BG1Tutu, Widescreen, BGEE
Pensez à utiliser à la fonction Recherche pour trouver une réponse à votre question !
Guide d'installation (et FAQ) de Baldur's Gate, Baldur's Gate II, Baldur's Gate Trilogy (BGT), BG1Tutu, Widescreen, BGEE
Pensez à utiliser à la fonction Recherche pour trouver une réponse à votre question !
- Klare
- Tasloï
- Messages : 75
- Enregistré le : lun. 16 avr. 2012, 17:16
- Localisation : Picardie, fausses terres de la pluie annuelle.
- Statut : Hors ligne
.
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.
(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.
- Freddy_Gwendo
- Adepte de Grondemarteau
- Orbe ancien
- Messages : 5877
- Enregistré le : sam. 23 avr. 2011, 00:26
- Localisation : Égaré dans un vortex entre Féérune et le Royaume de Diamant Éternel
- Statut : Hors ligne
.
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 !
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 !
CARPE DIEM...Co-modérateur de La Forge et de La Chambre des Scribes
Moddeur qui s'arrache les cheveux...
Moddeur qui s'arrache les cheveux...
... avec Menace sur le Royaume de Diamant Éternel.
- Akadis
- Adepte de Grondemarteau
- Araignée éclipsante
- Messages : 1224
- Enregistré le : lun. 28 avr. 2003, 10:58
- Localisation : Bordeaux
- Contact :
- Statut : Hors ligne
.
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 :
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
- Klare
- Tasloï
- Messages : 75
- Enregistré le : lun. 16 avr. 2012, 17:16
- Localisation : Picardie, fausses terres de la pluie annuelle.
- Statut : Hors ligne
.
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 :
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 :
Allegé pour mes objectifs en :
Or cette vilaine chose fait planter mon Weidu
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
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
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
► Afficher le texte
► Afficher le texte
- Isaya
- Adepte de Grondemarteau
- Planaire
- Messages : 6990
- Enregistré le : mar. 22 juil. 2003, 21:03
- Localisation : Plaisir
- Contact :
- Statut : Hors ligne
.
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.
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.
:!: Peu disponible
Guide d'installation (et FAQ) de Baldur's Gate, Baldur's Gate II, Baldur's Gate Trilogy (BGT), BG1Tutu, Widescreen, BGEE
Pensez à utiliser à la fonction Recherche pour trouver une réponse à votre question !
Guide d'installation (et FAQ) de Baldur's Gate, Baldur's Gate II, Baldur's Gate Trilogy (BGT), BG1Tutu, Widescreen, BGEE
Pensez à utiliser à la fonction Recherche pour trouver une réponse à votre question !
- Freddy_Gwendo
- Adepte de Grondemarteau
- Orbe ancien
- Messages : 5877
- Enregistré le : sam. 23 avr. 2011, 00:26
- Localisation : Égaré dans un vortex entre Féérune et le Royaume de Diamant Éternel
- Statut : Hors ligne
.
Désolé, je n'ai pas le temps de me plonger dans tes codes because l'appel du dodo, mais à priori, essaye :
à la place de
* 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 :
Et pas
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.
Code : Tout sélectionner
StartDialogue(Player1)
Code : Tout sélectionner
*StartDialogue(Player1)
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
Code : Tout sélectionner
*Action 1
Ç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.
CARPE DIEM...Co-modérateur de La Forge et de La Chambre des Scribes
Moddeur qui s'arrache les cheveux...
Moddeur qui s'arrache les cheveux...
... avec Menace sur le Royaume de Diamant Éternel.
- Klare
- Tasloï
- Messages : 75
- Enregistré le : lun. 16 avr. 2012, 17:16
- Localisation : Picardie, fausses terres de la pluie annuelle.
- Statut : Hors ligne
.
Merci encore de vos conseils.
Petit bilan :
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.
Petit bilan :
Donc au final je ne peux pas utiliser APPEND pour creer le dialogue initial de Klare mais seulement modifier les dialogues selon conditions.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~ ...).
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.
- Armand
- Adepte de Grondemarteau
- Ours des cavernes
- Messages : 1141
- Enregistré le : lun. 03 déc. 2007, 22:04
- Localisation : Dordogne
- Statut : Hors ligne
.
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...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
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.
http://toutlemondesontrolistes.blogspot ... ation.html
Ancien moddeur pour bg2, critique sur la sphère roliste et gamedesigner en herbe
Ancien moddeur pour bg2, critique sur la sphère roliste et gamedesigner en herbe
- Isaya
- Adepte de Grondemarteau
- Planaire
- Messages : 6990
- Enregistré le : mar. 22 juil. 2003, 21:03
- Localisation : Plaisir
- Contact :
- Statut : Hors ligne
.
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".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")
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 :
- 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 ;
- 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 ;
- dans le fichier tp2, tu fais bien attention à compiler les fichiers dans cet ordre.
:!: Peu disponible
Guide d'installation (et FAQ) de Baldur's Gate, Baldur's Gate II, Baldur's Gate Trilogy (BGT), BG1Tutu, Widescreen, BGEE
Pensez à utiliser à la fonction Recherche pour trouver une réponse à votre question !
Guide d'installation (et FAQ) de Baldur's Gate, Baldur's Gate II, Baldur's Gate Trilogy (BGT), BG1Tutu, Widescreen, BGEE
Pensez à utiliser à la fonction Recherche pour trouver une réponse à votre question !
- Freddy_Gwendo
- Adepte de Grondemarteau
- Orbe ancien
- Messages : 5877
- Enregistré le : sam. 23 avr. 2011, 00:26
- Localisation : Égaré dans un vortex entre Féérune et le Royaume de Diamant Éternel
- Statut : Hors ligne
.
Juste quelques petits conseils :
- 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é). - 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.
- 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.
CARPE DIEM...Co-modérateur de La Forge et de La Chambre des Scribes
Moddeur qui s'arrache les cheveux...
Moddeur qui s'arrache les cheveux...
... avec Menace sur le Royaume de Diamant Éternel.
- Klare
- Tasloï
- Messages : 75
- Enregistré le : lun. 16 avr. 2012, 17:16
- Localisation : Picardie, fausses terres de la pluie annuelle.
- Statut : Hors ligne
.
► Afficher le texte
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~
- Isaya
- Adepte de Grondemarteau
- Planaire
- Messages : 6990
- Enregistré le : mar. 22 juil. 2003, 21:03
- Localisation : Plaisir
- Contact :
- Statut : Hors ligne
.
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".
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.
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.Klare a écrit :BEGIN "CKlareD"
...
APPEND ~pdialog.2da~
~CKlare CKlareP CKlareJ CKlareD~
UNLESS ~CKlare~
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.
:!: Peu disponible
Guide d'installation (et FAQ) de Baldur's Gate, Baldur's Gate II, Baldur's Gate Trilogy (BGT), BG1Tutu, Widescreen, BGEE
Pensez à utiliser à la fonction Recherche pour trouver une réponse à votre question !
Guide d'installation (et FAQ) de Baldur's Gate, Baldur's Gate II, Baldur's Gate Trilogy (BGT), BG1Tutu, Widescreen, BGEE
Pensez à utiliser à la fonction Recherche pour trouver une réponse à votre question !
- Armand
- Adepte de Grondemarteau
- Ours des cavernes
- Messages : 1141
- Enregistré le : lun. 03 déc. 2007, 22:04
- Localisation : Dordogne
- Statut : Hors ligne
.
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_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.
http://toutlemondesontrolistes.blogspot ... ation.html
Ancien moddeur pour bg2, critique sur la sphère roliste et gamedesigner en herbe
Ancien moddeur pour bg2, critique sur la sphère roliste et gamedesigner en herbe
- Isaya
- Adepte de Grondemarteau
- Planaire
- Messages : 6990
- Enregistré le : mar. 22 juil. 2003, 21:03
- Localisation : Plaisir
- Contact :
- Statut : Hors ligne
.
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.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.
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.
:!: Peu disponible
Guide d'installation (et FAQ) de Baldur's Gate, Baldur's Gate II, Baldur's Gate Trilogy (BGT), BG1Tutu, Widescreen, BGEE
Pensez à utiliser à la fonction Recherche pour trouver une réponse à votre question !
Guide d'installation (et FAQ) de Baldur's Gate, Baldur's Gate II, Baldur's Gate Trilogy (BGT), BG1Tutu, Widescreen, BGEE
Pensez à utiliser à la fonction Recherche pour trouver une réponse à votre question !
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 3 invités