un scrypt sur les énigmes

Répondre
Partager Rechercher
bon j'espère bien apliquer ce que tu dit, mais apparemment un truc ne va pas, le dialogue ne s'ouvre pas

Code PHP:

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

if (
iNb == -1)
    {
    
ClearAllActions();
    
BeginConversation();
    }
if (
iNb == 1000)
    {

 
     
AssignCommand(OBJECT_SELF,SpeakString("Bravo tu as trouve  "));

      if (
GetIsPC(oPC))
          {
           
ActionStartConversation(oPC"tag du dialogue",TRUE);
          }

    }
    else
    {
     
       
AssignCommand(OBJECT_SELF,SpeakString(" mais non réfléchis un peux!"));

      if (
GetIsPC(oPC))
           {
           
ActionStartConversation(oPC"tag du dialogue",TRUE);
          }
    }



pourtant j'ai essayé de factoriser mais, il y a un truc qui cloche et en plus quand le joueur ce trompe il n'y a jamais la phrase" mais non reflechis un peux!"
Bon, si la deuxieme phrase ne pars pas, je viens de comprendre, c'est parceque tu n'a pas prevu de SetListenningPattern("**"), donc il n'ecoute pas tout : il ne reagis que si la phrase est bonne, en envoyant l'evenement N°1000. Puis dans le OnConversation, tu verifie que l'evenement est bien le 1000.

Mais il ne risque pas d'envoyer autre chose si tu ne fais pas une Pattern generique (ie : que des wildcards **)

Ceci etant, je ne sais pas si c'est vraiment utile...


Quand au dialogue qui ne demarre pas, je ne sais pas trop. Essaye de verifier tes tags.
J'ai suivi le sujet et les conseils de eMRaistlin et j'ai fait comme cela :

Code PHP:


// Dans le onSpawn du sphinx

#include "NW_I0_GENERIC"

SetAssociateListenPatterns();
SetListeningPatterns();
SetListening(OBJECT_SELFTRUE);
SetListenPattern(OBJECT_SELF"homme"1000);
SetListenPattern(OBJECT_SELF"**"1001); 
Code PHP:


// Dans le onConversation du sphinx 

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

switch (
iNb)
{
    case -
:

        
ClearAllActions();
        
BeginConversation("enigme");

        break;

    case 
1000 :

        if (
GetIsPC(oPJ))
            
BeginConversation("bon");

        break;

    case 
1001 :

        if (
GetIsPC(oPJ))
            
BeginConversation("pasbon");

        break;
}

Et cela fonctionne très bien pour moi.
oulala super alors c'était ca le truc je trouvé par par quoi remplacer
Code PHP:

  ActionStartConversation(oPC"tag du dialogue",TRUE); 

bon et bien merci bcp

( bon ba suis pas prés de me nourrir tous les jour moi * clin d'oeil a EMRaistlin*) merci pour votre aide a tous
Je suis désolé d'avoir mis autant de temps pour poster cela mais je n'ai plus de connexion internet en ce moment et je n'ai pas eu l'opportunitée d'accéder à internet depuis

Enfin, voila quand même le script dont je vous ai parlé ; tout est commenté.

//:////////////////////////////////////
//: Titre : Script de verification d'enigmes
//: de: Cerbere.Oerth
//: mail : Cerbere.Oerth@tiscali.fr
//: site : http://oerth.chez.tiscali.fr
//:////////////////////////////////////
//:
//: Tout d'abord ce script est a placer dans l'evenement OnClose d'un objet placable qui devra
//: posseder un inventaire. Lorsqu'un joueur y placera certains objets representant les lettres
//: de l'alphabet et fermera l'inventaire, ce script verifiera les objets contenus dans l'inventaire
//: Si les objets ont pour Tag "LaLettre" + lettre de l'alphabet (ex : "LaLettreA", "LaLettreB",
//: ..., "LaLettreZ"), le script verifiera alors si le mot correspondra a celui saisi dans la
//: 7e ligne en partant de la fin de ce script (ici la solution est NUIT ou TIUN) ; Et si oui,
//: ouvrira la porte ayant pour Tag celui saisi dans la premiere ligne du script ci-dessous
//: (ici "MMo_MausMilAncCrypte").
//:
//: Attention : Il vous faudra creer des objets lettres d'alphabet ayant pour Tag "LaLettre"
//: + lettre de l'alphabet (ex : "LaLettreA", ...) et aussi definir la porte a ouvrir.
//:
//:////////////////////////////////////

object oPorte = GetObjectByTag("MMo_MausMilAncCrypte"); // Declaration : Porte a ouvrir si le mot est juste
object oPiedestal = OBJECT_SELF/*GetObjectByTag("Piedmmac")*/; // Declaration : Objet container ou sont deposes les lettres

string Inventory(int iDetruit)
{
// parcours l'inventaire a la recherche d'objets lettres et retourne le mot compose sous
// forme de chaine concaténée en mode 0 ; Ou detruit le contenu de l'inventaire en mode 1

string sRetourString; // Declaration : Chaine de retour
object oObjetContainer = GetFirstItemInInventory(oPiedestal);
while(oObjetContainer != OBJECT_INVALID) // Tant que l'objet est valide ...
{ // ... faire ...
if (iDetruit == 1)
{DestroyObject(oObjetContainer);} // Detruit l'objet courant
else if (GetSubString(GetTag(oObjetContainer), 0, 8) == "LaLettre") // Verifie si le debut du tag de l'objet lettre courant est valide
{sRetourString = sRetourString + GetSubString(GetTag(oObjetContainer), 8, 1);} // Concatene les lettres que representent chaqun des objets 'lettre' places dans le container
oObjetContainer = GetNextItemInInventory(oPiedestal); // Positionnne l'objet courant sur le prochain objet de l'inventaire
} // ... et recommencer au while.
return sRetourString;
}

void main()
{
if (Inventory(0) == "") {} // Verifie que l'inventaire n'est pas vide
else // La, l'inventaire n'est pas vide et on va verifier son contenu
{
SendMessageToAllDMs("Tentative de resolution a 'MausMilAncCrypte' : ->" + Inventory(0) + "<-"); // Envoie un message aux MD (facultatif)
SendMessageToPC(GetNearestObject(OBJECT_TYPE_CREATURE), "->" + Inventory(0) + "<-");
if(Inventory(0) == "NUIT" || Inventory(0) == "TIUN") // La on rentre la solution ; j'en ai mis deux possibles a l'endroit ou a l'envers mais on peux en rajouter autant que l'on veux.
{
AssignCommand(oPorte ,ActionOpenDoor(oPorte)); // Ouvre la porte si la solution est bonne
Inventory(1); // Detruit le contenu de l'inventaire
}
}
}
je remonte le poste car j'ai voulus faire un truc simple mais qui s'avère être plus compliqué que prévus.

je voulais quand je joueur donne la bonne réponse que le pnj lui donne un objet, et qu'il le téléporte a un point donné.

j'ai commencé par mettre le crypt

Code PHP:


               
// Donner des PX à la personne qui parle
                
RewardPartyXP(1000GetPCSpeaker());

             
// Donner les objets à la personne qui parle
             
CreateItemOnObject("pierredelespris"GetPCSpeaker(), 1);

            
//teleporte joueur a l'entree
     
object oPC GetPCSpeaker();
     
object oTarget GetWaypointByTag ("111");
     
AssignCommandoPCJumpToObjectoTarget)); 
dans le dialogué "bon" du pnj mais il ne s'exécute pas ( normal)

alors j'ai décidé de le mettre dans le Onconversation mais la c'est pire il ne ce compile pas pourquoi?

Code PHP:

// Dans le onConversation du sphinx

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

switch (
iNb)
{
    case -
:

         
ClearAllActions();
         
BeginConversation();


        break;

    case 
1000 :

        if (
GetIsPC(oPJ))
            
BeginConversation("dialbon");
               
// Donner des PX à la personne qui parle
                
RewardPartyXP(1000GetPCSpeaker());

             
// Donner les objets à la personne qui parle
            
CreateItemOnObject("pierredelespris"GetPCSpeaker(), 1);
   
              
//teleporte joueur a l'entree
              
object oPC GetPCSpeaker();
             
object oTarget GetWaypointByTag ("111");
             
AssignCommandoPCJumpToObjectoTarget));

        break;

    case 
1001 :

        if (
GetIsPC(oPJ))
            
BeginConversation("dialpasbon");

        break;
}

(j'ai perdus mon poisson mangerai pas aujourd huit)
Ba comme je t'ai dis sur msn ce soir je t'envoie l'enigme que j'avais fais . Et tu verras bien si c'est ce que tu recherches.

Et au passage, un grand bonjour au modo le grand eM
Merci RAT j'attends avec plaisir ta solution ca me fera 3 scrypt d'énigmes différents , ca va être bien merci




sinon en rajoutant donc le gain xp, po et objet au scrypt voila ce qui me dit

" ligne 24, ERREUR : UNDEFINED IDENTIFIER (reward party xp)"
Vivi je sais, je commence à me faire rare sur maskado :/

Mais bon j'ai plein de projet en cours dans mon coin, sur mes sites, sur mon 5ieme site, développer sous C++ avec un collègue au boulot, ma webzine, et PAORN qui vient enfin de s'ouvrir un petit peu lol.

Donc voilà, non sinon on peut garder contact avec moi avec icq ou msn .

Mais promis eM, j'essayerai de passer de temps en temps . Par contre nivo scripting, heuu ba j'en fais plus beaucoup sur nwn.


Mais merci à vous deux pour vos messages
Pour le script, il y a une erreur et un oubli:
Code PHP:

// Dans le onConversation du sphinx

#include "NW_I0_GENERIC"
#include "nw_i0_tool"

void main()
{
 
int iNb GetListenPatternNumber();
 
object oPJ GetLastSpeaker();

 switch (
iNb)
  {
   case -
:
    
ClearAllActions();
    
BeginConversation();
    break;

   case 
1000 :
    {
     if (
GetIsPC(oPJ))
      
BeginConversation("dialbon");
      
// Donner des PX à la personne qui parle
      
RewardPartyXP(1000GetPCSpeaker());

      
// Donner les objets à la personne qui parle
      
CreateItemOnObject("pierredelespris"GetPCSpeaker(), 1);

      
//teleporte joueur a l'entree
      
object oPC GetPCSpeaker();
      
object oTarget GetWaypointByTag ("111");
      
AssignCommandoPCJumpToObjectoTarget));
      break;
     }

    case 
1001 :
     if (
GetIsPC(oPJ))
      
BeginConversation("dialpasbon");
      break;
  }

L'oubli: #include "nw_i0_tool" La fonction RewardPartyXP est défini dans cet include.

L'erreur: Tu fais une déclaration dans un CASE, le compilateur aime pas ça. Alors il faut mettre l'ensemble entre accolade. J'ai rajouté deux accolades dans le CASE 1000.

Là, ça va compiler.
merci Archamedes ca marche super bien comme .

non tyrion ce n'est pas un conversation normal disons au debut oui mais après ce le joueur qui donne la réponse en tapant sur son clavier .


ok merci a tous ca marche super
__________________
La paix c'est toi qui la constuis




Site de MYSTERIA
Tiens en passant, je repense au dommage en cas de mauvaise réponse. Si c'est toujours d'actualité, ça pourrait donner quelque chose comme ça:
Code PHP:

// Dans le onConversation du sphinx

#include "NW_I0_GENERIC"
#include "nw_i0_tool"

void main()
{
 
int iNb GetListenPatternNumber();
 
object oPJ GetLastSpeaker();

 switch (
iNb)
  {
   case -
:
    
ClearAllActions();
    
BeginConversation();
    break;

   case 
1000 :
    {
     if (
GetIsPC(oPJ))
      
BeginConversation("dialbon");
      
// Donner des PX à la personne qui parle
      
RewardPartyXP(1000GetPCSpeaker());

      
// Donner les objets à la personne qui parle
      
CreateItemOnObject("pierredelespris"GetPCSpeaker(), 1);

      
//teleporte joueur a l'entree
      
object oPC GetPCSpeaker();
      
object oTarget GetWaypointByTag ("111");
      
AssignCommandoPCJumpToObjectoTarget));
      break;
     }

    case 
1001 :
     {
      if (
GetIsPC(oPJ))
       {
        
BeginConversation("dialpasbon");
        
object oPC GetPCSpeaker();
        
effect eVis EffectVisualEffect(246);
        
int nDamage GetCurrentHitPoints(oPC) - 1;
        
effect eDam EffectDamage(nDamage,DAMAGE_TYPE_MAGICAL);
        
DelayCommand(1.0ApplyEffectToObject(DURATION_TYPE_INSTANTeDamoPC));
        
ApplyEffectToObject(DURATION_TYPE_INSTANTeVisoPC);
        break;
       }
     }
  }

La ligne là int nDamage = GetCurrentHitPoints(oPC) - 1; met le PJ à 1 points de vie. Ok, c'est un peu hard, tu peux adapter ensuite.
Répondre

Connectés sur ce fil

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