Vers l'Infinity et Baldur's Gate
 
AccueilAccueil  PortailPortail  FAQFAQ  RechercherRechercher  MembresMembres  GroupesGroupes  S'enregistrerS'enregistrer  ConnexionConnexion  

Partagez | 
 

 Aide sur dialogue

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Lodano
Vers l'Infinity Engine et Au-Delà !
avatar

Nombre de messages : 32
Date d'inscription : 04/08/2010

MessageSujet: Aide sur dialogue   Dim 11 Mar 2012 - 12:25

Alors voilà.

Quand on rencontre Viconia elle va bientôt se faire brûler au bucher. J'ai créé un script qui fasse que, lorsque la variable est activée le NPC va libérer Viconia tout seul comme un grand sans laisser le choix à CHARNAME.

Maintenant, le soucis, c'est qu'il faut donner de la cohésion à cet évènement via dialogue.

J'ai rajouté un interject_copy_trans sur VICG1 (il s'agit d'un des péons qui entoure Viconia et qui dit "brûlez-là !!" etc.) mais ce dernier ne s'enclenche pas en jeu. Je n'arrive pas à comprendre ce que j'ai foiré. Voilà la gueule du code :

Citation :
BEGIN S#npcJ

INTERJECT_COPY_TRANS VICG1 0 vic21000
== S#npcJ IF ~InParty("S#npc")~ THEN @21000
//InMyArea("S#npc") ?
== VICONIJ IF ~~ THEN @21101
== S#npcJ IF ~~ THEN @21001
== VICONIJ IF ~~ THEN @21102
END


______________

Deuxième point.

Juste après le dialogue précédent que je vous ai montré (un chain entre VICG1,2,3,4 et Viconia), un nouveau dialogue se lance, par Viconia elle-même cette fois-ci. Il ressemble à ça.

Citation :
SI
NumTimesTalkedTo(0)
ALORS
Viconia débute son dialogue, text index 8229 c'est-à-dire "Shar ! Sauvez-moi, je vous en prie ! ... Attendez... Je vous ai reconnu ! ! etc. etc."
avec un petit [SOUND VICONI01] en prime.

Ce que je voudrais, c'est très bourrin, c'est carrément supprimer ce dialogue OU BIEN en modifier les phrases de Viconia (sinon ce qu'elle dit n'est pas logique vue qu'elle est censée connaitre mon NPC). Techniquement, c'est possible ?

_________________

Troisième point

Est-il possible de rajouter des phrases dans les blocs avec des conditions ? C'est-à-dire qu'au lieu de faire

Citation :
IF ~~ THEN BEGIN bloc1
SAY @1 = @2 = @3
IF ~~ THEN REPLY @4 GOTO bloc2
IF ~~ THEN REPLY @5 EXIT
END

Intuitivement j'aurais tendance à faire :

Citation :
IF ~~ THEN BEGIN bloc1
SAY @1
IF ~Gender(Player1,FEMALE)~ SAY @2
IF ~CheckStatGT(Player1,17,CHR)~ SAY @3
IF ~~ THEN REPLY @4 GOTO bloc2
IF ~~ THEN REPLY @5 EXIT
END

Sauf qu'évidemment ça marche pas. Forcément, quand c'est trop facile, c'est pas drôle...

Attention ! Je ne cherche pas à faire "dire phrase @1 OU @2 OU @3" mais bien "dire phrase @1 PUIS (si player1 female) @2 PUIS (si chr >17) @3.


Dernière édition par Lodano le Dim 11 Mar 2012 - 14:09, édité 2 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Armand
Mexicanos Muy Bien
avatar

Nombre de messages : 622
Age : 31
Localisation : Tréfonds Obscurs
Date d'inscription : 29/07/2008

MessageSujet: Re: Aide sur dialogue   Dim 11 Mar 2012 - 13:48

J'ai mis ton code entre les quote pour plus de facilité. Je verifis deux trois trucs et je te répond (pour eviter les conneries on sait jamais...).

_________________
J'ai oublié la rancoeur. Je ne connais plus que l'amour, le bonheur... Bordel je baisse ! C'est pas bon ça, pas bon.....

Armand dit :
*t'a vu bat est d'accord avec moi !
*àa prouve bien que...
*ça
*putain mais avec ces conneries mon area a planté
*je dosi tout refaire Neutral
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Lodano
Vers l'Infinity Engine et Au-Delà !
avatar

Nombre de messages : 32
Date d'inscription : 04/08/2010

MessageSujet: Re: Aide sur dialogue   Dim 11 Mar 2012 - 13:54

Du coup en rajoutant mon 3e point, je l'ai mis en quote aussi (je me demandais aussi...)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Armand
Mexicanos Muy Bien
avatar

Nombre de messages : 622
Age : 31
Localisation : Tréfonds Obscurs
Date d'inscription : 29/07/2008

MessageSujet: Re: Aide sur dialogue   Dim 11 Mar 2012 - 17:58

Pour le premier point :

Alors commençons par le "BEGIN S#npcJ", techniquement parlant il n'est pas nécessaire. Il ne gène pas mais il est superflu. Un "BEGIN nanana" va créer un dlg dans l'override c'est à dire un fichier d transformé exploitable par le jeux. Techniquement parlant tu peux même faire un fichier d qui génère tous les dlg dont tu as besoin en écrivant tous les begin les uns à la suite des autres. Mais tout ceci est une autre histoire je rentrerais plus en détail dans mon prochain tuto. Enfin pour résumé quand tu fait des interject les begin sont inutile.

Après quand tu bosses sur un pnj recrutable en trigger (inparty, in my area,etc...) pour vérifier le dialogue le mieux c'est de mettre :


InParty("S#npc") // le perso est dans le groupe
See("S#npc") // on voit le perso
!StateCheck("S#npc",CD_STATE_NOTVALID) // c'est une maniére propre de verifier que le dialogue est possible pépé malin a traduit un tuto complet sur le sujet je t'invite à aller fouiller dans la section dédié


Enfin prenons plusieurs exemples :

VICONIJ
Player1

Ce que je viens de citer sont des expressions "de base" du jeu l'un ciblant le dlg de viconia l'autre le joueur 1

"S#npcJ"

C'est une référence à un élément nouveau qui n'est pas standardisé on va dire on le met entre guillemet. Il est possible qu'il y ai d'autre erreurs mais change déjà ça et on voit. Wink

Pour le deuxiéme point :

Le mieux serait de tout simplement de prévoir un nouveau bloc avec tes conditions et de modifier le bloc de base pour le faire s'appliquer si ton perso n'est pas dans le groupe :

Citation :
CHAIN IF ~NumTimesTalkedTo(0)!InParty("S#npc")~ THEN VICONIJ nom du bloc
// (le point d'exclamation correspond à "n'est aps égal à")

Citation :
CHAIN IF ~NumTimesTalkedTo(0)InParty("S#npc")~ THEN VICONIJ nom du bloc
// (le point d'exclamation correspond à "n'est aps égal à")

Voila l'idée après il suffira d’éditer le dlg de viconia en conséquence via le tp2. Sais tu le manier un peu pour que je me fasse une idée ? Aprés on peut toujours supprimer le dia par deux trois manip si tu veux faire un dia totalement neuf...

Pour le troisiéme point :

Alors oui là c'est un peu une des limites du programme t'es obligé de faire un bloc pour chaque cas :

Citation :
IF ~~ THEN BEGIN bloc1
SAY @1
IF ~~ THEN REPLY @4 GOTO bloc2
IF ~~ THEN REPLY @5 EXIT
END

Citation :
IF ~Gender(Player1,FEMALE)~ THEN BEGIN bloc1
SAY @1=@2
IF ~~ THEN REPLY @4 GOTO bloc2
IF ~~ THEN REPLY @5 EXIT
END

etc...

C'est un peu long et chiant mais ça marche. ^^ Enfin pour te rassurer sache qu'il n'y a rien ou quasi rien qu'on ne peut faire avec dlg surtout qu'on a beaucoup progressé depuis els tutos de cool co. Si j'avais su tout ce que je sais à l'epoque ou elle m'a appris à modder... Voila j'attends tes retours pour peaufiner mon explication.



_________________
J'ai oublié la rancoeur. Je ne connais plus que l'amour, le bonheur... Bordel je baisse ! C'est pas bon ça, pas bon.....

Armand dit :
*t'a vu bat est d'accord avec moi !
*àa prouve bien que...
*ça
*putain mais avec ces conneries mon area a planté
*je dosi tout refaire Neutral
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Lodano
Vers l'Infinity Engine et Au-Delà !
avatar

Nombre de messages : 32
Date d'inscription : 04/08/2010

MessageSujet: Re: Aide sur dialogue   Dim 11 Mar 2012 - 19:25

Pour le premier point, l'ajout des guillemets n'a rien changé. J'hésitais à mettre le "InMyArea" parce que je me demandais si vraiment j'avais envie d'une condition pareil. Par contre le StateCheck c'est vrai qu'il faudrait que je prenne le réflexe de le mettre tout le temps.

Pour le "begin #npcJ" c'est parce qu'en ne le mettant pas, weidu me disait ne pas trouver la ressource (je n'ai pas fait de fichiers d séparés encore, enfin pour les différents npc oui, un pour tous les péons et les petits dialogues, mais j'ai pas séparé les xxJ Bxx etc. - d'ailleurs je n'ai pas fait de Bxx et je commence les xxJ à peine).

EDIT: l'ITC que j'essaye de placer (sur la phrase 0 de VICG1) est dans une CHAIN entre VICG1, VICG2, VICG3, VICG4 et Viconia, est-ce que ça une influence ?
__

Pour le 2e point je manipules assez le tp2 pour qu'il soit le fichier qui me pose le moins de soucis, mais je ne me suis pas encore aventuré bien loin non plus. Tu penses utiliser quelque chose dans le genre d'extend_top ?
__

Pour le 3e point, si je fait un bloc1 avec IF et un autre bloc1 avec un IF vide, weidu va me dire qu'il y a deux blocs qui ont le même nom. À ce compte-là et s'il faut des blocs différents, alors il faut des REPLY différents pour mener à chaque bloc et autant mettre les conditions sur les reply ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Armand
Mexicanos Muy Bien
avatar

Nombre de messages : 622
Age : 31
Localisation : Tréfonds Obscurs
Date d'inscription : 29/07/2008

MessageSujet: Re: Aide sur dialogue   Lun 12 Mar 2012 - 10:06

Pour le premier point :


Le "inmyarea" ou le "see" que je trouve mieux personnellement permet surtout de vérifier que ton perso ne s'est pas égaré dans un autre bâtiment. Ce serais stupide de le voir parler alors qu'il est chez le marchand du coin par exemple...

Je ne pense pas que la suite de dialogue fasse bugger l'ITC. J'ai testé avec aerie sur ce bloc :



Citation :
INTERJECT_COPY_TRANS VICG1 0 aerie
== AERIEJ IF ~InParty("Aerie")~ THEN @21000
== VICONIJ IF ~~ THEN @21101
== AERIEJ IF ~~ THEN @21001
== VICONIJ IF ~~ THEN @21102
END

Et ça fonctionne donc selon moi tu devrais déjà vérifier deux choses. De une que tu as bien rempli correctement les champs other attributes comme je le decrit dans mon tuto sur les cre publié récemment. De deux que tu as bien paramétré les dlg de ton cre dans le tp2. Ici un exemple du mod severian :

Citation :
APPEND ~pdialog.2da~
~#Severian #SeverP #SeverJ #SeverD~
UNLESS ~#Severian~
UNLESS ~25POST~

Pour le deuxiéme point :


Oui un EXTEND_TOP tout à fait ça juste avant on va editer le bloc de base de viconia poue eviter les problèmes je t'indique la manip dans le tp2 :

Citation :
COPY_EXISTING ~viconi.dlg~ ~override~
DECOMPILE_DLG_TO_D
REPLACE_TEXTUALLY EXACT_MATCH ~NumberOfTimesTalkedTo(0~ ~NumberOfTimesTalkedTo(0)!InParty("S#npc")~
COMPILE_D_TO_DLG
BUT_ONLY_IF_IT_CHANGES

Je copie le fichier dans l'override, je le decompile, je remplace le premier trigger par une série de deux trigger je recompile. Et voila ton le dlg de vico devrait être edité. Il ne manque plus qu'à editer via un EXTEND_TOP pour intégrer le nouveau bloc qui déclenchera le nouveau dia. Je te rappelle la manip au cas ou :

Citation :
EXTEND_BOTTOM ~viconi.dlg~ ~Chemin d'accés/S#vico.d~

Je te laisse faire le reste seul, le plaisir du bidouillage avant tout !


Pour le dernier point :


Oui j'ai pas changé le nom du bloc mais il aurait fallu évidement faire bloc1, bloc2, bloc3... Oui le plus simple est de mettre les conditions sur les reply menant aux trois blocs différent.

Voila je crois que tout est dit j’espère que ça t'aidera. Si tu as des questions sur quoi que ce soit hésite pas. Par contre je vois que tu utilises le préfixe de severian dans tes posts. Tu n'as pas encore de préfixe à toi ?

_________________
J'ai oublié la rancoeur. Je ne connais plus que l'amour, le bonheur... Bordel je baisse ! C'est pas bon ça, pas bon.....

Armand dit :
*t'a vu bat est d'accord avec moi !
*àa prouve bien que...
*ça
*putain mais avec ces conneries mon area a planté
*je dosi tout refaire Neutral
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Lodano
Vers l'Infinity Engine et Au-Delà !
avatar

Nombre de messages : 32
Date d'inscription : 04/08/2010

MessageSujet: Re: Aide sur dialogue   Mer 14 Mar 2012 - 11:33

Armand a écrit:
Et ça fonctionne donc selon moi tu devrais déjà vérifier deux choses. De une que tu as bien rempli correctement les champs other attributes comme je le decrit dans mon tuto sur les cre publié récemment. De deux que tu as bien paramétré les dlg de ton cre dans le tp2. Ici un exemple du mod severian
J'ai fait dialoguer mes différents NPC (4 au total pour le moment) donc à priori le "other attribute" c'est bon. Il se trouve que je passe par Near Infinity plutôt que par CreMaker (chez moi CreMaker bug, je vais essayer de résoudre ça plus tard mais en attendant...) mais quoiqu'il en soit, je suis certain que les fichiers .d et les fichiers .bcs sont bien associés à la créature correspondante, d'ailleurs ils dialoguent in game sans problème, du moins, temps que je n'utilise pas l'ict. Pour ce qui est de l'append Le miens ressemble à ça pour le moment :

Code:
APPEND ~pdialog.2da~
~S#npc S#npcP S#npcJ S#npcD S#npc25P S#npc25J S#npc25D S#npc25~
UNLESS ~S#npc~

APPEND ~interdia.2da~
~S#npc S#npcB S#npc25~
UNLESS ~S#npc~

ça me paraissait plus propre. Un jour faudra que je pense à trouver un truc plus original que "npc" d'ailleurs. Laughing Mais chaque chose en son temps.

Pour ce qui est du préfixe, effectivement je n'en ai pas à moi mais j'ai été vérifier sur la liste de blackwyrmlair que celui-ci ne soit pas prit.

EDIT: En fait c'est pas le même, c'est S# et #S

Quoiqu'il en soit, malgré tout ça rien ne fonctionne. Le dialogue normal oui, mais les I_C_T et la copie du dlg de viconia non.

Par contre je suis tombé sur un truc bizarre en installant le dialogue

Extrait du debug de weidu :
Code:
[JFTD/Translations/French/S#npc.tra] has 97 translation strings
[./override/STATS.IDS] loaded, 4161 bytes

[trigger list near line 219, column 47 of JFTD/Dialogues/S#npc.d] PARSE WARNING at line 220 column 1-40
Near Text: )
    [StateCheck] argument [CD_STATE_NOTVALID] not found in [State.IDS]

[trigger list near line 228, column 47 of JFTD/Dialogues/S#npc.d] PARSE WARNING at line 229 column 1-40
Near Text: )
    [StateCheck] argument [CD_STATE_NOTVALID] not found in [State.IDS]
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Armand
Mexicanos Muy Bien
avatar

Nombre de messages : 622
Age : 31
Localisation : Tréfonds Obscurs
Date d'inscription : 29/07/2008

MessageSujet: Re: Aide sur dialogue   Mer 14 Mar 2012 - 11:42

Normal pour le CD_STATE_NOTVALID il faut d'abord l'integrer dans le tp2 comme prcis sur le tuto de pépé. Tu aurais moyen de me passer ton mod ? Ca me permettrait de cibler plus exactement ce qui ne fonctionne pas et de trouver une solution en direct. Parce que là j'ai l'impression que ça pourrait durer longtemps...^^

_________________
J'ai oublié la rancoeur. Je ne connais plus que l'amour, le bonheur... Bordel je baisse ! C'est pas bon ça, pas bon.....

Armand dit :
*t'a vu bat est d'accord avec moi !
*àa prouve bien que...
*ça
*putain mais avec ces conneries mon area a planté
*je dosi tout refaire Neutral
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Lodano
Vers l'Infinity Engine et Au-Delà !
avatar

Nombre de messages : 32
Date d'inscription : 04/08/2010

MessageSujet: Re: Aide sur dialogue   Mer 14 Mar 2012 - 12:25

ok en pj par mp, faut juste que je corrige les noms de mes variables pour quelque chose un peu plus "lisible".
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: Aide sur dialogue   

Revenir en haut Aller en bas
 
Aide sur dialogue
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Topic d'aide et de question GS.
» [Blog] j'ai besoin d'aide pour Brickshelf
» Aide pour les noobs
» [Software] Besoin d'Aide pour Bionicle Heroes
» [Aide] Le BBCode

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
LEGENDES :: LE MONDE DU MODDING :: Maîtrise :: Apprentissage-
Sauter vers: