La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
La date/heure actuelle est 18/05/2024 21:11:23


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
Enki
Légende vivante
Inscrit le: 06 Déc 2005
Messages: 432
Répondre en citant
Posté le : 10/01/2006 16:37:24 Sujet du message : Scripts de taverne :

[Message édité avec nouveaux scripts ]
Bonjour !
Je me suis amusé à faire une petie animation pour le module persistant Star Wars de Drenark.
Je ne résiste pas au plaisir de vous en faire profiter :



Que seraient nos modules sans les tavernes ?
Je vous propose donc d'ouvrir une section dédiée aux scripts de tavernes, Pubs, Hotels, Bars, etc...

Et je commence en proposant une scène toute simple pour animer ces lieux bigarrés :
- Quatre PNJs entrent dans un bar, s'installent à une table et jouent au "Starpoker".
L'un d'eux n'arrête pas de gagner et les autres se rendent compte qu'il triche.
Ils sortent leurs armes, le tuent et rentrent chez eux.

[Message édité : ]
Bon, je t'envoies les nouveux scripts pour que la scène fonctionne au mieux.
Concernant ton bug Les PNJs doivent pouvoir s'asseoir sans problème, vérifie que les tags des PNJs sont corrects et que les chaises ne sont pas trop près de la table.

Pour réaliser cette scène vous avez besoin :

- d'une table ( Laughing )
- un waypoint à l'entrée du bar tag "way01"
- de 4 chaises utilisables dont les tags sont :
- "chaise_joueur"
- "chaise_joueur001"
- "chaise_joueur002"
- "chaise_joueur003"

Sur chaque chaise, il faut mettre ces scripts :

sur le onUsed :

Code:
NWScript :
void main()
{

  object oChair = OBJECT_SELF;
    if (!GetIsPC(GetLastUsedBy()))

      {
  if(GetIsObjectValid(GetSittingCreature(oChair)))
    {

    AssignCommand(GetSittingCreature(oChair),ClearAllActions());
    AssignCommand(GetSittingCreature(oChair),PlayAnimation(ANIMATION_LOOPING_DEAD_BACK,1.0,1.5));
    AssignCommand(GetLastUsedBy(),PlayAnimation(ANIMATION_FIREFORGET_TAUNT));

    AssignCommand(GetLastUsedBy(),SpeakString(""));
    AssignCommand(GetLastUsedBy(), ActionSit(oChair));

    }
    }

  if (!GetIsPC(GetLastUsedBy()))

    {
  if(!GetIsObjectValid(GetSittingCreature(oChair)))
    {
    AssignCommand(GetLastUsedBy(), ActionSit(oChair));
    }
    }

      if (GetIsPC(GetLastUsedBy()))

      {
  if(!GetIsObjectValid(GetSittingCreature(oChair)))
    {
    AssignCommand(GetLastUsedBy(), ActionSit(oChair));

    }
    }
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.




sur le onHeartBeat :
Code:
NWScript :
void main()
{
int iAssis=GetLocalInt(GetModule(),"assis");
object oNPC=GetSittingCreature(OBJECT_SELF);

    if(GetIsObjectValid(GetSittingCreature(OBJECT_SELF)))
    {
      if (!GetIsPC(oNPC))

      {
    if (GetLocalInt(OBJECT_SELF,"NW_DO_ONCE") != 0)
                  return;
          iAssis++;
          SetLocalInt(GetModule(),"assis",iAssis);
          SetLocalInt(OBJECT_SELF,"NW_DO_ONCE",1);
          }
      }
      }
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.




Il faut également quatre PNJs, dans la palette mais pas dans l'area.
Le tag ET le ResRef de ces PNJs doivent être :

-"joueur"
-"joueur001"
-"joueur002"
-"joueur003"

La faction de ces PNJs importe peu, Populace va bien mais si vous avez créé une faction neutre de contrebandiers, cela ira parfaitement.

le PNJ de Tag "joueur" est le tricheur.

il doit avoir ces scripts :

sur le onConversation :

Code:
NWScript :
#include "nw_i0_generic"
void main()
{
    if (GetIsPC(GetLastSpeaker()))
      SpeakString(""); // empeche le PNJ de se lever si un PJ lui parle

    // Send the user-defined event if appropriate
    if(GetSpawnInCondition(NW_FLAG_ON_DIALOGUE_EVENT))
    {
        SignalEvent(OBJECT_SELF, EventUserDefined(EVENT_DIALOGUE));
    }
}


sur le onDeath :

Code:
void Partir (object oNPC)
{
object oWaypoint=GetWaypointByTag("way01");
AssignCommand(oNPC, ActionMoveToObject(oWaypoint));
DestroyObject(oNPC,10.0); // le temps qu'il faut pour aller de la table a la porte.
  }

void main()
{
SetLocalInt(GetModule(),"assis",4);
  object oJoueur001= GetObjectByTag("joueur001");
  object oJoueur002= GetObjectByTag("joueur002");
  object oJoueur003= GetObjectByTag("joueur003");

  Partir(oJoueur001);
  Partir(oJoueur002);
  Partir(oJoueur003);
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.



sur le OnSpawn :

Code:
NWScript :
#include "x0_i0_anims"
// #include "x0_i0_walkway" - in x0_i0_anims
#include "x0_i0_treasure"

#include "x2_inc_switches"

void main()
{

      SetLocalInt(OBJECT_SELF,"iroll",1);

    // * Fire User Defined Event 1001 in the OnHeartbeat
    // *
    SetSpawnInCondition(NW_FLAG_HEARTBEAT_EVENT);

    // * Fire User Defined Event 1002
    // *
    // SetSpawnInCondition(NW_FLAG_PE RCIEVE_EVENT);

    // * Fire User Defined Event 1005
    // *
    SetSpawnInCondition(NW_FLAG_ATTACK_EVENT);

    // * Fire User Defined Event 1006
    // *
    // SetSpawnInCondition(NW_FLAG_DA MAGED_EVENT);

    // * Fire User Defined Event 1008
    // *
    // SetSpawnInCondition(NW_FLAG_DI STURBED_EVENT);

    // * Fire User Defined Event 1003
    // *
    SetSpawnInCondition(NW_FLAG_END_COMBAT_ROUND_EVENT);

    // * Fire User Defined Event 1004
    // *
    SetSpawnInCondition(NW_FLAG_ON_DIALOGUE_EVENT);



    // ***** DEFAULT GENERIC BEHAVIOR (DO NOT TOUCH) ***** //

    // * Goes through and sets up which shouts the NPC will listen to.
    // *
    SetListeningPatterns();

    SetListenPattern(OBJECT_SELF, "", 500);
    SetListenPattern(OBJECT_SELF, "", 501);

    SetListenPattern(OBJECT_SELF, "", 502);
    SetListenPattern(OBJECT_SELF, "Je mise 500 ! ", 503);
    SetListenPattern(OBJECT_SELF, "Je mise 150 ! ", 504);

    SetListenPattern(OBJECT_SELF, "Combien de cartes ? ", 505);
    SetListenPattern(OBJECT_SELF, "T'en veux combien ? ", 506);

    SetListenPattern(OBJECT_SELF, "Il bluff ! ", 507);

    SetListenPattern(OBJECT_SELF, "Une paire de Jedi ! ", 508);
    SetListenPattern(OBJECT_SELF, "", 509);
    SetListenPattern(OBJECT_SELF, "Un full de 7 par les Chanceliers ! ", 510);

    SetListenPattern(OBJECT_SELF, "", 511);

    WalkWayPoints();

    //* Create a small amount of treasure on the creature
    if ((GetLocalInt(GetModule(), "X2_L_NOTREASURE") == FALSE) &&
        (GetLocalInt(OBJECT_SELF, "X2_L_NOTREASURE") == FALSE) )
    {
        CTG_GenerateNPCTreasure(TREASURE_TYPE_MONSTER, OBJECT_SELF);
    }


    // ***** ADD ANY SPECIAL ON-SPAWN CODE HERE ***** //

    // * If Incorporeal, apply changes
    if (GetCreatureFlag(OBJECT_SELF, CREATURE_VAR_IS_INCORPOREAL) == TRUE)
    {
        effect eConceal = EffectConcealment(50, MISS_CHANCE_TYPE_NORMAL);
        eConceal = ExtraordinaryEffect(eConceal);
        effect eGhost = EffectCutsceneGhost();
        eGhost = ExtraordinaryEffect(eGhost);
        ApplyEffectToObject(DURATION_TYPE_PERMANENT, eConceal, OBJECT_SELF);
        ApplyEffectToObject(DURATION_TYPE_PERMANENT, eGhost, OBJECT_SELF);

    }

}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.



sur le OnUserDefined :

Code:
NWScript :
void Partir (object oNPC)
{
object oWaypoint=GetWaypointByTag("way01");
AssignCommand(oNPC, ActionMoveToObject(oWaypoint));
DestroyObject(oNPC,10.0); // le temps qu'il faut pour aller de la table a la porte.
  }

void Vajouer(object oNPC)
{
        object oChaise=GetObjectByTag("chaise_"+GetTag(OBJECT_SELF));
        ActionForceMoveToObject(oChaise);
        ActionInteractObject(oChaise);
  }

void main()
{
int nUser = GetUserDefinedEventNumber();
  int iRollThree = d3(1);
  int iRollTen = GetLocalInt(OBJECT_SELF,"iroll");
    if(nUser == 1004)
    {
        object oTricheur = GetLastSpeaker();

            }

  else if(nUser == 1001) //HEARTBEAT
        {

      if (GetLocalInt(GetModule(),"assis")==10)
      {
          if (!GetIsInCombat(OBJECT_SELF))
      {
              ClearAllActions();
              Partir(OBJECT_SELF);
            }
        }

    if (GetLocalInt(GetModule(),"assis")==4)
    {

        if (!GetIsInCombat())
        {
          switch(iRollTen)
            {
            case 1:
            iRollTen ++;
            SetLocalInt(OBJECT_SELF,"iroll",iRollTen);
            SpeakString("");
            break;
            case 2:
         
            SpeakString("Combien de cartes ? ");
            iRollTen ++;
            SetLocalInt(OBJECT_SELF,"iroll",iRollTen);
            break;
            case 3:
            iRollTen++;
            SetLocalInt(OBJECT_SELF,"iroll",iRollTen);
           
              SpeakString("Je mise 500 ! ");
            //  SpeakString("Une paire de Rois ! ");
            break;
            case 4:
              SpeakString("Une paire de Jedi ! ");
            //SpeakString("Je mise 500 ! ");
            iRollTen++;
            SetLocalInt(OBJECT_SELF,"iroll",iRollTen);
            break;
            case 5:
              SpeakString("");
        //  SpeakString("Combien de cartes ? ");
            iRollTen++;
            SetLocalInt(OBJECT_SELF,"iroll",iRollTen);
            break;

            case 6:
            iRollTen++;
            SetLocalInt(OBJECT_SELF,"iroll",iRollTen);
            SpeakString("T'en veux combien ? ");
            break;

            case 7:
          SpeakString("Il bluff ! ");

          iRollTen++;
          SetLocalInt(OBJECT_SELF,"iroll",iRollTen);
            break;

            case 8:
            if (GetLocalInt(OBJECT_SELF,"tricher")==1)
            // SpeakString("Un brelan de Reines. ");
              {
                  SpeakString("Un full de 7 par les Chanceliers ! ");
                  iRollTen ++;
                  SetLocalInt(OBJECT_SELF,"iroll",iRollTen);
              }
            else if (GetLocalInt(OBJECT_SELF,"tricher")==0)
            {
      //  SpeakString("Une paire de Rois ! ");
            SpeakString("");
            iRollTen++;
            SetLocalInt(OBJECT_SELF,"iroll",iRollTen);
            }
            break;

            case 9:
            if (GetLocalInt(OBJECT_SELF,"tricher")==1)
            // SpeakString("Un brelan de Reines. ");
              {
                  SpeakString("");
                  iRollTen ++;
                  SetLocalInt(OBJECT_SELF,"iroll",iRollTen);
              }
              else if (GetLocalInt(OBJECT_SELF,"tricher")==0)
              {
                SetLocalInt(OBJECT_SELF,"iroll",1);
                SpeakString("Je ramasse tout. ");
                SetLocalInt(OBJECT_SELF,"tricher",1);
              }
            break;

            case 10:
            SpeakString("Combien de cartes ? ");
              iRollTen ++;
              SetLocalInt(OBJECT_SELF,"iroll",iRollTen);
            break;

            case 11:
            iRollTen ++;
            SetLocalInt(OBJECT_SELF,"iroll",iRollTen);
            SpeakString("Je mise 500 ! ");
            break;
            case 12:
            SpeakString("");
            PlayAnimation(ANIMATION_FIREFORGET_VICTORY1);
            iRollTen ++;
            SetLocalInt(OBJECT_SELF,"iroll",iRollTen);
            break;
            case 13:
            SpeakString("");
            PlayAnimation(ANIMATION_LOOPING_TALK_PLEADING,1.0,1.0);
          //  DelayCommand(1.0,ChangeToStand ardFaction(OBJECT_SELF, STANDARD_FACTION_HOSTILE));
          // SetLocalInt(GetModule()," assis",5);
            SetLocalInt(OBJECT_SELF,"iroll",0);
            break;
                }
                } }
        else

          if (!GetIsInCombat(OBJECT_SELF) && GetCurrentAction(OBJECT_SELF)!=ACTION_SIT)

          {
          Vajouer( OBJECT_SELF);
          }
    }
            else if(nUser == 1005) // ATTACKED
    {




      object oPC=GetLastHostileActor();
      object oJoueur= GetObjectByTag("joueur");
      object oJoueur001= GetObjectByTag("joueur001");
      object oJoueur002= GetObjectByTag("joueur002");
      object oJoueur003= GetObjectByTag("joueur003");

          if (GetIsPC(oPC))
    {
      AssignCommand(oJoueur,ClearAllActions());
      AssignCommand(oJoueur,ActionAttack(oPC));
      AssignCommand(oJoueur002,ClearAllActions());
      AssignCommand(oJoueur002,ActionAttack(oPC));
      AssignCommand(oJoueur003,ClearAllActions());
      AssignCommand(oJoueur003,ActionAttack(oPC));
      AssignCommand(oJoueur001,ClearAllActions());
      AssignCommand(oJoueur001,ActionAttack(oPC));

    /*  if (GetIsDead(oPC))
      {
          ClearAllActions();
          Partir(OBJECT_SELF);
                } */


            }
    }

        else if(nUser == 1003) // END OF COMBAT
    { object oPC=GetLastHostileActor();


      if (GetIsDead(oPC)==TRUE)
      {

          SetLocalInt(GetModule(),"assis",10);

                  }
  }
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.



Les autres PNJs doivent avoir les mêmes scripts sur le :
- OnConversation
- OnSpawn

Pour le reste les scripts par défaut sauf pour le

- OnUserDefined :

Code:
NWScript :
void Partir (object oNPC)
{
object oWaypoint=GetWaypointByTag("way01");
AssignCommand(oNPC, ActionMoveToObject(oWaypoint));
DestroyObject(oNPC,10.0); // le temps qu'il faut pour aller de la table a la porte.
  }


void Vajouer(object oNPC)
{
        object oChaise=GetObjectByTag("chaise_"+GetTag(OBJECT_SELF));
        ActionForceMoveToObject(oChaise);
        ActionInteractObject(oChaise);
  }
void main()
{
int nUser = GetUserDefinedEventNumber();
  int iRollThree = d3(1);
    if(nUser == 1004)
    {

        object oTricheur = GetLastSpeaker();
  if (!GetIsInCombat(OBJECT_SELF))
  {
int nMatch = GetListenPatternNumber();
        switch (nMatch)
        {
        case 500:

          DelayCommand(1.5,SpeakString(""));

        break;
        case 501:

          switch(iRollThree)
            {
            case 1:
            DelayCommand(1.5,SpeakString("Suivi ! "));
            break;

          case 2:
            DelayCommand(2.5,SpeakString("J'te suis. "));
            break;

          case 3:
            DelayCommand(2.2,SpeakString("Sans Moi. "));
            break;
          }

        break;
          case 502:

          switch(iRollThree)
            {
            case 1:
            DelayCommand(0.5,SpeakString("Suivi ! "));
            break;

          case 2:
            DelayCommand(1.5,SpeakString("J'te suis. "));
            break;

          case 3:
            DelayCommand(1.0,SpeakString("Sans Moi. "));
            break;
          }
        break;
        case 503: // "Je mise 500 ! ", 503);

          switch(iRollThree)
            {
            case 1:

            DelayCommand(1.0,SpeakString(""));
            break;

          case 2:
            DelayCommand(1.0,SpeakString("J'te vois. "));
            break;

          case 3:
            DelayCommand(1.0,SpeakString("Sans Moi. "));
            break;
          }

        break;
        case 504: // "Je mise 150 ! ", 504);

          switch(iRollThree)
            {
            case 1:
            DelayCommand(1.0,SpeakString("je veux voir ! "));
            break;

          case 2:
            DelayCommand(1.0,SpeakString("Je te vois. "));
            break;

          case 3:
            DelayCommand(1.0,SpeakString("150 pour te voir. "));
            break;
          }
        break;
        case 505: //"Combien de cartes ? ", 505);

          switch(iRollThree)
            {
            case 1:
          DelayCommand(1.0,SpeakString("Deux ! "));
            break;

          case 2:
            DelayCommand(1.0,SpeakString("Quatres. "));
            break;

          case 3:
            DelayCommand(1.0,SpeakString("une seule. "));
            break;
          }

        break;
        case 506: // "T'en veux combien ? ", 506);
                  switch(iRollThree)
            {
            case 1:
          DelayCommand(1.0, SpeakString("Servi ! "));
            break;

          case 2:
            DelayCommand(1.5,SpeakString("Trois. "));
            break;

          case 3:
            DelayCommand(0.5,SpeakString("Deux. "));
            break;
          }
        break;
        case 507: //  "Il bluff ! ", 507);
                    switch(iRollThree)
            {
            case 1:
            DelayCommand(1.0,SpeakString(""));
            break;

          case 2:
            DelayCommand(1.5,SpeakString("J'voudrai bien l'savoir. "));
            break;

          case 3:
          DelayCommand(0.5,SpeakString("On verra ... "));
            break;
          }
        break;
        case 508: // "Une paire de Rois ! ", 508);
                  switch(iRollThree)
            {
            case 1:
            DelayCommand(0.5,SpeakString("Pas mieux. "));
            break;

          case 2:
            DelayCommand(1.0,SpeakString("Une paire de Hutts. "));
            break;

          case 3:
            DelayCommand(1.5,SpeakString("C'est bon. "));
            break;
          }
        break;
        case 509: // "Un brelan de Reines. ", 509);
                  switch(iRollThree)
            {
            case 1:
            DelayCommand(1.0,SpeakString(""));
            break;

          case 2:
            DelayCommand(1.5,SpeakString(""));
            break;

          case 3:
            DelayCommand(1.0,SpeakString("Pas mieux. "));
            break;
          }
        break;
        case 510: //"Un full de 7 par les Valets ! ", 510);
          DelayCommand(1.0,SpeakString("Pas mieux. "));
        break;
        case 511:

                switch(iRollThree)
            {

            case 1:
            DelayCommand(1.0,PlayAnimation(ANIMATION_LOOPING_TALK_FORCEFUL));
            DelayCommand(1.0,SpeakString("Mais c'est impossible, tricheur !!! "));
          DelayCommand(10.0,ActionAttack(oTricheur));
            break;

          case 2:
            DelayCommand(1.5,PlayAnimation(ANIMATION_LOOPING_TALK_FORCEFUL));
            DelayCommand(1.5,SpeakString(""));
            DelayCommand(10.0,ActionAttack(oTricheur));
            break;

          case 3:
            DelayCommand(0.5,PlayAnimation(ANIMATION_LOOPING_TALK_FORCEFUL));
            DelayCommand(0.5,SpeakString(""));
          DelayCommand(10.0,ActionAttack(oTricheur));
            break;
          }

        break;
        };
            } }
  else if(nUser == 1001) //HEARTBEAT
    {

    if (GetLocalInt(GetModule(),"assis")==10)
      {
          if (!GetIsInCombat(OBJECT_SELF))
      {
              ClearAllActions();
              Partir(OBJECT_SELF);
            }
        }
    if (GetLocalInt(GetModule(),"assis")==4)
          return;

          if (!GetIsInCombat(OBJECT_SELF) && GetCurrentAction(OBJECT_SELF)!=ACTION_SIT)
              {
        Vajouer( OBJECT_SELF);
          }
          }
        else if(nUser == 1005) // ATTACKED
    {
      object oPC=GetLastHostileActor();

    if (GetIsPC(oPC))
    {
      object oJoueur= GetObjectByTag("joueur");
      object oJoueur001= GetObjectByTag("joueur001");
      object oJoueur002= GetObjectByTag("joueur002");
      object oJoueur003= GetObjectByTag("joueur003");

      AssignCommand(oJoueur,ClearAllActions());
      AssignCommand(oJoueur,ActionAttack(oPC));
      AssignCommand(oJoueur002,ClearAllActions());
      AssignCommand(oJoueur002,ActionAttack(oPC));
      AssignCommand(oJoueur003,ClearAllActions());
      AssignCommand(oJoueur003,ActionAttack(oPC));
      AssignCommand(oJoueur001,ClearAllActions());
      AssignCommand(oJoueur001,ActionAttack(oPC));

  /*  if (GetIsDead(oPC))
      {
          ClearAllActions();
          Partir(OBJECT_SELF);

            }    */

    }
    }

        else if(nUser == 1003) // END OF COMBAT
    { object oPC=GetLastHostileActor();


        if (GetIsDead(oPC)==TRUE)
      {

          SetLocalInt(GetModule(),"assis",10);

                  }
    }

}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.



La scène est déclenchée par un trigger, dans le OnEnter duquel il faut mettre :


Code:
NWScript :
void main()
{
object oPC=GetEnteringObject();

  object oWaypoint=GetWaypointByTag("way01");
  location lLoc=GetLocation(oWaypoint);


if (GetIsPC(oPC))
{
  if (GetLocalInt(OBJECT_SELF,"NW_DO_ONCE") != 0)
                  return;

  object oJoueur= CreateObject(OBJECT_TYPE_CREATURE,"joueur",lLoc);
  object oJoueur001= CreateObject(OBJECT_TYPE_CREATURE,"joueur001",lLoc);
  object oJoueur002= CreateObject(OBJECT_TYPE_CREATURE,"joueur002",lLoc,0);
  object oJoueur003= CreateObject(OBJECT_TYPE_CREATURE,"joueur003",lLoc,0);

SetLocalInt(OBJECT_SELF,"NW_DO_ONCE",1);
}
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.




Et voilà !
Cette scène ne se déclenche qu'une seule fois, mais si vous voulez, on peut s'arranger pour quelle ait lieu par exemple une fois tous les trois jours.

J'espère que cela vous plaira, on peut en faire plein d'autres dans le genre.

A très bientôt !
Dernière édition par Enki le 18/04/2006 14:04:05; édité 2 fois
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
L'Erudit
Seigneur
Inscrit le: 26 Oct 2005
Messages: 167
Répondre en citant
Posté le : 17/01/2006 15:36:34 Sujet du message :

Super ! Par contre, pour les Pattern, n'aurais tu pas pu les mettres dans un fichier à part, pour après l'inclure?
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Enki
Légende vivante
Inscrit le: 06 Déc 2005
Messages: 432
Répondre en citant
Posté le : 17/01/2006 16:08:38 Sujet du message : Question !

Tu veux dire pour ces 12 patterns qui sont sur le OnSpawn ?

NWScript :
SetListenPattern(OBJECT_SELF, "", 500);
SetListenPattern(OBJECT_SELF, "", 501);

SetListenPattern(OBJECT_SELF, "", 502);
SetListenPattern(OBJECT_SELF, "Je mise 500 ! ", 503);
SetListenPattern(OBJECT_SELF, "Je mise 150 ! ", 504);

SetListenPattern(OBJECT_SELF, "Combien de cartes ? ", 505);
SetListenPattern(OBJECT_SELF, "T'en veux combien ? ", 506);

SetListenPattern(OBJECT_SELF, "Il bluff ! ", 507);

SetListenPattern(OBJECT_SELF, "Une paire de Jedi ! ", 508);
SetListenPattern(OBJECT_SELF, "", 509);
SetListenPattern(OBJECT_SELF, "Un full de 7 par les Chanceliers ! ", 510);

SetListenPattern(OBJECT_SELF, "", 511);
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


C'est peut-être possible, mais je n'en voit pas l'intérêt, en fait. A moins de faire un include avec tous les patterns du module et de rappeler ceux dont on a besoin.
Qu'est ce que tu voulais dire par là ?
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
L'Erudit
Seigneur
Inscrit le: 26 Oct 2005
Messages: 167
Répondre en citant
Posté le : 17/01/2006 16:24:14 Sujet du message :

Bien en fait, comme je n'aime pas toucher aux Evennements hors du OnUserDefined, j'essaie de tout mettre dedans Laughing !

En fait, je crois qu'on ne peut pas les mettre dans une eventuelle "librairie", qu'on pourrait inclure ensuite, parceque ce sont des fonctions, et on a donc besoin du void main(), en entete.

Comme tu as pu le voir j'ai d'un côté un script (fichier) qui ne contient que des strings, et de l'autre un script qui va se charger de faire tourner la machine en utilisant les ressources du 1er (include).
Après, tu as sûrement raison quand tu dis que ca n'apport rien, néanmoins c'est bien plus propre et lisible, et on utilise que le OnUserDefined (enfin, je crois ^^).
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Enki
Légende vivante
Inscrit le: 06 Déc 2005
Messages: 432
Répondre en citant
Posté le : 17/01/2006 17:00:48 Sujet du message :

Alors effectivement, tu as raison, c'est ce que je voulais dire par mettre tous les patterns dans un include, Je voulais parler des string.
Si tu appelles tes string dans ton include par exemple

NWScript :
string sPattern1="XXXXXXX ! ";
string sPattern2="YYYYYYY ? ";
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


NWScript :
SetListenPattern(OBJECT_SELF,sPattern1 , 500);
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.



Citation :
Bien en fait, comme je n'aime pas toucher aux Evennements hors du OnUserDefined, j'essaie de tout mettre dedans Laughing !
Le problème, c'est qu'il n'y a pas d'événement OnSpawn en UserDefined.

Par contre, si tu ne veux pas toucher aux scripts de base, (c'est un choix contestable, mais pourquoi pas), tu n'est pas obligé de mettre les :
NWScript :
SetListenPattern(OBJECT_SELF,sPattern1 , 500);
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


dans le OnSpawn, tu peux les mettre sur un trigger ou sur le onEnter de la zone, voire du Module, En incluant les tags des PNJs qui doivent écouter ou leur type, leur race etc ...


Citation :
néanmoins c'est bien plus propre et lisible
Tu as peut être raison, car pour les Patterns, il faut être très vigilant : ils sont sensibles à la casse, et aux espaces.
Cependant, dans une conversation longue avec de multiple PNJs, c'est trés difficile de se rappeler à quoi correspond la string sPattern28 par exemple. Alors qu'avec un bon vieux et sale "copier-coller" on sait de suite à quel phrase le PNJ doit répondre et ainsi on évite les incohérences.
Enfin, merci pour tes commentaires, peu de gens ont vue ce Post, ce qui est dommage à mon avis, car tous le monde doit avoir des tavernes dans son module et des scènes de ce genres mettant "de l'ambiance". J'espère qu'ils vont se manifester !
A bientôt !
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
L'Erudit
Seigneur
Inscrit le: 26 Oct 2005
Messages: 167
Répondre en citant
Posté le : 18/01/2006 12:30:32 Sujet du message :

Coucou ! Si AOL le veut bien, je vais tenter de répondre Laughing !

Alors pour le SetListenPattern(), doit on forcément passer par le OnSpawn pour les exécuter?
Ne peut on pas, par exemple, les faire se déclencher après une Perception du PJ? A cemoment là, il serait tout a fait possible de les inclure dans son script de OnUserDefined.

Pour ce qui est du post en lui même, je n'aime pas en voir sans réponses Very Happy ! Mais parfois je ne sais vraiment pas quoi répoondre, et je dois dire que j'ai parfois la flemme de lire les longs scipts. Néanmoins l'idée des Pattern est très bonne, et je dirais qu'on pourrait encore l'améliorer en faisant des Pattern de Pattern de, etc...
Là, on aurait vraiment des conversation multiples et intenses entre PNJ, pourvu qu'on ait l'inspiration créatrice pour inventer de nombreuses phrases Wink !
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Vinc0013
Chevalier
Inscrit le: 08 Mar 2006
Messages: 71
Répondre en citant
Posté le : 28/03/2006 14:04:01 Sujet du message :

Euh.. c koi le "ResRef"? le prénom ou koi?
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
PsyCalimero
Ecuyer
Inscrit le: 17 Jan 2006
Messages: 44
Répondre en citant
Posté le : 28/03/2006 14:17:12 Sujet du message :

Le resref c'est un peu comme le tag, mais cest pas le tag
Tu peux le trouver dans les propriétés de l'objet
Et il est pas modifiable (si oui ca minteresse !! marre de l'importation qui marche pas sans remplacer un resref existant !)
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Vinc0013
Chevalier
Inscrit le: 08 Mar 2006
Messages: 71
Répondre en citant
Posté le : 28/03/2006 14:58:46 Sujet du message :

Sur mon perso g pas OnUsed! Pk?
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Noon
Héros
Inscrit le: 15 Jan 2005
Messages: 272
Localisation: Entre Vannes et les RO
Répondre en citant
Posté le : 28/03/2006 16:20:12 Sujet du message :

Parce que ton perso ne peux pas utiliser ton perso Laughing .
Le onUsed sert pour les objets et placeables.
_________________
Beshaba me protège, Tymora guide mes tirs.

The Cake is a lie !

Mes modules NwN2:De Vieilles Rencontres! et De Vieilles Rencontres2
Double Avenir sur le Nwvault
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Vinc0013
Chevalier
Inscrit le: 08 Mar 2006
Messages: 71
Répondre en citant
Posté le : 28/03/2006 16:36:18 Sujet du message :

Merde! Je regardais le script de la chaise et je pensais que c'était celui du PNJ!
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Vinc0013
Chevalier
Inscrit le: 08 Mar 2006
Messages: 71
Répondre en citant
Posté le : 28/03/2006 16:59:18 Sujet du message :

Mais... un trigger? c un waypoint?
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
gussometre
Ecuyer
Inscrit le: 11 Jan 2006
Messages: 56
Localisation: Petit asteroïde dans le finistére sud
Répondre en citant
Posté le : 28/03/2006 18:23:49 Sujet du message :

non un trigger c'est par exemple un piége ou une zone de transmision.
_________________
N'oublions pas le proverbe:quand on a faim il faut manger!
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
L'Erudit
Seigneur
Inscrit le: 26 Oct 2005
Messages: 167
Répondre en citant
Posté le : 30/03/2006 16:22:27 Sujet du message :

C'est un déclencheur Smile.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Vinc0013
Chevalier
Inscrit le: 08 Mar 2006
Messages: 71
Répondre en citant
Posté le : 30/03/2006 17:41:12 Sujet du message :

Ok merci!! Very HappyVery Happy (dsl j'ai la flemme d'écrire merci Confused ) Embarassed
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Aladar
Chevalier
Inscrit le: 15 Déc 2004
Messages: 96
Localisation: Tours
Répondre en citant
Posté le : 30/03/2006 17:50:27 Sujet du message :


Citation :
Le resref c'est un peu comme le tag, mais cest pas le tag
Tu peux le trouver dans les propriétés de l'objet
Et il est pas modifiable (si oui ca minteresse !! marre de l'importation qui marche pas sans remplacer un resref existant !)
Pour changer le resref d'un truc, il faut "créer une copie" de ce dit-truc.
Une fois les propriétés de ce truc ouverte, dans l'onglet "avancés", la case resref est editable (par contre une fois cliqué sur OK elle se grise à nouveau).
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
PsyCalimero
Ecuyer
Inscrit le: 17 Jan 2006
Messages: 44
Répondre en citant
Posté le : 30/03/2006 20:55:36 Sujet du message :

Et voui merci beaucoup, en fouinant un peut sur le net je venais de trouver la solution a ce probleme Very Happy
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Mans-maniac
Novice
Inscrit le: 02 Sep 2005
Messages: 15
Répondre en citant
Posté le : 16/04/2006 16:36:48 Sujet du message :

je viens d essayer cette anime Sad chez moi ca marche po j ai bien les 4 joueurs qui apparaissent quand je rentre sur le declencheur mais apres rien il reste immobile pres de la porte quand je vais leur parler j ai degage on joue au star poker et c est tous ?
mon pj ne peu s assoir sur les chaises modifier pour les joueurs ? c est normale ?
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Enki
Légende vivante
Inscrit le: 06 Déc 2005
Messages: 432
Répondre en citant
Posté le : 17/04/2006 18:57:50 Sujet du message :

Salut !
Oui, c'est normal que le joueur ne puisse pas s'asseoir, car ceci est la première mouture pour cette scène.
Puisque cette petite animation t'intéresse, je te filerai demain (ou cette nuit ^^ )la version "améliorée" où le joueur se fait éjecter de la chaise.

Ce soir je n'aurai pas le temps.

Merci d'essayer cette anim, que je trouve personnellement très marrante !

A bientôt !
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Enki
Légende vivante
Inscrit le: 06 Déc 2005
Messages: 432
Répondre en citant
Posté le : 18/04/2006 14:05:25 Sujet du message :

Bon, j'ai édité mon premier message avec de nouveaux scripts.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
gulin cul'sec
Grand Chevalier
Inscrit le: 01 Oct 2005
Messages: 121
Localisation: mon pieu
Répondre en citant
Posté le : 18/04/2006 22:28:06 Sujet du message :

Bon la il va falloir m'expliquer, euh j'ai bien tout fais, mon trigger est devant le bar le joueur demande un ver et la 4 personne arrive et s'assoient et la! seul le tricheur parle, les autre ne parle pas et au final le tricheur ce leve et:




KEDAL!!!!



Franchement je suis trop frustrait moi qui aurait adorait voir sa mais la j'ai du fair un flope ou autre mais sa ma dessu pourriez ous m'aidez?
_________________
purer j'ai une de ses envies de pionce zzzzzzzZZZZZZzzzzzZZZZZZzz
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Enki
Légende vivante
Inscrit le: 06 Déc 2005
Messages: 432
Répondre en citant
Posté le : 18/04/2006 23:29:31 Sujet du message :

Oui, pas de problème !

si les autres joueur ne parlent pas, c'est que les scripts on spawn et on user defined ne sont pas les bons regarde de ce coté là.

Si ce n'est pas cela, je peux t'envoyer une démo par mail, par exemple.
Tu pourras comparer alors.

A bientot !
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
gulin cul'sec
Grand Chevalier
Inscrit le: 01 Oct 2005
Messages: 121
Localisation: mon pieu
Répondre en citant
Posté le : 19/04/2006 18:44:10 Sujet du message :

Bon et bien enki j'avance! les quatre personne parle mais la fin est assez bof, j'ai cru lir que le tricheur serait tuée à la fin une fois celui-ci decouvert mais la et bien non, les joueur parle bien mais a la fin il se levent tous et puis plus rien saurait tu comment resoudre mon probleme?

Sinon je voudrais savoir si quelqu'un connaitrer bien le poker ou autre jeu qui se joue avec de l'argent enfin comme le poker ou le blac-jack, enfin une chose assez realiste et que l'on jouer lors du moyen-age.

Sinon je sort un peu du sujet, voila je m'adresse a enki quand je dit sa mais est ce que ton mod sera en solo ou mult et pourra tu m'en dire plus sur celui ci ? Very Happy j'ai hate d'y jetez un oeil.

Merci d'avance pour tout le monde et bonne vie Very Happy (lol je sais pas quoi dire d'autre que sa mise a par de bonne vac mais je l'avais deja dis dans mon post d'avant Embarassed)
_________________
purer j'ai une de ses envies de pionce zzzzzzzZZZZZZzzzzzZZZZZZzz
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Montrer les messages depuis :
Page 1 sur 1 ¤


Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum


Sauter vers:
FAQ | Rechercher | Liste des Membres | Groupes d'utilisateurs | S'enregistrer | Profil | Se connecter pour vérifier ses messages privés | Connexion
Powered by phpBB 2.* [m] © 2001, 2002 phpBB Group
Theme rewritten in beautiful XHTML code by Baldurien.
Thème "La Bibliothèque de Neverwinter" crée par Kruger
Traduction par : phpBB-fr.com
Page generated in 102.425ms