Comme je n'ai jamais joué ce mod (les mods NPC me plaisent plutôt moyennement), je suis allé faire un tour dans ses fichiers pour te donner la manière de lancer ces dialogues.
Autant partir sur une base connue que de se lancer dans un long discours théorique...
>> Ce qui importe, ce sont les "
actions" et les "
triggers".
D'ailleurs, je te conseille vivement de télécharger la doc
IESDP afin de l'avoir en permanence lorsque tu codes.
Bref, si tu veux initier ton dialogue à partir de conditions ("triggers"), tu dois définir ces conditions dans un script. Lorsqu'elles sont remplies, le script lance le dialogue.
Dans le mod que tu cites, les conditions se trouvent dans les fichiers .baf de Saerileth, notamment SAERILET.baf et SAERIL25.baf (pour ToB).
On y trouve ceci :
Code : Tout sélectionner
IF
[color="#FFFF00"]HasItem("ring39",Myself)[/color] <-- Condition : Saerileth possède l'anneau de Gaxx
Global("NSRingofGaxx","LOCALS",0)
THEN
RESPONSE #100
[color="#00FF00"]SetGlobal("NSRingofGaxx","LOCALS",1)[/color] <-- Variable remplissant la condition précédente
[color="#00FFFF"]StartDialogueNoSet(Player1)[/color] <-- Action : Saerileth s'adresse à <CHARNAME>
END
D'où le Dialogue :
Code : Tout sélectionner
IF ~[color="#00FF00"]Global("NSRingofGaxx","LOCALS",1)[/color]~ THEN BEGIN NSRingofGaxx
SAY @1349 = ~Cet anneau est mauvais, <CHARNAME>! Je ne souffrirai pas à son toucher, ni ne le porterai.~
IF ~~ THEN DO ~[color="#00FF00"]SetGlobal("NSRingofGaxx","LOCALS",2)[/color] <-- La variable est incrémentée d'une unité pour éviter de reprendre le dialogue en boucle
[color="#00FFFF"]DropItem("ring39",[-1.-1])[/color]~ EXIT <-- [B]ACTION : Jette l'anneau[/B]
END
Puis le bloc de script
Code : Tout sélectionner
IF
HasItem("ring39",Myself)
Global("NSRingofGaxx","LOCALS",2)
THEN
RESPONSE #100
[color="#00FF00"]SetGlobal("NSRingofGaxx","LOCALS",3)[/color]
StartDialogueNoSet(Player1)
END
renvoie au dialogue suivant :
Code : Tout sélectionner
IF ~[color="#00FF00"]Global("NSRingofGaxx","LOCALS",3)[/color]~ THEN BEGIN NSDestroyGaxx
SAY @1351 = ~Le fait que tu me redonnes cet anneau me dit que tu le détruirais par la lumière de Tyr.~
IF ~~ THEN DO ~[color="#00FF00"]SetGlobal("NSRingofGaxx","LOCALS",4)[/color]
DestroyItem("ring39")~ EXIT
END
De même :
Code : Tout sélectionner
IF
[color="#FFFF00"]InParty(Myself)[/color] <-- Saerileth est dans le groupe
[color="#FFFF00"]Dead("Demogor2")[/color] <-- Démogorgon est retourné au "Paradis des Démons"
[color="#FFFF00"]AreaCheck("AR3000")[/color] <-- On se trouve dans cette zone
Global("NSGiftofTyrSOA","LOCALS",0)
THEN
RESPONSE #100
[color="#00FF00"]SetGlobal("NSGiftofTyrSOA","LOCALS",1)[/color] <-- Variable résumant les conditions précédentes
StartDialogueNoSet(Player1)
END
lance ce dialogue :
Code : Tout sélectionner
IF ~[color="#00FF00"]Global("NSGiftofTyrSOA","LOCALS",1)[/color]~ THEN BEGIN NSBooksSOA
SAY @1347 = ~<CHARNAME>! Qu'est ce que c'est? Il semble que l'Aveugle Tyr m'a béni avec sa faveur avec ces présents~
=
@1348 = ~Peut être que ces tomes contiennent un message du Dieu Mutilé. Regardons les!!~
IF ~~ THEN DO ~GiveItemCreate("NSCHBOOK","Saerileth",0,0,0)
GiveItemCreate("NSWSBOOK","Saerileth",0,0,0)
[color="#00FF00"]SetGlobal("NSGiftofTyrSOA","LOCALS",2)[/color]~
EXIT
END
Klare a écrit :Sauf que... j'ai toujours pas deviner comment en faire une condition pour lancer le dialogue de fin a savoir : CHARNAME a un item precis sur lui.
C'est donc le trigger
HasItem("ring39",Myself) !
"Myself" renvoyant à Saerileth, utilise "Player1" pour <CHARNAME> si tu lances le dialogue à partir du script de ton NPC, ou conserve "Myself" si tu le lances à partir d'un des scripts de <CHARNAME> (mais évite le plus possible d'intervenir dans ces derniers).
Tu peux aussi utiliser celui-ci :
0x4042 PartyHasItem(S:Item*)
Returns true if any of the party members have the specified item in their inventory. This trigger also checks with container items (e.g. Bags of Holding).
Petite note : la variable Global("NSGiftofTyrSOA","LOCALS",1) utilise le code "
LOCALS" qui n'est pris en compte que pour le script de Saerileth, si tu voulais une variable lançable n'importe quand et par n'importe qui, il faudrait utiliser le code "
GLOBAL". On peut même utiliser des variables de zone (en remplaçant "LOCALS" par "
AR3000" par exemple) opérationnelles uiquement dans certaines zones.