Réponse à un sphinx

Répondre
Partager Rechercher
Voilà, je voudrais faire un sphinx qui pose une colle aux PJ. Bon, pour la créature et la question, y a pas de problème. Là où ça se corse, c'est que je voudrais que le sphinx ne donne pas plusieurs choix de réponses mais que le PJ donne sa réponse comme s'il parlait normalement.

Mais comment faire?

De plus, je voudrais que - s'il ne répond pas dans les 2 minutes, des monstres apparaissent
- s'il répond faux, des monstres apparaissent
- s'il répond juste, le sphinx lui donne une clé

Et aussi, que le sphinx choisissent aléatoirement entre 4-5 questions que j'aurais définies.

Voila, si quelqu'un a une idée de script, où le mettre, ...

Merci d'avance.
Il faut que tu utilise les ListenPatterns, que tu mette ton pnj sphinx en pret a ecouter et lui injecter la rponse. Ensuite le reste est assez simple

Tout ce fait avec les Patterns (pour la reponse )
oui, mais vois-tu, j'y comprend pas grand chose en script, ... je ne sais meme pas ce que sont les patterns (en français, ca correspond à quoi car j'ai l'éditeur en fr).

si tu pouvais me montrer un peu ce que je dois faire!
Voilà une explication (mais tu n'as probablement pas besoin de tout comprendre) :
https://forums.jeuxonline.info/showthread.php?t=130468

Donc après le passage ou les sphinx pose l'énigme tu lui met un SetListenPattern() avec comme argument la bonne réponse (ce qui fait qu'une fois la bonne réponse entendue son évènement OnConversation sera déclenché). Puis avec AssignCommand tu lui ordonnes d'attendre 2 minutes (ActionWait()) puis de faire apparaître les monstres. (ceci dit peut-être qu'on peut faire avec DelayCommand)

Ensuite, dans le OnConversation tu vérifies avec GetListenPatternNumber() si l'évènement à été déclenché par l'entente de la bonne réponse ( ), si oui ClearAllActions() pour annuler l'apparition des monstres, puis tu lui donnes la clé (me rappelle plus la fonction...GiveItem peut-être).

Voilà je garantis pas du tout que ça marche mais c'est comme ça que je verrais la chose
Dans le OnConversation de ton sphnix

Code PHP:

 #include "NW_I0_GENERIC"
void main()
{
int iNb GetListenPatternNumber();
object oPJ GetLastSpeaker();

if (
iNb == -1)
    {
    
ClearAllActions();
    
BeginConversation();
    }
if (
iNb == 1000)
    {
    
//Ton code si c'est la bonne reponce ici
    
}
    else
    {
    
//Code du si ce n'est pas la bonne reponce
    
}



Dans le OnSpawn du sphinx

Code PHP:

#include "NW_I0_GENERIC"

void main()
{
    
SetAssociateListenPatterns();
    
SetListeningPatterns();
    
SetListening(OBJECT_SELFTRUE);
    
SetListenPattern(OBJECT_SELF"**reponse**"1000);

PS : si tu as aurora qui te traduit les fonctions en francais je veux bien aussi
Qu'est ce que tu entend par //ton code si c'est la bonne réponse?

prenons un exemple : si c'est la question traditionnelle genre : quel est l'animal qui au matin de sa naissance marche à 4 pattes, à midi 2 pattes et au soir 3 pattes? réponse l'homme
ca va donner quoi? (homme=TRUE)?

ou alors GiveItemToPCByTag "clé"?



et si je veux poser 3-4 questions et qu'il choississent aléatoirement?

EDIT : bon, j'ai un peu essayé mais ca va pas.

- dans le OnConversation : tu as mis PJ=GetLastSpeaker. est ce que c'est pas PC au lieu de PJ?

- comme code pour la bonne réponse, j'ai mis
Code PHP:

CreateItemOnObject("anneaudelagui001"GetPCSpeaker(), 

. Est-ce bon?

-dans le OnSpawn, tu as mis la ligne:

SetListenPattern(OBJECT_SELF, "**reponse**", 1000);

est-ce que les ** sont importants ou pas?
ton code c'est ton script puisque tu voulais qu'il donne une clef si il donne la bonne reponse ou summon,er des monstre en cas de mauvaise reponse

Pour generer aleatoirement il faut jouer avec un random et un switch/case et les variables

pour la reponse ca donnera ca :

Code PHP:

SetListenPattern(OBJECT_SELF"**homme**"1000); 

les ** comme tu dis represente les reste des proles qui ne sont donc sans importance

Et si tu dis "l'homme c'est nul" la il te validera la reponse si tu les enleve il faudra que tu dise juste "homme"

pour ta ligne de create elle n'est pas bonne puisque non complete

Que ce soit oPJ ou oPC ca ne change rien car c'est un objet que tu declare le tout est de garder le meme dans le reste du code tu peu meme metrtre oTartenpion mais il faut que tu change les oPJ de mon code par oTartenpion et ca marchera aussi
alors, pour la ligne de create, j'avais pas bien copier, c'etait

CreateItemOnObject("anneaudelagui001", GetPCSpeaker(), 1);

donc dans ma ligne pour la bonne réponse, ca donne:

SetListenPattern(OBJECT_SELF, "**homme**", 1000);
CreateItemOnObject("anneaudelagui001", GetPCSpeaker(), 1);

comme ca c'est bon? car ca donne rien!

autre question ( un peu con!) : pour la question du sphinx, je fais un dialogue normal? si oui, je dois mettre une branche de dialogue pour le Pj ou pas?

si je veux que le sphinx dise "c'est bon" après la bonne réponse,

le ActionSpeakString("c'est bon"); je dois le mettre ou? entre le SetListenPattern et le CreateItemOnObject?
mais non .......................

Tu vois pas que la ligne de la reponce est a mettre dans le OnSpawn du pnj ....

Et tu met ca la ou je le dis en dessous de la phrase //ton code ici

Code PHP:

CreateItemOnObject("resrefdelobjetacreer",GetLastSpeaker()); 

Code PHP:

#include "NW_I0_GENERIC"
void main()
{
int iNb GetListenPatternNumber();
object oPJ GetLastSpeaker();

if (
iNb == -1)
    {
    
ClearAllActions();
    
BeginConversation();
    }
if (
iNb == 1000)
    {
    
//Ton code si c'est la bonne reponce ici
     
AssignCommand(OBJECT_SELF,SpeakString("C'est bon"));
     
CreateItemOnObject("resrefdelitem",oPJ);
    }
    else
    {
    
//Code du si ce n'est pas la bonne reponce
    
}



Tilt !

merci, j'ai pigé! Fallait le temps. Mais bon, tout le monde ne comprend pas très bien les scripts.

Bon, aussi,... ahem... c'est quoi la ligne pour invoquer un monstre? (le resref du monstre est "shguard001 ")
Code PHP:

CreateObject(OBJECT_TYPE_CREATURE,"shguard001 ",GetLocation(GetWaypointByTag("WP"))); 

Et place un Waypoint de TAG "WP" la ou tu veux que le monstre soit summoné
Bon, on reprend. Voila ce que donne mon script :

Code PHP:


#include "NW_I0_GENERIC"
void main()
{
int iNb GetListenPatternNumber();
object oPJ GetLastSpeaker();

if (
iNb == -1)
    {
    
ClearAllActions();
    
BeginConversation();
    }
if (
iNb == 1000)
    {
    
ActionWait(120.0);
    
//Ton code si c'est la bonne reponce ici
     
AssignCommand(OBJECT_SELF,SpeakString("Felicitations, tu as trouve la reponse"));
     
CreateItemOnObject("cl001",oPJ);
    }
    else
    {
    
//Code du si ce n'est pas la bonne reponce
       
AssignCommand(OBJECT_SELF,SpeakString("Desole, tu as perdu!"));
    
CreateObject(OBJECT_TYPE_CREATURE,"gardsphinx",GetLocation(GetWaypointByTag("WP")));
    }



y a trois problèmes :

- le premier, c'est que mon sphinx pose la question mais n'attend pas de réponse pour dire que c'est perdu. j'ai mis un ActionWait, mais apparemment il n'est pas à la bonne place, ou il est mal placé!

- le deuxième problème, c'est qu'il invoque des blaireaux!! alors que mon garde est un garde d'acier! j'ai essayé avec le ResRef et le Tag, rien n'y fait. (j'ai vérifié, mon garde et le blaireau n'ont ni le meme tag ni le meme resref!)(EDIT : j'ai remarqué qq chose : quand je mets le tag d'une créature générique, ca fonctionne, par contre si je mets le tag d'une créature personnalisée, il m'invoque des blaireaux)(Re-EDIT : problème réglé. pour les deux autres, ca va toujours pas!)

- enfin, dernièrement, c'est qu'il invoque sans cesse les blaireaux, il ne s'arrete pas!

Help please!
vu la ou tu as mis ton ActionWait() ca veu dire que le sphinx va attendre 120 seconde avant de dire au PJ que l reponse est juste

Essaye sans l' utiliser mais en gerans la reponse par dialogue car la le script est fait pour etre sans dialogue

peu etre gerer le probleme par variable.

Citation :
Hou hou, quelqu'un peut m'aider?
La patience est un art qui s'acquiert avec de l'experience (a méditer)
Oui, mais justement, je ne veux pas que ca se fasse par dialogue, je ne veux pas que mon sphinx propose plusieurs réponses possibles! j'aimerai que le joueur trouve lui-meme (c'est plus corsé, c'est mieux!)

et pour le fait qu'il invoque sans cesse un monstre, qu'est ce que je peut faire (j'avais mis un DestroyObject pour que le sphinx se détruise et qu'il n'y ai qu'un garde, mais bon, c'est pas pratique!)
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés