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é...
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é...
Dialogue compliqué, besoin d'aide
- deratiseur
- Golem de fer
- Messages : 3698
- Enregistré le : mer. 05 déc. 2007, 18:35
- Localisation : Gap, Hautes alpes
- Statut : Hors ligne
Dialogue compliqué, besoin d'aide
.
Je suis entrain de créer un dialogue plus compliqué que tout ce que j'ai déjà fait pour mes marchands, et je butte sur quelques trucs. Voilà les contextes :
BEGIN Maiq
IF ~~ THEN BEGIN presentation SAY @901
IF ~~ THEN REPLY @902 GOTO maiq
IF ~~ THEN REPLY @903 GOTO dragon
IF ~~ THEN REPLY @9026 DO ~~ Exit (je voudrais que cette dernière réponse termine le dialogue, mais je ne sais le faire que par "celui qui parle donne une réponse du genre "comme vous voudrez" puis quitte le dialogue")
END
IF ~~ THEN BEGIN maiq SAY @9022 GOTO presentation (je voudrais que celui qui parle donne sa réponse et qu'on ne puisse que cliquer sur "continuer", ce qui fait revenir à la liste des propositions.)
END
BEGIN Maiq
IF ~~ THEN BEGIN presentation SAY @901
IF ~~ THEN REPLY @902 GOTO maiq
IF ~~ THEN REPLY @903 GOTO dragon
IF ~~ THEN REPLY @9026 DO ~~ Exit (je voudrais que cette dernière réponse termine le dialogue, mais je ne sais le faire que par "celui qui parle donne une réponse du genre "comme vous voudrez" puis quitte le dialogue")
END
IF ~~ THEN BEGIN maiq SAY @9022 GOTO presentation (je voudrais que celui qui parle donne sa réponse et qu'on ne puisse que cliquer sur "continuer", ce qui fait revenir à la liste des propositions.)
END
- deratiseur
- Golem de fer
- Messages : 3698
- Enregistré le : mer. 05 déc. 2007, 18:35
- Localisation : Gap, Hautes alpes
- Statut : Hors ligne
.
Autant pour moi, Exit doit être en majuscule.
Par contre je butte toujours sur le deuxième point.
Par contre je butte toujours sur le deuxième point.
-
- Squelette
- Messages : 131
- Enregistré le : lun. 09 août 2021, 19:36
- Statut : Hors ligne
.
deratiseur a écrit :
IF ~~ THEN BEGIN maiq SAY @9022 GOTO presentation (je voudrais que celui qui parle donne sa réponse et qu'on ne puisse que cliquer sur "continuer", ce qui fait revenir à la liste des propositions.)
END
J'ai peut-être mal compris ce que tu souhaites faire mais dans ce cas pourquoi pas tout simplement copier le contenu de "presentation" dans le "maiq" et d'utiliser ensuite un CHAIN ? (Par contre, c'est sûr que ça sera plus lourd que de rediriger directement vers "presentation" depuis le "maiq" comme tu souhaitais le faire)
CHAIN ~NomDuDLG~ maiq
SAY @9022
= @901 // (ou == NomDeLautreDLG @901 si changement de PNJ)
++ @902 + maiq
++ @903 + dragon
++ @9026 DO ~~ EXIT
J'ai pas testé mais sauf erreur dans la syntaxe, dans l'idée ça devrait marcher pour un .d donc il doit bien y avoir moyen de l'adapter à un .baf
Mais peut-être que j'ai pas du tout compris ce que tu souhaitais faire...
- deratiseur
- Golem de fer
- Messages : 3698
- Enregistré le : mer. 05 déc. 2007, 18:35
- Localisation : Gap, Hautes alpes
- Statut : Hors ligne
.
Heu... tout simplement parce que je n'utilise jamais CHAIN car je n'y comprend rien. Et ++ non plus.Machiavélique a écrit :J'ai peut-être mal compris ce que tu souhaites faire mais dans ce cas pourquoi pas tout simplement copier le contenu de "presentation" dans le "maiq" et d'utiliser ensuite un CHAIN ? (Par contre, c'est sûr que ça sera plus lourd que de rediriger directement vers "presentation" depuis le "maiq" comme tu souhaitais le faire)
CHAIN ~NomDuDLG~ maiq
SAY @9022
= @901 // (ou == NomDeLautreDLG @901 si changement de PNJ)
++ @902 + maiq
++ @903 + dragon
++ @9026 DO ~~ EXIT
J'ai pas testé mais sauf erreur dans la syntaxe, dans l'idée ça devrait marcher pour un .d donc il doit bien y avoir moyen de l'adapter à un .baf
Mais peut-être que j'ai pas du tout compris ce que tu souhaitais faire...
En fait je veux que le gars se présente, et qu'on puisse lui demander tout en tas de trucs. A chaque fois, il donne sa réponse, puis le joueur clique sur "continuer" et le dialogue revient à la liste des questions possibles (dont une, bien sur, dit "au revoir" suivi de exit)
- Freddy_Gwendo
- Adepte de Grondemarteau
- Orbe ancien
- Messages : 5877
- Enregistré le : sam. 23 avr. 2011, 00:26
- Localisation : Égaré dans un vortex entre Féérune et le Royaume de Diamant Éternel
- Statut : Hors ligne
.
Pas sûr d'avoir tout compris, mais...
quant aux + et ++ :
En gros, + remplace IF, THEN REPLY, GOTO.
deratiseur a écrit :Je suis entrain de créer un dialogue plus compliqué que tout ce que j'ai déjà fait pour mes marchands, et je butte sur quelques trucs. Voilà les contextes :
Code : Tout sélectionner
BEGIN Maiq IF ~~ THEN BEGIN presentation SAY @901 IF ~~ THEN REPLY @902 GOTO maiq IF ~~ THEN REPLY @903 GOTO dragon IF ~~ THEN REPLY @9026 DO ~~ Exit (je voudrais que cette dernière réponse termine le dialogue, mais je ne sais le faire que par "celui qui parle donne une réponse du genre "comme vous voudrez" puis quitte le dialogue") END IF ~~ THEN BEGIN maiq SAY @9022 GOTO presentation (je voudrais que celui qui parle donne sa réponse et qu'on ne puisse que cliquer sur "continuer", ce qui fait revenir à la liste des propositions.) END
Code : Tout sélectionner
IF ~~ THEN BEGIN presentation
SAY ~Bonjour~
IF ~~ THEN REPLY ~choix 1~ GOTO choix1
IF ~~ THEN REPLY ~choix 2~ GOTO choix2
IF ~~ THEN REPLY ~choix n~ GOTO choixn
IF ~~ THEN REPLY ~Au revoir~ EXIT // Note : DO ~~ ne sert à rien puisqu'il ne crée pas d'action.
END
IF ~~ THEN choix1
SAY ~Réponse1~
IF ~~ THEN GOTO presentation
END
IF ~~ THEN choix2
SAY ~Réponse2 pas content : arrête la discussion.~
IF ~~ THEN EXIT
END
Code : Tout sélectionner
[color="#00FFFF"]++[/color] ~choix 1~ [color="#00FFFF"]+[/color] reponse1 =[color="#00FFFF"] IF ~~ THEN REPLY[/color] ~choix 1~ [color="#00FFFF"]GOTO[/color] reponse1
Code : Tout sélectionner
[color="#00FFFF"]+[/color] ~condition1~ [color="#00FFFF"]+[/color] ~choix 1~ [color="#00FFFF"]+[/color] reponse1 = [color="#00FFFF"]IF[/color] ~condition1~ [color="#00FFFF"]THEN REPLY[/color] ~choix 1~ [color="#00FFFF"]GOTO[/color] reponse1
CARPE DIEM...Co-modérateur de La Forge et de La Chambre des Scribes
Moddeur qui s'arrache les cheveux...
Moddeur qui s'arrache les cheveux...
... avec Menace sur le Royaume de Diamant Éternel.
- deratiseur
- Golem de fer
- Messages : 3698
- Enregistré le : mer. 05 déc. 2007, 18:35
- Localisation : Gap, Hautes alpes
- Statut : Hors ligne
.
Bon, j'ai essayé, main mon PNJ n'a toujours rien à me dire.
Dialogue :
Dialogue :
BEGIN Maiq
IF ~~ THEN presentation SAY ~Bonjour, aventuriers. M'aiq sait beaucoup de choses. De quoi voudriez vous que M'aiq vous parle ?~
IF ~~ THEN REPLY ~M'aiq~ GOTO maiq2
IF ~~ THEN REPLY ~Je n'ai pas le temps de discuter. Au revoir.~ EXIT
END
IF ~~ THEN presentation2 SAY ~Autre chose ?~ (ce bloc est la copie du premier pour que la phrase d'introduction ne soit pas la même)
IF ~~ THEN REPLY ~M'aiq~ GOTO maiq2
IF ~~ THEN REPLY ~Je n'ai pas le temps de discuter. Au revoir.~ EXIT
END
IF ~~ THEN maiq2 SAY ~Le père de M'aiq s'appelait également M'aiq. Tout comme le père du père de M'aiq. Du moins, c'est ce que disait son père.~
IF ~~ THEN GOTO presentation2
END
-
- Squelette
- Messages : 131
- Enregistré le : lun. 09 août 2021, 19:36
- Statut : Hors ligne
.
Que Freddy_Gwendo me corrige si je me trompe mais normalement tu dois avoir un BEGIN ~NomDuDLG~ si tu désires créer un dialogue à partir de zéro (donc un BEGIN ~Maiq~ écrasera un eventuel DLG ~Maiq~ existant, il faut un APPEND ou un CHAIN pour ajouter du contenu à un DLG).
J'ai jamais testé ou vu de BEGIN sans les tildes entourant le nom du DLG (peut-être que ça peut fonctionner sans je ne sais pas)
Pour moi il faudrait écrire :
Tu rentres dans un label seulement au moyen d'un GOTO (comme GOTO presentation2) OU si la condition qui régit le label existe et est vraie au moment où le script est lu. Quand tu tombes sur un EXIT le script ne sort pas pour continuer à lire ce qu'il y a en dessous, il recommence à relire le script depuis le début en cherchant la première condition de label qui sera vraie afin de l'exécuter (si pas de condition il continuera à lire le script en descendant jusqu'à la fin).
J'ai jamais testé ou vu de BEGIN sans les tildes entourant le nom du DLG (peut-être que ça peut fonctionner sans je ne sais pas)
Pour moi il faudrait écrire :
Code : Tout sélectionner
BEGIN ~Maiq~ [color="#00FF00"]// Création du DLG Maiq[/color]
IF ~NumTimesTalkedTo(0)~ THEN BEGIN presentation [color="#00FF00"]// Déclaration du label presentation (unique au DLG Maiq). J'ai rajouté un NumTimesTalkedTo(0)* [/color]
SAY ~Bonjour, aventuriers. M'aiq sait beaucoup de choses. De quoi voudriez vous que M'aiq vous parle ?~ [color="#00FF00"]// Phrase prononcée par le perso auquel le DLG est attaché[/color]
IF ~~ THEN REPLY ~M'aiq~ GOTO maiq2 [color="#00FF00"]// 1er choix de réponse du joueur (non imposée par une condition et menant au label maiq2)[/color]
IF ~~ THEN REPLY ~Je n'ai pas le temps de discuter. Au revoir.~ EXIT [color="#00FF00"]// 2ème choix de réponse du joueur (non imposée par une condition et amenant à un fin de dialogue)[/color]
END [color="#00FF00"]// Fin du label presentation[/color]
IF ~~ THEN presentation2 [color="#00FF00"]// Déclaration du label presentation2 (unique au DLG Maiq)[/color]
SAY ~Autre chose ?~ [color="#00FF00"]// (ce bloc est la copie du premier pour que la phrase d'introduction ne soit pas la même)[/color]
IF ~~ THEN REPLY ~M'aiq~ GOTO maiq2 [color="#00FF00"]// 1er choix de réponse du joueur (non imposée par une condition et menant au label maiq2)[/color]
IF ~~ THEN REPLY ~Je n'ai pas le temps de discuter. Au revoir.~ EXIT [color="#00FF00"]// 2ème choix de réponse du joueur (non imposée par une condition et amenant à un fin de dialogue)[/color]
END [color="#00FF00"]// Fin du label presentation2[/color]
IF ~~ THEN maiq2 [color="#00FF00"]// Déclaration du label maiq2 (unique au DLG Maiq)[/color]
SAY ~Le père de M'aiq s'appelait également M'aiq. Tout comme le père du père de M'aiq. Du moins, c'est ce que disait son père.~
IF ~~ THEN GOTO presentation2 [color="#00FF00"]// On va au label presentation2 en devant cliquer sur "continuer" (ce que tu souhaitais faire) [/color]
END
[color="#00FF00"]/*******************************************************************************************************************************************************************************************************************************************/
/* J'ai rajouté un NumTimesTalkedTo(0) car je ne suis pas sûr que ça marche s'il n'y a pas une condition (même avec un BEGIN). */
/* S'il n'y a pas de condition le code n'est pas lu et si une condition est vraie alors le code est lu et ensuite il recommence à lire le fichier depuis le début (donc mettre une condition toujours vraie serait une très mauvaise idée. */
/* Avec NumTimesTalkedTo(0) la condition ne sera vraie que si c'est la toute première fois qu'on s'adresse au personnage, il faudra ensuite gérer le reste avec une variable (ou faire autrement que NumTimesTalkedTo(0)) */
/*******************************************************************************************************************************************************************************************************************************************/[/color]
- deratiseur
- Golem de fer
- Messages : 3698
- Enregistré le : mer. 05 déc. 2007, 18:35
- Localisation : Gap, Hautes alpes
- Statut : Hors ligne
.
Du coup j'en conclu qu'il faut mettre une condition à chaque fois pour que ça fonctionne.
Mon dialogue avec Deckard Cain pourtant très simple :
Note : BEGIN ~pxl2deck~ ne change rien.
Et chose bizarre :
Enfin, ça marche en bidouillant, c'est tout ce qui compte. merci à vous, j'avance.
Mon dialogue avec Deckard Cain pourtant très simple :
rendait Deckard muet alors que :BEGIN pxl2deck
IF ~~ THEN BEGIN proposition SAY @80691121
++ @80691122 DO ~StartStore("pxl2deck",LastTalkedToBy())~ EXIT
++ @80691123 EXIT
END
Lui rend la paroleBEGIN pxl2deck
IF ~true~ THEN BEGIN proposition SAY @80691121
++ @80691122 DO ~StartStore("pxl2deck",LastTalkedToBy())~ EXIT
++ @80691123 EXIT
END
Note : BEGIN ~pxl2deck~ ne change rien.
Et chose bizarre :
Fait qu'il ne me parle qu'une fois puis devient muet. je dois corriger ça avecBEGIN ~pxl2maiq~
IF ~NumTimesTalkedTo(0)~ THEN presentation SAY @901
IF ~~ THEN REPLY @905 GOTO maiq2
IF ~~ THEN REPLY @903 EXIT
END
IF ~~ THEN presentation2 SAY @902
IF ~~ THEN REPLY @905 GOTO maiq2
IF ~~ THEN REPLY @903 EXIT
END
IF ~~ THEN maiq2 SAY @906
IF ~~ THEN GOTO presentation2
END
qui marche mais qui est bien lourd, et je n'y vois pas de raison logique.BEGIN ~pxl2maiq~
IF ~NumTimesTalkedTo(0)~ THEN presentation SAY @901
IF ~~ THEN REPLY @905 GOTO maiq2
IF ~~ THEN REPLY @903 EXIT
END
IF ~!NumTimesTalkedTo(0)~ THEN presentation2 SAY @902
IF ~~ THEN REPLY @905 GOTO maiq2
IF ~~ THEN REPLY @903 EXIT
END
IF ~~ THEN maiq2 SAY @906
IF ~~ THEN GOTO presentation2
END
Enfin, ça marche en bidouillant, c'est tout ce qui compte. merci à vous, j'avance.
- deratiseur
- Golem de fer
- Messages : 3698
- Enregistré le : mer. 05 déc. 2007, 18:35
- Localisation : Gap, Hautes alpes
- Statut : Hors ligne
.
Je reviens à la charge avec un problème de dialogue d'un autre genre. (note, mon dialogue fonctionne c'est juste un problème technique)
Soit la boucle à condition :
Soit la boucle à condition :
Pourquoi après avoir lu la réponse 3 et être revenu au menu de base je n'ai pas la proposition de réponse "4" ? -> mais si je redemande la 3 en revenant oui j'ai la proposition 4 -> je dois donc demander deux fois la 3 pour avoir la 4. WTF ?IF ~~ THEN sousort SAY @9023
IF ~~ THEN REPLY @9024 GOTO 1 (réponse toujours disponible)
IF ~~ THEN REPLY @9026 GOTO 2 (réponse toujours disponible)
IF ~Global("maiqcerq","LOCALS",1) CheckStatGT(LastTalkedToBy(),15,WIS)~ THEN REPLY @9028 GOTO 3 (réponse disponible SI SAGESSE>15 & dialogue "2" été utilisé)
IF ~Global("maiqcerqsec","LOCALS",1)~ THEN REPLY @9030 GOTO 4 (réponse disponible SI le dialogue "3" à été utilisé)
IF ~~ THEN REPLY @904 GOTO presentation2 (réponse de au-revoir pour revenir au menu général)
END
IF ~~ THEN 1 SAY @9025
IF ~~ THEN GOTO sousort
END
IF ~~ THEN 2 SAY @9027
IF ~~ THEN DO ~SETGlobal("maiqcerq","LOCALS",1)~ GOTO sousort
END
IF ~~ THEN 3 SAY @9029
IF ~~ THEN DO ~SETGlobal("maiqcerqsec","LOCALS",1)~ GOTO sousort
END
IF ~~ THEN 4 SAY @9031
IF ~~ THEN GOTO sousort
END
- Freddy_Gwendo
- Adepte de Grondemarteau
- Orbe ancien
- Messages : 5877
- Enregistré le : sam. 23 avr. 2011, 00:26
- Localisation : Égaré dans un vortex entre Féérune et le Royaume de Diamant Éternel
- Statut : Hors ligne
.
Le problème vient de la façon dont le moteur du jeu enregistre les modifications de variables. En gros, pour que la modification de variable prenne effet, il faut au moins deux validations de dialogues.
Pour que le dialogue suivant fonctionne
Il faut l'écrire comme ceci :
Il existe une autre possibilité qui nécessite l'installation de ToBex et/ou un jeu EE. Ajouter le FLAG BIT 9 (Execute immediate) à la réponse.
Pour que le dialogue suivant fonctionne
Code : Tout sélectionner
0 = bonjour à vous
enchanté de vous connaître DO variable_dejavu = 1 GOTO 1
IF variable_dejavu = 1 On ne s'est pas déjà rencontré GOTO 2
...
1 = De même. Je m'appelle Schmoll. Et vous ?
reponse 1 GOTO3
reponse 2 GOTO 0
Il faut l'écrire comme ceci :
Code : Tout sélectionner
0 = bonjour à vous
enchanté de vous connaître DO variable_dejavu = 1 GOTO 1
IF variable_dejavu = 1 On ne s'est pas déjà rencontré GOTO 2
...
1 = De même.
GOTO 1b
1b = Je m'appelle Schmoll. Et vous ?
reponse 1 GOTO3
reponse 2 GOTO 0
Il existe une autre possibilité qui nécessite l'installation de ToBex et/ou un jeu EE. Ajouter le FLAG BIT 9 (Execute immediate) à la réponse.
CARPE DIEM...Co-modérateur de La Forge et de La Chambre des Scribes
Moddeur qui s'arrache les cheveux...
Moddeur qui s'arrache les cheveux...
... avec Menace sur le Royaume de Diamant Éternel.
- Freddy_Gwendo
- Adepte de Grondemarteau
- Orbe ancien
- Messages : 5877
- Enregistré le : sam. 23 avr. 2011, 00:26
- Localisation : Égaré dans un vortex entre Féérune et le Royaume de Diamant Éternel
- Statut : Hors ligne
.
Édit : sinon, les bons triggers pour ton dialogue sont NumTimesTalkedTo(0) et NumTimesTalkedToGT(0)
CARPE DIEM...Co-modérateur de La Forge et de La Chambre des Scribes
Moddeur qui s'arrache les cheveux...
Moddeur qui s'arrache les cheveux...
... avec Menace sur le Royaume de Diamant Éternel.
-
- Squelette
- Messages : 131
- Enregistré le : lun. 09 août 2021, 19:36
- Statut : Hors ligne
.
À ma connaissance oui. Il faut au moins que quelque part une condition soit vraie pour rentrer dans un label et ensuite faire tout ce que tu veux. Tu pourrais très bien ne mettre aucune condition dans ton DLG ~maiq~ et accéder à des labels de ~maiq~ depuis un autre DLG avec un EXTERN ~Maiq~ presentation (Mais cela signifie que tu aurais alors dans cet autre DLG une condition de label devant être vraie pour rentrer dans ce label et exécuter le code te permettant d'accéder au label presentation du DLG ~Maiq~. Donc même si en apparence tu pourrais te passer de condition dans ~Maiq~ tu serais quand même obligé d'en avoir au moins une ailleurs. Donc il n'y a besoin d'en mettre à chaque fois, mais juste 1 à chaque fois qu'il y a une partie de script que tu souhaites lancer.)deratiseur a écrit :Du coup j'en conclu qu'il faut mettre une condition à chaque fois pour que ça fonctionne.
Mon dialogue avec Deckard Cain pourtant très simple
Ce que tu as écrit dans ton 2nd post avec les variables locales est pour moi la meilleure façon de faire. L'idée du NumTimesTalkedTo(0) est justement de désigner le premier label qui doit être exécuté et ensuite de "retenir" que cela s'est produit en utilisant une variable locale. Grâce à cette variable locale que tu peux faire évoluer tu peux faire en sorte que la prochaine fois que tu lui parles, soit tu relances le même dialogue, soit tu en lances un autre, soit tu fais complètement autre chose, les possibilités sont presque infinies...
Utiliser IF ~true~ ou IF ~!NumTimesTalkedTo(0)~ ou tout autre chose qui, une fois passée à true restera à true, risque de t'exposer à d'autres problèmes lorsque tu rajouteras des choses en plus que ce soit directement dans ton .d/.baf ou au moyen d'une extension. Pour moi il vaut mieux l'éviter mais ça dépend de ce que tu ajouteras et comment tu l'ajouteras.
deratiseur a écrit :Je reviens à la charge avec un problème de dialogue d'un autre genre. (note, mon dialogue fonctionne c'est juste un problème technique)
Pourquoi après avoir lu la réponse 3 et être revenu au menu de base je n'ai pas la proposition de réponse "4" ? -> mais si je redemande la 3 en revenant oui j'ai la proposition 4 -> je dois donc demander deux fois la 3 pour avoir la 4. WTF ?
C'est (malheureusement) normal. Tu ne peux pas modifier la valeur d'une variable et checker immédiatement après sa valeur. Le moteur de jeu semble nécessiter un certain laps de temps avant de prendre en compte cette nouvelle valeur. C'est comme si il affichait déjà le label sousort (ou qu'il avait peut-être déjà anticiper/préparer son affichage) avant de terminer de mettre à jour la valeur ta variable "maiqcerqsec". Ça doit te faire pareil avec "maiqcerq", si tu vas sur 2 et que tu retournes sur 1 tu ne devrais pas avoir ta proposition. Mais si tu vas ensuite sur 1 OU sur 2 (car toujours disponible) alors ta proposition devrait ensuite s'afficher.
Je connais bien le problème, j'y ai été aussi confronté lors de mes tests, sauf qu'en y réfléchissant je n'avais pas besoin de vérifier la valeur d'une variable juste après l'avoir modifiée (ce qui est dans un sens plutôt logique car si je viens de la modifier c'est que je connais sa valeur).
Essaie de rajouter un wait(5) juste pour voir et si ça marche essaie de diminuer sa valeur avec un wait(1)
(Mais j'ai absolument aucune idée de si ça va permettre de contourner le problème ou non)
Code : Tout sélectionner
IF ~~ THEN 2 SAY @9027
IF ~~ THEN DO ~SETGlobal("maiqcerq","LOCALS",1) Wait(5)~ GOTO sousort
END
IF ~~ THEN 3 SAY @9029
IF ~~ THEN DO ~SETGlobal("maiqcerqsec","LOCALS",1) Wait(5)~ GOTO sousort
END
- deratiseur
- Golem de fer
- Messages : 3698
- Enregistré le : mer. 05 déc. 2007, 18:35
- Localisation : Gap, Hautes alpes
- Statut : Hors ligne
.
Merci.
De toute façon les dialogues ça me rend FOU. Le dialogue d'Agenor, le tenancier de l'interplan, fonctionnait. Il a suffit que je lui rajoute un bloc pour le dialogue du Chaudron et boum, marche plus. FOU !!!!!
De toute façon les dialogues ça me rend FOU. Le dialogue d'Agenor, le tenancier de l'interplan, fonctionnait. Il a suffit que je lui rajoute un bloc pour le dialogue du Chaudron et boum, marche plus. FOU !!!!!
- Freddy_Gwendo
- Adepte de Grondemarteau
- Orbe ancien
- Messages : 5877
- Enregistré le : sam. 23 avr. 2011, 00:26
- Localisation : Égaré dans un vortex entre Féérune et le Royaume de Diamant Éternel
- Statut : Hors ligne
.
Je viens de retrouver un topic échangé sur ce sujet avec Argent77 avant une mise à jour de WeiDU, qui m'a permis de valider l'écriture de mes dialogues prenant en compte la modification instantannée de variables ET compatible oBG2 et BG2:EE.
CARPE DIEM...Co-modérateur de La Forge et de La Chambre des Scribes
Moddeur qui s'arrache les cheveux...
Moddeur qui s'arrache les cheveux...
... avec Menace sur le Royaume de Diamant Éternel.
-
- Squelette
- Messages : 131
- Enregistré le : lun. 09 août 2021, 19:36
- Statut : Hors ligne
.
Merci pour ce partage
Ça a l'air très intéressant, si je comprends bien on peut ajouter un "FLAGS" après des actions afin de préciser les manières dont ces actions doivent être exécutées (les manières car on peut en mettre plusieurs et les additionner).
Ce "FLAGS" serait sur 11 bits et il existerait quelque part un tableau (que je n'ai pas trouvé) précisant l'effet que procure chaque bit.
Je serais bien curieux de savoir à quoi servent les bits 0 à 8 (étrangement j'ai rien trouvé dans le bigg README de WeiDU).
J'aurai d'ailleurs trouvé plus parlant une notation allant de 1 à 11 plutôt que de 0 à 10 (c'est tout de suite plus parlant au niveau des poids)
En tout cas ça a l'air assez simple d'utilisation (en supposant que j'ai bien compris).
Quand tu auras l'occasion dératiseur, essaie de voir si ça résout ton problème :
Ça a l'air très intéressant, si je comprends bien on peut ajouter un "FLAGS" après des actions afin de préciser les manières dont ces actions doivent être exécutées (les manières car on peut en mettre plusieurs et les additionner).
Ce "FLAGS" serait sur 11 bits et il existerait quelque part un tableau (que je n'ai pas trouvé) précisant l'effet que procure chaque bit.
Je serais bien curieux de savoir à quoi servent les bits 0 à 8 (étrangement j'ai rien trouvé dans le bigg README de WeiDU).
J'aurai d'ailleurs trouvé plus parlant une notation allant de 1 à 11 plutôt que de 0 à 10 (c'est tout de suite plus parlant au niveau des poids)
En tout cas ça a l'air assez simple d'utilisation (en supposant que j'ai bien compris).
Quand tu auras l'occasion dératiseur, essaie de voir si ça résout ton problème :
Code : Tout sélectionner
IF ~~ THEN 2 SAY @9027
IF ~~ THEN DO ~SETGlobal("maiqcerq","LOCALS",1)~ FLAGS ~%BIT9%~ GOTO sousort
END
IF ~~ THEN 3 SAY @9029
IF ~~ THEN DO ~SETGlobal("maiqcerqsec","LOCALS",1)~ FLAGS ~%BIT9%~ GOTO sousort
END
- deratiseur
- Golem de fer
- Messages : 3698
- Enregistré le : mer. 05 déc. 2007, 18:35
- Localisation : Gap, Hautes alpes
- Statut : Hors ligne
.
Comme je m'en doutais
Je devrais installer TobEx ou moder sur BG2EE pour que ça marche. Et donc crée une dépendance. C'est mort.
refuse de s'installer et indique une erreur au niveau de ~%BIT9%~ sur une installation Old BG2.IF ~~ THEN rune SAY @9014
IF ~~ THEN DO ~SetGlobal("maiqrune","LOCALS",1)~ FLAGS ~%BIT9%~ GOTO malabs
END
Je devrais installer TobEx ou moder sur BG2EE pour que ça marche. Et donc crée une dépendance. C'est mort.
- Freddy_Gwendo
- Adepte de Grondemarteau
- Orbe ancien
- Messages : 5877
- Enregistré le : sam. 23 avr. 2011, 00:26
- Localisation : Égaré dans un vortex entre Féérune et le Royaume de Diamant Éternel
- Statut : Hors ligne
.
Tu l'as compilé avec EVALUATE_BUFFER ?
CARPE DIEM...Co-modérateur de La Forge et de La Chambre des Scribes
Moddeur qui s'arrache les cheveux...
Moddeur qui s'arrache les cheveux...
... avec Menace sur le Royaume de Diamant Éternel.
- deratiseur
- Golem de fer
- Messages : 3698
- Enregistré le : mer. 05 déc. 2007, 18:35
- Localisation : Gap, Hautes alpes
- Statut : Hors ligne
.
J'ai essayé avec un TP2 tout simple :
et le dialogue refuse de s'intaller, il coince à la ligne :BEGIN ~Routinedetest~
OUTER_SET INSTANT_ACTIONS = BIT9
COMPILE ~Derats_Magasin_2/Dialog~
Ce n'est pas mieux avec :IF ~~ THEN rune SAY @9014
IF ~~ THEN DO ~SetGlobal("maiqrune","LOCALS",1)~ FLAGS ~%BIT9%~ GOTO malabs
END
Et pas mieux avec le BIT0.IF ~~ THEN rune SAY @9014
IF ~~ THEN DO ~SetGlobal("maiqrune","LOCALS",1)~ FLAGS ~%INSTANT_ACTIONS%~ GOTO malabs
END
-
- Squelette
- Messages : 131
- Enregistré le : lun. 09 août 2021, 19:36
- Statut : Hors ligne
.
Honnêtement... Weidu c'est pas ma tasse de thé, difficile de t'aider là-dessus...
Je ne vois pas le EVALUATE_BUFFER préconisé par Freddy_Gwendo. Je ne comprends pas très bien la doc à ce sujet pour en déduire comment l'exploiter correctement bien que j'aie des idées mais... je me demande si on ne pourrait pas s'en passer en écrivant plutôt :
Sinon... plus simplement si tu veux quelque chose qui marche dans ton cas précis sans t'embêter tu peux faire :
C'est une solution qui ne pourra pas fonctionner dans tous les cas figures (d'où l'intérêt de trouver un moyen de passer par le FLAGS 512 comme le préconise Freddy_Gwendo) mais pour ce que tu souhaites faire, ça ça devrait marcher.
Je ne vois pas le EVALUATE_BUFFER préconisé par Freddy_Gwendo. Je ne comprends pas très bien la doc à ce sujet pour en déduire comment l'exploiter correctement bien que j'aie des idées mais... je me demande si on ne pourrait pas s'en passer en écrivant plutôt :
Code : Tout sélectionner
IF ~~ THEN 2 SAY @9027
IF ~~ THEN DO ~SETGlobal("maiqcerq","LOCALS",1)~ FLAGS 512 GOTO sousort
END
IF ~~ THEN 3 SAY @9029
IF ~~ THEN DO ~SETGlobal("maiqcerqsec","LOCALS",1)~ FLAGS 512 GOTO sousort
END
Code : Tout sélectionner
IF ~~ THEN sousort SAY @9023 [color="#00FF00"]// Avec une condition pour le label ici SAUF si tu accèsdes préalablement à de label via un GOTO[/color]
IF ~~ THEN REPLY @9024 GOTO 1 [color="#00FF00"]// (réponse toujours disponible)[/color]
IF ~~ THEN REPLY @9026 [color="#FF0000"]DO ~SETGlobal("maiqcerq","LOCALS",1)~[/color] GOTO 2 [color="#00FF00"]// (réponse toujours disponible)[/color]
IF ~Global("maiqcerq","LOCALS",1) CheckStatGT(LastTalkedToBy(),15,WIS)~ THEN REPLY @9028 [color="#FF0000"]DO ~SETGlobal("maiqcerqsec","LOCALS",1)~[/color] GOTO 3 [color="#00FF00"]// (réponse disponible SI SAGESSE>15 & dialogue "2" été utilisé)[/color]
IF ~Global("maiqcerqsec","LOCALS",1)~ THEN REPLY @9030 GOTO 4 [color="#00FF00"]// (réponse disponible SI le dialogue "3" à été utilisé)[/color]
IF ~~ THEN REPLY @904 GOTO presentation2 [color="#00FF00"]// (réponse de au-revoir pour revenir au menu général)[/color]
END
IF ~~ THEN 1 SAY @9025
IF ~~ THEN GOTO sousort
END
IF ~~ THEN 2 SAY @9027
IF ~~ THEN GOTO sousort
END
IF ~~ THEN 3 SAY @9029
IF ~~ THEN GOTO sousort
END
IF ~~ THEN 4 SAY @9031
IF ~~ THEN GOTO sousort
END
C'est une solution qui ne pourra pas fonctionner dans tous les cas figures (d'où l'intérêt de trouver un moyen de passer par le FLAGS 512 comme le préconise Freddy_Gwendo) mais pour ce que tu souhaites faire, ça ça devrait marcher.
- Freddy_Gwendo
- Adepte de Grondemarteau
- Orbe ancien
- Messages : 5877
- Enregistré le : sam. 23 avr. 2011, 00:26
- Localisation : Égaré dans un vortex entre Féérune et le Royaume de Diamant Éternel
- Statut : Hors ligne
.
Essaie avec COMPILE ~Derats_Magasin_2/Dialog~ EVALUATE_BUFFER.
CARPE DIEM...Co-modérateur de La Forge et de La Chambre des Scribes
Moddeur qui s'arrache les cheveux...
Moddeur qui s'arrache les cheveux...
... avec Menace sur le Royaume de Diamant Éternel.
- deratiseur
- Golem de fer
- Messages : 3698
- Enregistré le : mer. 05 déc. 2007, 18:35
- Localisation : Gap, Hautes alpes
- Statut : Hors ligne
.
De retour
Avec EVALUATE_BUFFER ça s'installe mais ça ne marche pas, soit j'ai toujours le bug de la double demande soit en bidouillant entre BIT0, BIT9 ou ~%INSTANT_ACTIONS%~ ça "marche" avec 3-4 secondes de temps d’attente quand je demande la réponse qui utilise le flag.
Mais je met le sujet en "Résolu" et je suis content de vous apprendre que j’ai enfin un Mai'q qui parle comme je l'entendais. La solution étai pourtant très simple et c'est Machiavélique qui y a pensé : mettre à jour la valeur avant de donner la réponse, la réponse servant de deuxième appel.
Avec EVALUATE_BUFFER ça s'installe mais ça ne marche pas, soit j'ai toujours le bug de la double demande soit en bidouillant entre BIT0, BIT9 ou ~%INSTANT_ACTIONS%~ ça "marche" avec 3-4 secondes de temps d’attente quand je demande la réponse qui utilise le flag.
Mais je met le sujet en "Résolu" et je suis content de vous apprendre que j’ai enfin un Mai'q qui parle comme je l'entendais. La solution étai pourtant très simple et c'est Machiavélique qui y a pensé : mettre à jour la valeur avant de donner la réponse, la réponse servant de deuxième appel.
à résolu mon deuxième problèmeIF ~~ THEN REPLY @9026 DO ~SETGlobal("maiqcerq","LOCALS",1)~ GOTO 2
- Freddy_Gwendo
- Adepte de Grondemarteau
- Orbe ancien
- Messages : 5877
- Enregistré le : sam. 23 avr. 2011, 00:26
- Localisation : Égaré dans un vortex entre Féérune et le Royaume de Diamant Éternel
- Statut : Hors ligne
.
Pour ce genre de manip, il faut TobEx en prérequis et utiliser l'action DialogueSetGlobal qui est prévue pour. Pour rendre le code compatible avec EE, consulter le lien plus haut.
CARPE DIEM...Co-modérateur de La Forge et de La Chambre des Scribes
Moddeur qui s'arrache les cheveux...
Moddeur qui s'arrache les cheveux...
... avec Menace sur le Royaume de Diamant Éternel.
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité