Page 1 sur 1

[DLG] Je n'arrive pas à déclencher un dialogue 3 jours après le recrutement d'un PNJ

Posté : dim. 05 févr. 2006, 20:05
par Kroc le bô
Bon j'ai un petit problème avec les Dialogues :

Je voudrais qu'au bout de trois jours après qu'il ai été recruté, Eadem discute avec le PJ.

Donc déjà, cette discussion est à mettre où ? dans le B ou le J ? ( et il faut bien créer plusieurs fichier .D ? Ou tout mettre dans le même ? )

Après, il faut donc mettre un script dans l'override :

Voila ce que j'ai mis :

Code : Tout sélectionner

IF
  Global("EademJoined","LOCALS",1) // bon c'est juste pour vérifier s'il est dans le groupe
  Global("EademTalk01","LOCALS",0) // pour éviter de recommencer le même talk à chaque fois...
THEN
  RESPONSE #100
    SetGlobalTimer("EADPRTLK","GLOBAL",21600) // Le timer...
END

IF
  Global("EademJoined","LOCALS",1) // idem qu'au dessus
  Global("EademTalk01","LOCALS",0) // idem qu'au dessus
  GlobalTimerExpired("EADPRTLK","GLOBAL") // Ca parle pour soi même je pense :)
  !StateCheck(Player1,STATE_SLEEPING) // Pour éviter que ça se déroule quand le perso dors... j'ai copié sur un Tuto de Romance que j'ai trouvé
  InParty(Myself)
  See(Player1)
THEN
  RESPONSE #100
    SetGlobal("EademTalk01","LOCALS",1)
    Dialogue(Player1) // il me semble que cette commande renvoie donc à une discussion se trouvant dans le Fichier.D  J du perso...
END 
Après j'ai mis ça dans le dialogue :

Code : Tout sélectionner

BEGIN K-eademJ

IF ~Global("EademTalk01","LOCALS",0)~ THEN BEGIN TEST
  SAY ~Test~
  IF ~~ THEN REPLY ~ok~  EXIT
END 
( Pour tester donc :p )

et pour définir les dialogues j'ai mis ça dans le TP2 :

Code : Tout sélectionner

APPEND ~pdialog.2da~ ~k-eadem K-EademP K-eademJ K-EademD K-EadetP K-EadetJ K-EadetD K-Eadet5~
  UNLESS ~k-eadem~

APPEND ~interdia.2da~ ~k-eadem Beadem k-eadetB~
  UNLESS ~k-eadem~
donc soit je regarde de travers, soit il y a un problème dans mes adresses dans les scripts toussa... J'aurais besoin d'aide.

Remarque : j'ai déjà essayé en mettant le '' SetGlobal("EademTalk01","LOCALS",1) '' dans le dialogue plutôt que dans le script mais ça fonctionnait pas non plus :'( .

Tiens j'ai aussi ajouté ce script au D3PlAYERs pour faire arriver mon perso, calqué sur celui de Shinook ( merci à lui encore )

Code : Tout sélectionner

IF
  Global("Chapter","GLOBAL",1)
  Global("Eadespawn","GLOBAL",0)
THEN
  RESPONSE #100
    SetGlobalTimer("SPAWNEAD","GLOBAL",7200)
    SetGlobal("Eadespawn","GLOBAL",1)
END

IF
  GlobalTimerExpired("SPAWNEAD","GLOBAL")
  Global("EademExists","GLOBAL",0)
  PartyRested()
THEN
  RESPONSE #100
    CreateCreature("K-Eadem",[-1.-1],0)
    SetGlobal("EademExists","GLOBAL",1)
END
Je le donne au cas où...

Voila... merci d'avance pour votre aide ^^ .

Posté : lun. 06 févr. 2006, 11:31
par Shinook
Alors, le script dont tu parles en premier, tu l'as ajouté où ? Pour qu'il fonctionne, il vaut mieux l'ajouter à DPLAYER3.bcs, qui est fait pour cela ( en tout cas, quand je fais ça, ça marche ). Donc, dans ton .tp2, voici ce qu'il faut marquer :
EXTEND_TOP ~DPLAYER3.bcs~ ~répertoire_ du_ mod\ton_script.baf~
Je crois qu'on peut utiliser EXTEND_BOTTOM aussi, qui au final revient au même. Il est important aussi que ton script soit de type "décompressé" ( .baf ).

Sinon, je ne crois pas qu'il y ait d'erreur. A propos de la commande Dialogue() ou Dialog(), il enclenchera le dialogue que tu as mis dans le fichier .cre du personnage ( ici, ton PNJ ), dans la case tout en bas ( dans Cremaker ) appelée DLG File ou quelque chose comme ça. Il ne va pas donc chercher lui-même un fichier spécifique ( le XXXXXXXJ.d puisque c'est celui que tu cites ). Ou alors, si tu veux que ce soit un fichier en particulier, il faut lui indiquer à l'aide de la commande :
StartDialog(S :D ialogFile*,O:Target*)
En indiquant d'abord le nom du fichier .d que tu auras compilé dans le .tp2 en .dlg ( inutile de mettre .dlg, le nom seul, entre parenthèses suffit ), puis en indiquant le fichier .cre ( entre parenthèses et sans le .cre ) du personnage avec qui il va parler.


Je viens de relire ton dialogue, et je me suis aperçu qu'il y a un truc qui ne collait pas avec ton script, pour qu'il puisse s'enclencher.
Dans ton script, tu as marqué à la fin, comme actions/effets :
SetGlobal("EademTalk01","LOCALS",1)
Dans ton .d maintenant, tu as marqué comme condition d'enclenchement :
Global("EademTalk01","LOCALS",0)
C'est sans doute une erreur, met comme tu as mis juste avant la variable à 1, et qu'en condition, il faut qu'elle soit à 0, ça ne fonctionnera pas. Il faut donc que tu mettes la variable à 1 dans ta condition, sinon ça ne marchera pas.

Sinon, je ne vois aucun problème ( normal, tu as repris mon script, petit copieur :oops: ^^ ).

Posté : lun. 06 févr. 2006, 16:37
par Kroc le bô
Merci beaucoup de ton aide ;) Bon je vais tenter ça ;) Pour le script que je t'ai piqué : Il fonctionne, je l'ai mis à titre d'information, au cas où sa aurait été lui qui faisait tout planté :)

Donc, il faut que je copie le texte dans son .dLL dans le cre... mais si il est dans l'équipe, celui ci n'est pas supprimé normalement ?

Et pour la commande Interract() ( ou un truc du genre ) elle fait quoi ?

Je m'explique : Les Discusions que les PNJS ont avec le perso, une fois qu'ils sont recrutés, ne sont pas écrit dans le .D de leurs fichier .cre ? mais dans un autre... nan ?

Bon plus clair : Quand vous créez un perso non joueur recrutable : Vous lui faîte un seul fichier.D ou plusieurs : un pour quand on le voit, un pour quand il est dans l'équipe, un pour les Banters, un pour le Dreamscript ? parce que j'avoue que je suis paumé là dedans :'( .

Merci d'avance.

Posté : lun. 06 févr. 2006, 22:21
par Isaya
Le fichier B est conçu pour les "Banters" (ou bavardages) et ne contient généralement que les intéractions entre les personnages du groupe, hors personnage principal.
Le fichier J contient tout ce qui concerne le personnage dans le cadre du groupe : les échanges directs avec le personnage principal, les interventions en milieu d'un dialogue avec un personnage externe au groupe (il me semble).
La commande Interact() permet de déclencher un échange entre des personnages du groupe (banter). Voir le site IESDP pour des détails. Il implique directement le fichier B (via le fichier 2DA qui recense le fichier de banter pour chaque personnage).

Un fichier D peut provoquer la création de plusieurs fichiers DLG : le P, le B, le J et le quatrième qui sert souvent lors du tout premier dialogue. Tu peux tout gérer à partir d'un seul fichier D (mais ça fait alors un fichier D très long). Tu peux aussi créer une multitude de fichiers D qui ajoutent des trucs dans un ou plusieurs des fichiers DLG. Il n'y a pas de règle précise, c'est plutôt en fonction de contraintes spécifiques à ton mod.

Rappel : bien des questions trouvent réponse sur le site IESDP ou dans les tutorials. Je sais que c'est en anglais mais il faudra bien faire cet effort si vous voulez vraiment maîtriser ce que vous faites.