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é...

[BANTERS] Comment donner la priorité à un lancement de dialogue ?

Répondre
Avatar du membre
Grenouillebleue
Loup effrayant
Messages : 723
Enregistré le : sam. 27 sept. 2003, 22:58
Localisation : Paris
Contact :
Statut : Hors ligne

[BANTERS] Comment donner la priorité à un lancement de dialogue ?

.

Message par Grenouillebleue »

Pour briser un peu la monotonie, la première phrase de certains banters n'appartient pas à Kim, mais à quelqu'un d'autre. Par exemple, Cernd qui dit : "Oh, tu as de beaux seins" (Je simplifie).

Or, j'ai pas mal de soucis pour coder ça. J'y étais allé avec ce code-là:

Code : Tout sélectionner

IF
  Global("KIMBANTER","GLOBAL",1) // Si c'est le moment de discuter
  InParty("Kim") // que Kim est là
  InParty("Cernd") // et Cernd aussi
  See("Cernd")
  !Dead("Cernd")
  Global("CERNDKIM","GLOBAL",0) // Et qu'ils n'ont encore jamais discuté
THEN
  RESPONSE #100
    SetGlobal("CERNDKIM","GLOBAL",1) 
    ActionOverride("CERND",StartDialog("BCERND","Kim")) // Alors on lance le dialogue 1
END
A côté, j'ai un APPEND à BCERND qui fait:

Code : Tout sélectionner

APPEND BCERND

IF ~G("CerndKim",1)~ THEN BEGIN CerndKim1
  SAY ~ Oh, tu as de beaux seins.~
  IF ~~ THEN DO ~SG(KIMBANTER",0)~ EXTERN BKIM KimCernd1
END
Quand les deux personnages sont seuls dans le groupe, ça marche sans aucun problème. L'ennui, c'est quand il y a plus de monde: dans ce cas, et forcément, mon script enclenche un banter de Cernd qui n'est pas celui que je veux (puisqu'ils sont placés avant). Y aurait-il un moyen de faire que mon append se place au début, ou quelque chose comme ça ?
MOD KIM TERMINE
- Des centaines de dialogues et d'interactions
- De nombreuses quêtes
- De nouveaux objets magiques
- Une véritable romance

Roman d'Heroic Fantasy en feuilleton (un chapitre par jour)
Intro 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
Avatar du membre
Grenouillebleue
Loup effrayant
Messages : 723
Enregistré le : sam. 27 sept. 2003, 22:58
Localisation : Paris
Contact :
Statut : Hors ligne
.

Message par Grenouillebleue »

Ok, j'ai ma réponse, il faut que j'utilise les WEIGHT.
MOD KIM TERMINE
- Des centaines de dialogues et d'interactions
- De nombreuses quêtes
- De nouveaux objets magiques
- Une véritable romance

Roman d'Heroic Fantasy en feuilleton (un chapitre par jour)
Intro 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
Nysi
Ours noir
Messages : 191
Enregistré le : mer. 29 oct. 2003, 14:20
Localisation : Valenciennes
Contact :
Statut : Hors ligne
.

Message par Nysi »

Je suis en train de créer mon pnj, jusqu’à présent tout va bien mais alors arrivé au banter :sad: , elle ne démarre pas.

J'ai regarder comment grenouille a fait pour kim (Et aussi dans les mods tashia et solaufein) mais rien a faire je pige pas.

Je sais qu'il faut définir une variable pour que le dialogue se lance (j'ai essayé), mais ça marche pas. (J'ai fait des CTRL+I avec la console pour tester si quelqu’un connait un autre moyen qu'il le dise)

Aussi a quoi serve les WEIGHT ?
Venez visiter mon site http://membres.lycos.fr/nysi/
Avatar du membre
Isaya
Adepte de Grondemarteau
Planaire
Messages : 6990
Enregistré le : mar. 22 juil. 2003, 21:03
Localisation : Plaisir
Contact :
Statut : Hors ligne
.

Message par Isaya »

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).
:!: 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 !
Nysi
Ours noir
Messages : 191
Enregistré le : mer. 29 oct. 2003, 14:20
Localisation : Valenciennes
Contact :
Statut : Hors ligne
.

Message par Nysi »

Mon probleme doit venir d'un manque de sript, ce soir je suis fatigué donc j'essayerai tout ça a tete reposée.
Merci de ta reponse Isaya.

Pour les CTRL-I c'est une commande (cheat) qui une fois activé permet de forcer les banter a se lancer.
Venez visiter mon site http://membres.lycos.fr/nysi/
Répondre

Retourner vers « Dialogues »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 0 invité