Page 1 sur 1

[DLG] Comment faire dialoguer des persos customisés ?

Posté : lun. 09 mai 2016, 18:40
par Freddy_Gwendo
A l'heure de finaliser la quête de ma Chevaucheuse de licorne, je me pose une question existentielle : Que se passe-t-il si le joueur décide de créer une équipe à sa sauce et d'attribuer le kit à un perso autre que CHARNAME ?

Bref, quels fichiers de dialogues sont concernés par ces persos ? Et d'ailleurs, en disposent-ils ? Je n'en suis pas certain du tout... :shok:

Posté : lun. 09 mai 2016, 22:21
par Isaya
De façon générale le PJ s'exprime au travers du dialogue de la personne avec laquelle il parle. Je ne pense pas qu'il y ait de différence pour les autres personnages créés par le joueur. Eventuellement il faudrait ouvrir certaines choses de Player1 à d'autres dans des scripts qui engagent la conversation, par exemple.
A titre d'exemple de contraintes, pour le composant Dialogues initiés par le joueur, BG1 NPC introduit une pseudo-réplique (écrite comme un texte descriptif de situation) qui va être attribué au PNJ du groupe afin d'offrir au joueur, sous forme de réponses, le choix de la façon de véritablement initier l'échange.
Par ailleurs BG2 Tweaks modifie MULTIG.dlg pour intervenir dans dans le processus au moment de virer du groupe un personnage créé par le joueur. Il n'est pas exclus qu'il puisse être enrichi.

Enfin tu trouveras certains textes dans Player1.dlg. A première vue cela ne concerne que des messages communiqués au joueur en tant que pensées, je n'ai pas l'impression qu'il y ait des réponses possibles. Je pense qu'il y a par ailleurs des scripts généraux ou de zones qui déclenchent ce dialogue en fonction de circonstances. Il n'est pas forcément adapté à ton besoin.

Posté : lun. 09 mai 2016, 22:53
par Freddy_Gwendo
En gros, je suis coincé ici :

Code : Tout sélectionner

IF ~Kit(Player1,GW_UNICORN_RIDER)~ ==> <PLAYER1>... Quel étrange patronyme pour une suivante de Lurue. Mais il est vrai que tu n'appartiens pas au peuple de .
IF ~Kit(Player2,GW_UNICORN_RIDER)~ ==> <PLAYER2>... id
...
IF ~Kit(Player6,GW_UNICORN_RIDER)~ ==> <PLAYER6>... id.
Je voudrais que Player2 à 6 puissent répondre et je dois leur assigner un .dlg pour cela. Mais lequel en sachant qu'ils peuvent être aussi bien des PNJ que des persos créés ?

Posté : lun. 09 mai 2016, 23:24
par Isaya
J'aurais dû m'en douter. Pour ma part, j'avais exclus cette situation de ma réponse car je trouve inutilement complexe de vouloir gérer les modifications de "triche" du joueur tant les situations peuvent être sans fin. Et par ailleurs, cela fait bizarre de vouloir prendre en main la réaction d'un PNJ qui est supposé avoir une personnalité scriptée par son auteur. Ou quand on le fait, dans un banter ou une interjection, on sait pertinemment quel dialogue sera concerné et il suffit d'utiliser un CHAIN, par exemple.

Tu trouveras peut-être une solution générique en utilisant StartDialogOverride afin d'imposer temporairement un nouveau dialogue à un personnage avant d'initier un dialogue.

Posté : lun. 09 mai 2016, 23:41
par Freddy_Gwendo
Au départ, je comptais uniquement créer cette quête pour CHARNAME, mais je me suis aperçu que pas mal de joueurs utilisaient Level1NPC pour modifier les classes et les kits des PNJ vanilla et que de nombreux autres constituaient leur propre équipe.
Et je trouvais dommage de zapper la possibilité de trouver une licorne compagnon pour un perso du groupe autre que CHARNAME.

Mais si pour ça je dois pondre une usine à gaz, je vais peut-être me contenter d'une quête pour CHARNAME. :gign:

Posté : mer. 11 mai 2016, 11:44
par Freddy_Gwendo
Bon, j'ai vérifié plusieurs mods qui tentent de contourner ce problème :

1. Il faut des centaines de lignes de dialogues pour présenter une équipe à un PNJ (mod Djinni companion).
2. Aucun ne permet aux PNJ non officiels ou non modés de participer à un dialogue autre que recrutement-départ du groupe.


J'abandonne donc ce projet : la quête ne sera disponible que pour <CHARNAME>.

Posté : mar. 19 juil. 2016, 10:38
par Freddy_Gwendo
Suite...

J'ai contourné le problème et je ne n'ai plus besoin de réponse à la question précédente. ^^

En revanche, j'ai un petit souci de dialogue.

Background : Un médaillon permet de convoquer une licorne. Cette dernière s'adresse uniquement à celui qui possède le médaillon.

Tout va bien sauf lorsque je tente de coder ses répliques lorsque c'est un autre perso qui initie le dialogue.

En gros, si le possesseur du médaillon est <CHARNAME>, ça donne ceci :

Code : Tout sélectionner

CHAIN IF ~[color="#FFFF00"]!InPartySlot(LastTalkedToBy,0) RandomNum(2,1)[/color]~ GWLICORS GWLicorS_NoCharname1

@78	// ~Désolée, <GABBER> ! Je ne m'adresse qu'au possesseur du médaillon~ ~Désolée, <GABBER> ! Je ne m'adresse qu'à la détentrice du médaillon~

EXIT

CHAIN IF ~[color="#FFFF00"]!InPartySlot(LastTalkedToBy,0) RandomNum(2,2) !Kit(LastSummonerOf(Myself),GW_UNICORN_RIDER)[/color]~ GWLICORS GWLicorS_NoCharname2

@79	// ~Je veux parler à l'Elu de la Grande Cavalière.~ ~Je veux parler à l'Elue de la Grande Cavalière.~

EXIT

CHAIN IF ~[color="#FFFF00"]!InPartySlot(LastTalkedToBy,0) RandomNum(2,2) Kit(LastSummonerOf(Myself),GW_UNICORN_RIDER)[/color]~ GWLICORS GWLicorS_NoCharname3

@80	// ~Je veux parler à l'Elue de Lurue.~

EXIT
Mais ce que je veux faire, c'est remplacer !InPartySlot(LastTalkedToBy,0) - c'est toujours <CHARNAME> - par une variable indiquant que ce n'est pas le possesseur du médaillon (LastSummonerOf(Myself)) qui initie le dialogue.

Des idées ? Notamment sur l'utilisation de IsGabber() et Name() avec des variables autres que des noms de personnages ?

Posté : dim. 31 juil. 2016, 16:59
par Freddy_Gwendo
Près de quinze jours plus tard : pas d'idées ou c'est vraiment impossible ? ;)