-Prechan-, le 26.08.2009 à 23:47, dit :
En effet, j'ai un problème récurrent avec ce script. Ce que j'essaye de mettre en place, c'est le fait que le PJ lise le Book, ce qui déclencherai la fonction SetStage, mais ce, seulement la première fois. Et je ne trouve pas le moyen de le faire correctement...
Par défaut, quand on active un objet, on utilise en fait la fonction
Activate sur le dit objet, cette fonction actionnera si c'est un
activator, ça ferme/ouvre les portes, ça lit les livres, ramasse les objets, fouille les
Flora, ouvre les
Conteners et cetera...
Le truc, avec le bloc
OnActivate, la fonction
Activate est remplacé par le contenu du bloc. Donc si tu y mets uniquement un
SetStage, quand tu actionnera le livre, ça mettra à jour ton journal mais c'est tout, ça ne lira pas le livre.
C'est pourquoi il suffit d'y ré-appliquer la fonction
Activate.
Dans ton cas, ça donnerait un truc dans le genre:
Begin OnActivate
Activate
If (getstage aaaQuest < 5)
SetStage aaaQuest 5
EndIf
End
Il faut savoir, qu'a la lecture du livre, tu verras le message de mise à jour du journal en plein écrans, celui où il faut faire
Ok, ce-dernier joue un son. De ce que j'ai pu remarquer, c'est que le dernier son joué
semble parasiter l'ancien. Si tu veux être sûr que le son sera joué, il faudrait donc le placer
théoriquement après le
EndIf. Mais comme je te l'ai dis sur mon premier message, là je ne suis sûre de rien.
Si tu veux vraiment que le son soit joué à la fermeture du livre...j'ai une idée un peu tordue...car je ne sais pas comment faire autrement, peut-être y-a-t-il une solution plus simple...
C'est de simplement faire un script de quête, avec ceci dedans:
Short SonJoue
Begin GameMode
If SonJoue == 0
GetStageDone 5
PlaySound aaaSooooound
Set SonJoue to 1
EndIf
EndIf
End
Là, il testera en jeu (et donc, pas quand le joueur lis le livre) si le
Stage est ou non été fait, si oui, il joue le son une unique fois, vu le temps d'exécution du script, ça sera presque juste-après la fermeture du livre, mais il y aura tout de même un temps de latence...
Seulement, ce script pose problème si le
Stage 5 peut-être appelé par un autre biais que la lecture du livre...
Dans ce cas, il faudrait plutôt créer une nouvelle variable dans le script de quête, par exemple
Lecture, et lorsque tu lis le livre, tu fais un
Set IDDeLaQuête.Lecture to 1 (change la variable dans le script de la quête mentionnée), dans ton script de quête, au lieu de tester le
Stage, tu testera cette variable.
Du coup, puisque tu testeras une nouvelle variable, tu pourrais économiser l'ancienne, ça donnerait quelque chose comme ceci:
Short Lecture
Begin GameMode
If Lecture == 1;La variable sera mise à 1 par la lecture du livre dans le script de ce dernier.
PlaySound aaaSooooound
Set Lecture to 2
EndIf
End