Page 1 sur 1

[DLG] Comment lancer un dialogue après un repos ?

Posté : mer. 25 mai 2011, 16:38
par Anouchka
Salut!

Pour un premier post sur le forum, j'aurai besoin des weidusiens:

NI et IESDEP sont restés muets, et pourtant, dans la jeu, il y a nombre de moments ou un dialogue ou un combat se déclenche quand on appuie sur "repos" (ex: Romance d'Anomen pour faire simple)
J'ai besoin de lancer un dialogue de la même façon: le joueur appuie sur repos, le dialogue se lance;

Bref, PartyRested() n'est que pour l'"après repos" et ne corresponds pas à ce que je veux, j'ai donc testé divers petits moyens sans trouver ZE truc qui corresponds..... :dash1:

Quelqu'un l'aurai sous le coude? Ou mieux encore, l'aurai intégré à son mod/projet?

Merci d'avance! ^^

Posté : jeu. 26 mai 2011, 21:27
par Isaya
Bonjour Anouchka,

Ce mécanisme est pris en charge par un script, généralement appelé nompnjD.BCS. Ce script doit être référencé dans le fichier pdialog.2da, dans la colonne DREAM_SCRIPT_FILE.

On peut penser qu'il est appelé à chaque repos. Il faut donc introduire dans le script les conditions nécessaires pour qu'il ne se déclenche qu'au moment opportun, typiquement en fonction de la variable qui dicte l'avancement de la romance.

Puisque tu cites Anomen, voici ce que donne le script ANOMEND.BCS

Code : Tout sélectionner

IF
	!Global("AnomenRomanceActive","GLOBAL",0)
	!Global("AnomenRomanceActive","GLOBAL",3)
	Global("AnomenMatch","GLOBAL",1)
	See(Player1)
	CombatCounter(0)
	OR(2)
		Global("LoveTalk","LOCALS",31)
		Global("LoveTalk","LOCALS",35)
THEN
	RESPONSE #100
		IncrementGlobal("LoveTalk","LOCALS",1)
		RealSetGlobalTimer("AnomenRomance","GLOBAL",1)
		PlaySong(35)
		Interact(Player1)
END
Cela ressemble beaucoup aux blocs de script employés dans le script principal du PNJ pour les autres dialogues de romance.

Parmi les mods qui s'en servent, je peux citer Chloe Romance. Ce n'est peut-être pas un modèle en général, car il est très ancien. Mais il exploite cette possibilité. J'aurais dû m'en souvenir, car il m'avait fallu corriger le fichier TP2 du mod pour que ça fonctionne après la conversion pour compatibilité avec BGT. ;) Il doit même encore rester un commentaire à mon nom dans le fichier. Pourtant j'avais oublié.

Pour l'écriture de romance, il existe à ma connaissance un seul tutorial qui couvre un peu tous les aspects. C'est celui de Rastor. Il n'est pas tout à fait complet, notamment parce qu'il ne traite pas du dialogue de l'arbre de vie, mais il couvre justement cet aspect du dialogue avant et après le sommeil.

Bonne continuation.

Posté : dim. 29 mai 2011, 10:28
par Anouchka
Merci pour ta réponse, je vais potasser tout ça ^^

Dératiseur m'a aussi fourni des éléments de réponse, et m'a permis d'avancer:

http://weiducommando.forumsactifs.com/t ... e-sur-dodo

Testé in game, ca marche, le dialogue se lance parfaitement ;)

Merci beaucoup en tous cas!

Posté : mar. 31 mai 2011, 21:42
par Isaya
Je vois deux défauts (le second est seulement potentiel) à la méthode suggérée par dératiseur :
  • comme il semble que ce soit dans le script de comportement du personnage, ce bloc sera testé en permanence pour rien, ce qui aura pour effet de ralentir le jeu ; peut-être pas beaucoup, mais ce genre de surcharge inutile d'un script exécuté en permanence participe au ralentissement global en cas de méga-installation
  • j'ignore si cette combinaison d'états testée (CD_STATE_NOTVALID) est fiable pour ce que tu veux faire. Quand on regarde cette valeur (ajoutée par le BG2 Fixpack, elle n'existe pas avec un jeu non moddé, donc il faudra prévoir dans ton TP2 le code pour l'ajouter, ou alors vérifier que le BG2 Fixpack est bien installé), on constate qu'elle couvre presque tous les cas où le personnage n'est effectivement pas disponible, sauf STATE_CHARMED, ce qui pourrait signifier que le dialogue pourrait se déclencher même dans le cas où CHARNAME est charmé (pour Xan, dans l'exemple cité par dératiseur, on peut imaginer que son script ne s'exécute plus sous l'effet d'un charme).
A contrario, la méthode indiquée par Rastor utilise un script qui est lancé uniquement au moment du repos et n'a probablement pas besoin de contrôle d'état sortant de l'ordinaire : le repos est refusé si le jeu détecte des conditions de type combat (personnage sous l'effet de certains sorts notamment).

Enfin, il vaut toujours mieux avoir deux solutions possibles au lieu d'une seule.

Posté : mer. 08 juin 2011, 19:34
par Anouchka
Désolée je réponds un peu tardivement, j'ai eu peu de temps à moi recemment

pour le (CD_STATE_NOTVALID) , aucun problème, mon TP2 en est équipé depuis le début, c'est "rodé" ;)

Pour ce qui est du problème du ralentissement, en effet je n'y avait pas pensé. chez moi, il n'y aucun ralentissement, mais je te fais confiance si tu dis que ca peut poser problème...Je tenterais la version de Rastor sous peu, histoire de voir laquelle des deux façon me convient le mieux!

Merci pour ton aide en tous cas! ^^

Posté : jeu. 27 sept. 2012, 15:25
par Wolghaï
Bonjour
J'ai vu que des solutions fiables avaient été trouvées pour ce problème, mais j'en ai trouvé une autre en parcourant des tutos.
Vous pourrez lire la totalité du tuto à cette adresse : http://www.shsforums.net/topic/36780-co ... -romances/
Triggering dialogues before rest
When you want something to happen before rest, it needs to go into the NPC's dream script. All NPC dream scripts are checked right before resting. An NPCs dream script is the same as their override script, with a "D" on the end. So, if the override script is ##NPC the dream script would be ##NPCD.
Je ne peux pas vous certifier que ça marche, je me suis juste rappelé en le lisant que la question avait été posée ici. ;)


EDIT pour Isaya:
Désolé pour le doublon de réponse alors qu'en plus "je sors de nul part" :$
Je me suis senti redevable à force d’apprendre plein de trucs, et j'ai cru ne pas avoir lu la solution ici et je suis tombé dessus ailleurs ...
Bref, je vais laisser "aux grands" le soin de répondre, surtout quand c'est déjà fait, et m'acheter des lunettes ;)

Posté : jeu. 27 sept. 2012, 20:55
par Isaya
Il me semble que c'est exactement ce que j'ai écrit dans le message #2, et en français. ;)

Wolghaï : il n'y a ni grand ni "sorti de nulle part" quand il s'agit d'apporter des bonnes réponses. Le tutoriel que tu cites est très intéressant et montre que ma remarque du message #2 était fausse : il existe d'autres tutoriels que celui que j'indiquais.

Mes excuses pour la remarque présomptueuse.