erreurs dans un script

Répondre
Partager Rechercher
Voici un petit script. le PNJ pose une question au PJ qui doit répondre comme s'il parlait à un autre PJ.

dans le On Conversation
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("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"GARDESPHINX",GetLocation(GetWaypointByTag("WP")));
    }



dans le OnSpawn (pas de prob avec celui-là, je le donne à titre d'indication)

Code PHP:



#include "NW_I0_GENERIC"

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


les problèmes :

1. il n'attend pas que je donne la réponse et me dit directement que j'ai perdu et invoque le garde(je pense que je devrai mettre un DelayCommand mais je sais pas où, et si je le mets, il va quand même l'exécuter plus tard) En fait il me faudrait un temps de réponse (120 sec) et une commande qui annule l'action de la mauvaise réponse si le joueur a bien répondu.

2. de plus, il ne m'invoque pas qu'un garde mais des dizaines les uns après les autres.

piti coup de main s'il vous plait!
C'est normal, ton else lui dit que dès qu'il entend autre chose que la réponse, il doit invoquer les monstres. Je suis pas un pro des Pattern, mais me semble que le fait de ne rien entendre renvoit quelque chose, ou un truc du genre. Enfin pour le moment enlève la partie ou il invoque le garde, une fois que ca marchera bien tu pourras te mettre a cette partie du script
Citation :
Provient du message de Skanzo Sylan
Tu as la 1.30 d'installée?...



SpawnScriptDebugger!! YAAAAHAAA!!

Huhu Skanzo trop fort . Je me demandais qui oserait faire le premier ce coup là
C'est tombé pile poil sur toi
J'aurais fait ça comme suit :

Sur le HeartBeat du PNJ :

Code PHP:

void StartRéponse(object oPC);
void DoRéponse(int nMatchobject oPC);
void EndRéponse(object oPC);
void CreateObjectByMatch(int nMatch);

// Temps avant une éventuelle réponse
float fSearchSecs 10.0f;

void main()
{

object oPC GetLastSpeaker();
int nMatch GetListenPatternNumber();

if ( 
nMatch >= 2000 && nMatch <= 3000 &&  // on défini les patterns
GetLocalInt(OBJECT_SELF,"réponse") == && 
(
nMatch != GetLocalInt(OBJECT_SELF,"nLastMatch") ||
nMatch==3000 && GetMatchedSubstring(1) != GetLocalString(OBJECT_SELF,"sLastMatch")) ) 
{
StartRéponse(oPC);
DoRéponse(nMatch,oPC);
EndRéponse(oPC);
SetLocalInt(OBJECT_SELF,"nLastMatch",nMatch);
}
}

void StartRéponse(object oPC)
{
SetLocalInt(OBJECT_SELF,"réponse",1);
ActionSpeakString("*Vous attendez une réponse*");
}

void DoRéponse(int nMatchobject oPC)
{
if (
fSearchSecs 10.0f)
{
ActionWait(fSearchSecs/2);
ActionSpeakString("*Vous continuez à attendre*");
ActionWait(fSearchSecs/2);
}
else
ActionWait(fSearchSecs);

if (
nMatch==3000)
{
ActionSpeakString("*Vous n'obtenez aucune réponse*");
SetLocalString(OBJECT_SELF,"sLastMatch",GetMatchedSubstring(1));
}
else
{
ActionSpeakString(GetLocalString(OBJECT_SELF"réponse" IntToString(nMatch)));
CreateObjectByMatch(nMatch);
}
}

void EndRéponse(object oPC)
{
SetLocalInt(OBJECT_SELF,"réponse"0);
}

// Pour la création des gardes
void CreateObjectByMatch(int nMatch)
{
string sObject GetLocalString(OBJECT_SELF"CreateObject" IntToString(nMatch));

if (
sObject != "")
{
location lObject GetLocalLocation(OBJECT_SELF"CreateLocation" IntToString(nMatch));
CreateObject(OBJECT_TYPE_ITEMsObjectlObjectTRUE);
}


Ensuite sur une Action conséquente du dialogue de ton PNJ :

Code PHP:

void main()
{
SpeakString("Hum... Attendez quelques secondes que je réfléchisse...");

if ( ! 
GetIsListening(OBJECT_SELF) )
{
//Bonne réponse
SetListenPattern(OBJECT_SELF"réponse *réponse à donner*"2000);
SetLocalString(OBJECT_SELF"réponse2000""Felicitations, tu as trouve la reponse");

// Mauvaise réponse
SetListenPattern(OBJECT_SELF"réponse **"3000);
SetLocalString(OBJECT_SELF"réponse3000""Mauvaise réponse");
SetLocalString(OBJECT_SELF"CreateObject3000""resref garde");
SetLocalLocation(OBJECT_SELF"CreateLocation3000"GetLocation(GetWaypointByTag("Waypoint du garde")));
SetListening(OBJECT_SELF,TRUE);
}

Pas testé mais ça doit normalement fonctionner.
j'suis perduuuuuu
bon, déja une petite erreur à la première ligne du script OnHeartBeat il me dit : FUNCTION DEFINITION MISSING PARAMETER LIST

puis, je sais pas si on s'est bien compris : c'est le PNJ qui pose la question et c'est le PJ qui répond! alors qu'avec ton script, c'est le PNJ qui me dit "attendez un peu que je réfléchisse"

autre chose, il n'attend toujours pas la réponse : il me dit "répondez à ma question" (dialogue de moi à changer plus tard) et me dit directement apres "attendez que je réfléchisse".

Pourquoi il faut qu'un script soit si compliqué alors que l'idée dans ma tete est si simple?

euh si j'osais... bon allez j'ose : je mets ici toutes les infos dont j'ai besoin et si une ame charitable pouvait me faire un petit script nickel ca serait gentil

réponse attendue : "homme" (il faut qu'il y ait au moins ce mot dans la phrase)
mon gardien : resref : "gardesphinx"
tag : "GARDESPHINX" (j'mets les deux sais pas lequel servira)

l'objet à donner : tag : "oeildeloth" resref : "oeildeloth"

WayPoint d'apparition du gardien : tag : "WP"

mon idée de structure (j'sais pas si ca va vous aider)

1. le pnj pose la question et veux une réponse dans les deux minutes.
2. soit le pj répond et le sphinx lui donne l'objet (et le gardien apparait pas)
soit le pj répond pas et le gardien est invoqué pour lui taper dessus (1 seul gardien)


reponse à Zunder : sans la deuxième partie (réponse fausse) ca fonctionne nickel.
Mon 1er script compile pas surement en raison des accents que j'ai mis à Réponse sur les void. Enlève les.

Le script fonctionne de la façon suivante : une fois que le second script est lancé le PNJ devrait écouter le PJ qui doit taper dans le canal parler : réponse suivi de la bonne réponse.
bon, ok ca compile (c'etait bien les accents) mais il y a toujours une chose ou deux : ne m'y connaissant pas vraiment en script, je ne sais pas quels mots je dois laisser et lesquels je dois remplacer. pourrais-tu (si possible) éditer ta réponse avec les infos que j'ai données après. merci
Répondre

Connectés sur ce fil

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