Bienvenue sur JeuxOnLine - MMO, MMORPG et MOBA !
Les sites de JeuxOnLine...
 

Panneau de contrôle

Recherche | Retour aux forums

JOL Archives

Faire dire une phrase une seule fois.

Par Morethil le 18/10/2002 à 14:08:58 (#2357335)

Je suis persuadé que la solution est toute simple, mais j'ai du mal a comprendre le fonctionnement du tool wizard de création de script.
Je voudrait que certaines des phrases de mes PNJ ne puissent être dites qu'une seule fois.
En l'occurence j'ai 3 choix possible, que j'ai ordonné par ordre de priorité (1er fois qu'on lui pose une question, 2e fois, et 3e). Sur la 1er et 2e j'ai mis un script en action conséquentes/Definir variable locale/nFirstTimetalked - valeur1/ qui donne ça :


void main()
{
// Déterminer les variables
SetLocalInt(GetPCSpeaker(), "nFirstTimeTalked", 1);

}


J'ai mis le meme scripte sur la 2eme phrase.
En regardant ça je me doute que je fait une connerie qui parrait évidente, mais même quand la variable est le PJ (GetPCSpeaker()
cela ne fonctionne pas lorsque je teste avec mon personnage.

S'il y a une bonne ame pour m'expliquer le fonctionnement du Wizard script tool, je suis vraiment preneur :)

Merci d'avance

Par eMRaistlin le 18/10/2002 à 14:21:17 (#2357402)

J'espere que tu teste pas avec le DM, sinon, ca marchera, mais comme le DM n'est pas consideré comme un joueur, je suspecte cette procedure comme etant capable de generer des bugs (quoique pour le moment, j'en ai pas constater.. mais bon, quand on fait des test, faut toujours etre clean sur tout ce que tu peux, histoire d'etre certain que le pb ne vient que de ton script...^^)

En fait, je pense que ca marche, vu que le script (enfin la ligne ^^) est propre... Mais cela ne suffit pas.

La, tu declare juste que tu veux affecter un compteur a ton Pc. Mais rien ici n'utilise ce compteur ...


Je m'explique... En gros, cette fonction :

SetLocalInt(GetPCSpeaker(), "nFirstTimeTalked", 1);

va juste coller une sorte de "post-it"(virtuel, of course) sur ton PC, avec le nom (ici : nFirstTimeTalked) et une valeur (ici :1).

Mais si tu n'exploite pas ce post-it, ca ne sert pas plus...

Il faut donc apres que tu selectionne les phrases destinées a n'apparaitre que si c'est la deuxieme fois ou la 3emm (etc..) et que tu utilise le wizard pour faire un "StartingConditionnal", c'est a dire une condition de depart.

Et dans ta condition de depart, tu lui demande de verifier que le PC a le bon "post-it", avec la bonne valeur.

Pour cela, il devra y avoir un :
GetLocalInt(GetPCSpeaker(), "nFirstTimeTalked");

et de preference, plutot comme ca :


if (GetLocalInt(GetPCSpeaker(), "nFirstTimeTalked")==1)
{
...
}


Voila... Si tu veux plus de details, hesite pas... (même si j'ai toujours pensé que pour bien apprendre, faut chercher un peu, car on s'en souvient nettement mieux apres avoir cherché 5 minutes, qu'apres avoir regardé un forum...^^)

Par Morethil le 18/10/2002 à 14:39:00 (#2357506)

En fait j'essaye de reprendre les exemple du tutorial en supposant les fonction selon leur utilisation. Je n'ai jamais fait de programation, a part un peu de html, donc c'est pas evident.

Je reprend la situation, pour clarifier, meme si j'ai plus ou moins compris ce que tu m'a expliqué.

J'ai un PNJ a qui on peux poser une question (situation fictive pour pas spoiler) :
"Salut, t'est qui toi ?"
LE PNJ a 3 choix de réponse.
La première fois qu'on lui demande (qui que ce soit, un PJ bien sur) il dit :
"Salut, moi c'est la vache, et je mange de l'herbe"
La deuxième fois qu'un PJ lui pose la question le PNJ devrait répondre :
"Mais je l'ai deja dit ! Je suis la vache. Mheuuu Mheuu..."
Et la troisème fois qu'un PJ lui pose cette %x^!# de question le PNJ devrait répondre :
"Bon, tu suis un peu ? sinon demande a tes potes !"

Sachant qu'il y a d'autres chemins de conversation, un PJ peut parler a ce PNJ sans lui poser la question, donc je voudrait que la réponse 1, 2 ou 2 arrive en fonction du nombre de fois ou on lui a demandé qui il était, et non en fonction du nombre de fois où on lui a parlé.

La solution la plus simple me parraissait d'appliquer un scripte aux réponse 1 et 2 pour que ces phrases ne puissent être dites qu'une seule fois.
Ca me parrait plus simple que de poser des conditions du genre :
Si question posé 1 fois, réponse est 1
Si question posé 2 fois, réponse est 2, etc.
ou encore :
Si PJ x pose question 1 fois, réponse est 1, etc.
D'autant que pour cette dernière condition ca ne fonctionnerai pas, puisque je veux que la réponse 2 (ou3) arrive meme si c'est le PJ y ou z qui pose la question.

:chut:

Par eMRaistlin le 18/10/2002 à 14:55:26 (#2357590)

D'autant que pour cette dernière condition ca ne fonctionnerai pas, puisque je veux que la réponse 2 (ou3) arrive meme si c'est le PJ y ou z qui pose la question.


Pour ca, rien de plus simple : affecte la localInt sur la vache et pas sur le PC...

SetLocalInt(OBJECT_SELF, "nFirstTimeTalked", 1);


comme ca, quelque soit la personne qui parle, la vache regarde juste sur elle meme si elle a un post-it, et si oui, combien ? ^^

La solution la plus simple me parraissait d'appliquer un scripte aux réponse 1 et 2 pour que ces phrases ne puissent être dites qu'une seule fois.

En fait, pour ca, il va quand meme falloir que tu ecrive X+3 phrases dans l'invite de la conversation, et que tu demande au phrase 2 d'apparaitre que si nFirstTimeTalked ==2 et la phrase que si nFirstTimeTalked >=3.

Je suis navré, mais y'a pas d'autre solution.

Par Morethil le 18/10/2002 à 17:12:14 (#2358267)

Provient du message de eMRaistlin
Pour ca, rien de plus simple : affecte la localInt sur la vache et pas sur le PC...

SetLocalInt(OBJECT_SELF, "nFirstTimeTalked", 1);


comme ca, quelque soit la personne qui parle, la vache regarde juste sur elle meme si elle a un post-it, et si oui, combien ? ^^


En fait, pour ca, il va quand meme falloir que tu ecrive X+3 phrases dans l'invite de la conversation, et que tu demande au phrase 2 d'apparaitre que si nFirstTimeTalked ==2 et la phrase que si nFirstTimeTalked >=3.

Je suis navré, mais y'a pas d'autre solution.


Ca doit etre tout con, mais j'ai du mal :lit:
Tres bien la balise OBJECT_SELF.
pour le premier, j'ai mis ==1 pour le deuxième ==2 et pour le 3eme >2.
J'ai attaché mes script aux phrases, et je les ais placé en Action d'execution.
Et là : quand je demande "qui est tu ?" la conversation s'arrête.
Conclusion de l'histoire, ça ne va pas.
Je vais essayer de mettre ==1 pour ma première phrase et ==2 pour la deuxième sans rien pour la 3e phrase.

En fait je me rend compte que j'ai surtout besoin d'une lecon sur l'utilisation du script editor wizard :p

Edit finalement j'ai mis le ==0 en phrase 1, ==1 en phrase 2 et >2 en phrase 3 en supposant que le post-it était appliqué après que le phrase soit dite. Donc au départ comme le nombre de post it était 0 aucune phrase n'était valide.
Dit moi si je me plante :)

A tout ;)

Par eMRaistlin le 18/10/2002 à 17:17:24 (#2358296)

Hehe, hesite pas a lire les tutoriaux, ils sont biens ^^

Sinon, il ne faut pas faire ca :

pour le premier, j'ai mis ==1 pour le deuxième ==2 et pour le 3eme >2.



En fait, il ne faut pas mettre de condition sur la premiere, puis tu la place en 3eme position :

Debut de la conversation :
- if (>2) : blah
- if(==2) : blah blah
- Blah blah de base
- autre blah blah optionnel sans rapport
- blahblah mon weekend chez les nains...
- bloblo les elfes sont tous pitis
- blublu tu as compris j'espere..

Tu vois ce que je veux dire ?

En fait, il teste les Starting conditionnal dans l'ordre des phrases. Il faut donc organiser ta conversation tout specialement... (je sais, c'est special, mais bon...)

Par Morethil le 18/10/2002 à 18:00:01 (#2358530)

Oui, je vois tout a fait.
Là en l'occurence le personnage repête toujours là même réponse à la fameuse question. Ce n'est pas très gênant pour l'intrigue, mais ça enlève tous soupcon de vie au personnage qui donne toujours la même réponse mécanique.

En tous cas, merci beaucoup de tes effort :)
Je passe a la suite, et je reviendrait la dessus plus tard. Si je n'ai pas trouvé la solution d'ici là je te redemanderai :)

Par eMRaistlin le 18/10/2002 à 22:04:48 (#2360111)

a ton service ^^

PS : regarde vraiment les tutoriaux de Celowind... je les ai tous finis en 45 minutes (tous oO) et je savais pas scripter avant...

maintenant, j'estime avoir acquis un niveau moyen, et je fonce a toute vitesse pour essayer d'arriver au tiers du quart de la moitie du huitieme de la cheville de tyn' (tyn' senseï ? ^^)...

nan, serieux, ils sont super tres top bien fait...^^

Par Morethil le 19/10/2002 à 4:02:22 (#2361692)

Rhaaa, j'ai trouvé !!

Un truc tout con, mais quand on ne sait pas quoi est quoi on cherche dans le vide ;p

Pour ceux qui voudrait utiliser ca plus tard, et qui ne savaient pas non plus, voilà ce que j'ai fait :

on part du principe que la phrase qui doit etre dite en premier est la "phraseA" en celle qui doit venir en 2e la "phraseB" etc.

l'ordre des phrases est le suivant, l'ordre des phrasesB et C importe peun, mais la A doit etre en dernier :
1) PhraseB
2) PhraseC
3) PhraseA

La phraseA a un script en action conséquente


void main()
{
// Déterminer les variables
SetLocalInt(GetPCSpeaker(), "nFirstTimeTalked", 1);

}


Ce qui pose le premier post it sur le PC (je pense) mais ne fait rien d'autre.

la phraseB a le script suivant en condition d'execution :

int StartingConditional()
{

// Inspecter variables locales
if(!(GetLocalInt(GetPCSpeaker(), "nFirstTimeTalked") == 1))
return FALSE;

return TRUE;
}


Ce qui vérifie si il y a le post it 1 sur le PC, et l'enclanche si c'est le cas.
Cette phrase doit aussi poser un post it, donc on lui assigne aussi un script en action conséquente :


void main()
{
// Déterminer les variables
SetLocalInt(GetPCSpeaker(), "nFirstTimeTalked", 2);

}



puis viens la phraseC avec son script qui verifie le post it 2 :

int StartingConditional()
{

// Inspecter variables locales
if(!(GetLocalInt(GetPCSpeaker(), "nFirstTimeTalked") == 2))
return FALSE;

return TRUE;
}



ce qui fait que desormais le PNJ répondra toujours par cette phrase.

Le truc interessant là dedan c'est qu'on peut continuer comme ça a l'infinit, en posant des post it a chaque phrase, et en verifiant dans la suivante si il est là :p

Maintenant le truc c'est de tester le
OBJECT_SELF
et de voir si ça marche :)

Merci encore pour l'aide, finalement trifouiller a droite et a gauche ça n'a pas été innutil :)
Et oui, je vais faire le tutorial.

Par Morethil le 19/10/2002 à 4:03:17 (#2361696)

Rhaaa, j'ai trouvé !!

Un truc tout con, mais quand on ne sait pas quoi est quoi on cherche dans le vide ;p

Pour ceux qui voudrait utiliser ca plus tard, et qui ne savaient pas non plus, voilà ce que j'ai fait :

on part du principe que la phrase qui doit etre dite en premier est la "phraseA" en celle qui doit venir en 2e la "phraseB" etc.

l'ordre des phrases est le suivant, l'ordre des phrasesB et C importe peun, mais la A doit etre en dernier :
1) PhraseB
2) PhraseC
3) PhraseA

La phraseA a un script en action conséquente


void main()
{
// Déterminer les variables
SetLocalInt(GetPCSpeaker(), "nFirstTimeTalked", 1);

}


Ce qui pose le premier post it sur le PC (je pense) mais ne fait rien d'autre.

la phraseB a le script suivant en condition d'execution :

int StartingConditional()
{

// Inspecter variables locales
if(!(GetLocalInt(GetPCSpeaker(), "nFirstTimeTalked") == 1))
return FALSE;

return TRUE;
}


Ce qui vérifie si il y a le post it 1 sur le PC, et l'enclanche si c'est le cas.
Cette phrase doit aussi poser un post it, donc on lui assigne aussi un script en action conséquente :


void main()
{
// Déterminer les variables
SetLocalInt(GetPCSpeaker(), "nFirstTimeTalked", 2);

}



puis viens la phraseC avec son script qui verifie le post it 2 :

int StartingConditional()
{

// Inspecter variables locales
if(!(GetLocalInt(GetPCSpeaker(), "nFirstTimeTalked") == 2))
return FALSE;

return TRUE;
}



ce qui fait que desormais le PNJ répondra toujours par cette phrase.

Le truc interessant là dedan c'est qu'on peut continuer comme ça a l'infinit, en posant des post it a chaque phrase, et en verifiant dans la suivante si il est là :p

Maintenant le truc c'est de tester le
OBJECT_SELF
et de voir si ça marche :)

Merci encore pour l'aide, finalement trifouiller a droite et a gauche ça n'a pas été innutil :)
Et oui, je vais faire le tutorial.

Par eMRaistlin le 19/10/2002 à 9:36:24 (#2362040)

C'est exactement ca ^^

Pour le object self, tu le met tout simplement a la place de GetPCSpeaker... c'est tout ^^

JOL Archives 1.0.1
@ JOL / JeuxOnLine