Je n'ai pas trouvé Ctrl-I dans les références de la console. Quelle fonction cherches-tu ?
Sinon, pour les dialogues, il faut bien comprendre comment ça marche. Un dialogue de PNJ, c'est un ensemble d'interactions. Une interaction est provoquée par des conditions. Les conditions s'appuient généralement sur des variables qui doivent avoir des valeurs précises pour qu'un ensemble de conditions soient vérifiées et que le dialogue débute (mais ça peut aussi être des trucs du genre être à l'extérieur ou en plein jour, ...).
Quand un dialogue est initié, le jeu prend le fichier définissant le dialogue et le parcourt du début à la fin en cherchant le premier jeu de conditions vérifiées. Du coup, les premières interactions dans la liste ont la priorité si leurs conditions sont vérifiées. C'est là que la notion de
WEIGHT peut intervenir. Quand tu ajoutes des interactions dans un dialogue, elles sont toujours à la fin. En donnant un "
WEIGHT" approprié, tu peux modifier l'ordre d'évaluation des conditions et faire en sorte que les conditions d'interactions à la fin du fichier soient évaluées avant certaines placées avant elles.
Dans le cas des banters, les conditions sont généralement vérifiées dans le script du personnage (par exemple Jaheira.bcs) susceptible d'initier le dialogue. Alors le script met à jour une variable spécifique utilisée dans un jeu de conditions du dialogue. Puis il provoque le début du dialogue. Comme la modification de la variable entraîne la vérification des conditions propres à une interaction, celle-ci va alors débuter.
La modification de la variable dans le script lui permet aussi de s'assurer de ne pas réinitialiser de nouveau cette interaction.
Exemple de morceau de script (de Jaheira) :
Code : Tout sélectionner
IF
InParty("Aerie")
See("Aerie")
!Dead("Aerie") // Aerie
!StateCheck("Aerie",STATE_SLEEPING)
HPLT("Aerie",10)
!HP("Aerie",1)
CombatCounter(0)
GlobalLT("JaheiraAerie","LOCALS",2)
Global("AerieBelow10","LOCALS",0)
InParty(Myself)
THEN
RESPONSE #100
Interact("Aerie")
END
Si Aerie est gravement blessée et que le dialogue n'a jamais eu lieu (tests sur les variables JaheiraAerie et AerieBelow10), on lance une interaction avec
Interact() en précisant "Aerie" pour indiquer avec qui. Le fait d'utiliser
Interact fait que le jeu va chercher le dialogue d'interaction de Jaheira (BJAHEIR.DLG, voir INTERDIA.2DA) ou l'on trouve notamment une partie de ces conditions comme déclencheur d'une interaction.
Code : Tout sélectionner
InParty("Aerie")
See("Aerie")
HPLT("Aerie",10)
Global("JaheiraAerie","LOCALS",1)
Global("AerieBelow10","LOCALS",0)
Le dialogue modifie alors les variables (dans la partie action du dialogue) pour éviter que le dialogue ne se produise à nouveau.
Code : Tout sélectionner
SetGlobal("JaheiraAerie","LOCALS",2)
SetGlobal("AerieBelow10","LOCALS",1)
Il y a d'autres façons de faire. Tu peux regarder les scripts des personnages de Bioware comme exemple (en complément des mods que tu as cités).