Page 1 sur 1

[DLG] Problème avec la commande INTERJECT

Posté : lun. 01 oct. 2012, 09:52
par Armand
Comme certains le savent peut être je ne jure que par la commande CHAIN. Je la met sur tous mes dialogues car il me permet de rajouter des interventions d'autres persos facilement tout en m’économisant beaucoup de code.

Cependant dans les cas présent ça m'a posé quelques soucis pour la simple et bonne raison qu'il y a un domaine où il est impossible d'utiliser un CHAIN c'est à dire à l'intérieur d'un append. Et en l’occurrence je me trouve dans le seul cas ou je suis obligé d'en utiliser un à savoir à l'intérieur d'un player1 (pour faire parler Charname). Étant dans un cas figure ou mon fichier comprend un certain nombres de dlg j'ai fini par mettre mon append en début de fichier pour éviter les incohérence du type "ce bloc n'existe pas". Un petit exemple pour vous faire une idée :

Code : Tout sélectionner

BEGIN ~#VAngh~
BEGIN ~#VRat~
BEGIN ~#VMyri~
BEGIN ~#VGard03~
BEGIN ~#VGard04~
BEGIN ~#VMonk6~
BEGIN ~#VMonk7~
BEGIN ~#VMonk8~
BEGIN ~#VMonk9~
BEGIN ~#VMonk10~
BEGIN ~#VMonk11~
BEGIN ~#VMonk12~
BEGIN ~#VMonk13~
BEGIN ~#VJack~
BEGIN ~#VElen~


// On colle les append au début pour zapper les problèmes de fichiers inexistants


APPEND ~Player1~

IF ~Global("#VElenspeak","#V7000",1)~ THEN BEGIN RencontreElenna
 SAY @243001
  IF ~~ THEN EXTERN ~#VElen~ ELLENALASANGLANTE
END


IF ~~ THEN BEGIN SANG
 SAY @243023
  IF ~~ THEN EXTERN ~Player1~ SANG02
END


IF ~~ THEN BEGIN SANG02
 SAY @243024
  IF ~~ THEN EXIT
END
Voila. Ayant l'intention de rajouter du texte sur le bloc nommé "SANG" j'ai rajouté un INTERJECT dans le d :

Code : Tout sélectionner

 // BOURREAU

 CHAIN IF ~~ THEN "#VElen" BOURREAU
 @243022
 END
  IF ~~ THEN EXTERN ~Player1~ SANG
  
INTERJECT PLAYER1 SANG SANGBIS


 == KORGANJ IF ~InParty("Korgan")~ THEN @243125
 == MAZZYJ IF ~InParty("Mazzy")~ THEN @243126
 == KELDORJ IF ~InParty("Keldorn")~  THEN @243127
 == EDWINJ IF ~InParty("Keldorn")~ THEN @243128
 == VALYGARJ IF ~InParty("Valygar")~ THEN @243129
 == NALIAJ IF ~InParty("Nalia")InParty("Valygar") ~ THEN @243130
 == VALYGARJ IF ~InParty("Nalia")InParty("Valygar") ~ THEN @243131
 == AERIE IF ~InParty("Aerie")~ THEN @243132 
END PLAYER1 SANG02
  
J'utilise ici la commande INTERJECT et non INTERJECT_COPY_TRANS car il me renvoie une erreur : il ne semble pas trouver le state correspondant. A la compilation ça marche mais ingame le bloc se coupe à la fin de la réplique de Korgan alors que Aerie est dans le groupe et qui plus est le bloc ne me renvoie pas sur "SANG02".

Je cale donc un peu sur ce bloc, je vois pas trop ce qui le fait planter en fait. Si vous avez des idées, je prend parce qu’après 90 minutes de test non stop je bloque (je bloque sur un bloc ahaha ! Désolé... :suicide2: )

Posté : lun. 01 oct. 2012, 18:04
par mirandir
Euh, ça fonctionne ça pour faire parler CHARNAME ??

Code : Tout sélectionner

APPEND ~[B]Player1[/B]~


IF ~Global("#VElenspeak","#V7000",1)~ THEN BEGIN RencontreElenna
SAY @243001
IF ~~ THEN EXTERN ~#VElen~ ELLENALASANGLANTE
END

Posté : lun. 01 oct. 2012, 18:12
par Armand
Oui bien sur le problème se situe pas la. Mon append se situe à la fin de mes begin donc pas de souci, après pour les CHAIN le fonctionnement est différent.

Posté : lun. 01 oct. 2012, 18:16
par mirandir
Ok. Eh bien, je savais pas :gign:

Pour ton INTERJECT, il ne manquerait pas un GOTO à la fin par zazard ?

Posté : lun. 01 oct. 2012, 18:23
par Armand
Pas si l'on suit les instructions du read me de weidu, la syntaxe est assez particulière en l’occurrence et faut dire que la manip est assez old school donc peu usité. Après peut être que c'est moi qui interprète mal mais de ce que je vois dans les instructions à la suite du END il faut mettre le nom du dlg cible en premier argument suivi du nom du bloc cible.

Aprés de ce que je vois in game l'erreur devrait venir d'ailleurs. Bon aprés si j'avais eu un euro chaque fois que j'ai dit ça... :gign:

Posté : lun. 01 oct. 2012, 18:30
par mirandir
Perso, dans le mod que je suis en train de finaliser, j'utilise des INTERJECT et terminer par GOTO nomdunblocdanslemêmefichierdialogue fonctionne bien.

Mais je suis incapable de me souvenir pourquoi je n'ai pas suivi le readme sur ce coup là.

Posté : lun. 01 oct. 2012, 18:38
par Armand
Ben en l’occurrence je suis dans aucun fichier dialogue si ce n'est dans le dlg player1 vu que j'utilise des CHAIN je n'ai pas besoin d'être "dans un fichier". Après je peux toujours essayer de le mettre dans un BEGIN peu importe lequel d’ailleurs. Mais je pense que le problème doit provenir de la particularité du fichier dlg player1.


EDIT : désolé j'avais mal compris ton message je vais essayer avec le GOTO voir...

EDIT 2 : weidu aime pas ça avec le GOTO j'ai eu droit à une syntax error.

Posté : mar. 02 oct. 2012, 09:57
par Armand
En fait l'erreur était toute conne, c'est à s'en faire rager tellement c'était simple. Vu qu'ils 'agit d'interjection ici je dois faire référence au fichier dialogue AERIEJ et non AERIE. Un bête oubli qui fait tout planter vu que le fichier dialogue ne correspond pas du tout à la situation. :gign: