La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
La date/heure actuelle est 19/04/2025 10:22:07


  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 : 27/01/2006 11:34:37 Sujet du message : Problème de chaises !

Bonjour, j'ai fait une taverne possédant quatre portes avec des PNJs qui apparaissent à des heures bien précises à la proportion d'un PNJ par porte. Je veux qu'à chaque fois qu'un PNJ entre avec un préfixe particulier, il se dirige aléatoirement vers une chaise (il y en a 16 en tout) et s'assoit. Jusque là, tout fonctionne, mais le problème, c'est que si le PNJ entrant s'approche d'une chaise déja occupée, il reste planté comme un idiot devant. Pourtant, j'ai placé une condition (c'est sûrement là le problème), qui devrait faire que si la chaise est occupée, le PNJ cherche aléatoirement l'une des trois premières chaises à proximité de de la chaise occupée pour s'y installer.
Voici le script en question, sur le OnEnter de la zone.


NWScript :
void main()
{
  object oNPC=GetEnteringObject();
  int n;
  string sPassant="passant";
  string sPassant01="marcheur_";
  string sString01=GetStringLeft(GetTag(oNPC),9);
  object oChair=GetNearestObjectByTag("X2_PLC_CHAIRMIND", oNPC,n);

  string sString=GetStringLeft(GetTag(oNPC),7);


          if (sString==sPassant)
          {
                  if(!GetIsObjectValid(GetSittingCreature(oChair)))
                {
                    n=Random(16);
                  oChair=GetNearestObjectByTag("X2_PLC_CHAIRMIND", oNPC,n);

                  AssignCommand(oNPC,ActionMoveToObject(oChair));
                  AssignCommand(oNPC,ActionSit(oChair));
                    }


                  if(GetIsObjectValid(GetSittingCreature(oChair)))

              {
                  n=Random(3);
                  oChair=GetNearestObjectByTag("X2_PLC_CHAIRMIND", GetSittingCreature(oChair),n);
                  AssignCommand(oNPC,ActionMoveToObject(oChair));
                  AssignCommand(oNPC,ActionSit(oChair));

          }
                }

        if (sString01==sPassant01)
          {
                  if(!GetIsObjectValid(GetSittingCreature(oChair)))
                  {

                  n=Random(16);
                  oChair=GetNearestObjectByTag("X2_PLC_CHAIRMIND", oNPC,n);
                  AssignCommand(oNPC,ActionMoveToObject(oChair));
                  AssignCommand(oNPC,ActionSit(oChair));
              }

                if(GetIsObjectValid(GetSittingCreature(oChair)))
              {
                  n=Random(3);
                  oChair=GetNearestObjectByTag("X2_PLC_CHAIRMIND", GetSittingCreature(oChair),n);
                  AssignCommand(oNPC,ActionMoveToObject(oChair));
                  AssignCommand(oNPC,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.



Si quelqu'un peut me dire pourquoi cela ne marche pas, cela serait très gentil !
Merci par avance.
 
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 : 27/01/2006 13:00:24 Sujet du message :

Coucou Enki, je pense que tes conditions sont bien formulées, peut être que tu devrais assayer ceci:


NWScript :
// Petite simplification du script avec les ||
if (sString==sPassant || sString01==sPassant01)
{
if (!GetIsObjectValid(GetSittingCreature(oChair)))
                {
                  n=Random(16);
                  oChair=GetNearestObjectByTag("X2_PLC_CHAIRMIND", oNPC,n);

                  AssignCommand(oNPC,ActionMoveToObject(oChair));
                  AssignCommand(oNPC,ActionSit(oChair));
                }
// Tu as 2 conditions en tout et pour tout, donc autant mettre un else.
else {
                  n=Random(3);
                  oChair=GetNearestObjectByTag("X2_PLC_CHAIRMIND", GetSittingCreature(oChair),n);
                  AssignCommand(oNPC,ActionMoveToObject(oChair));
                  AssignCommand(oNPC,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.


Je n'ai pas testé, donc dis moi si ça fonctionne...

EDIT: je crois, après réfléxion, que le probleme ne se situe pas là. En fait, c'est ta variable n qui ne possède pas de valeur quand tu définis oChair (en premier), par conséquent, lorsque ta première condition est testée, on ne sait pas quelle chaise va être testée (n=?). Ensuite, tu utilises un Random pour décider de la chaise sur laquelle va s'assoir le PNJ, mais rien ne te dit que ce sera celle qui a été testée avec ton "if".
 
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 : 27/01/2006 13:29:35 Sujet du message :

Merci, je crois que j'ai compris d'où vient l'erreur, je vais modifier mon script et je te tiens au courrant.
 
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 : 27/01/2006 17:00:52 Sujet du message :

Bon j'ai trouvé, merci pour tes remarques et conseils, l'Erudit !
Voici le bon script :

NWScript :
void main()
{
  object oNPC=GetEnteringObject();
  int n;//=Random(16);
  string sPassant="passant";
  string sPassant01="marcheur_";
  string sString01=GetStringLeft(GetTag(oNPC),9);
  object oChair; // =GetNearestObjectByTag("X 2_PLC_CHAIRMIND", oNPC,n);
  object oComptoir=GetWaypointByTag("comptoir");
  string sString=GetStringLeft(GetTag(oNPC),7);

// Petite simplification du script avec les ||
if (sString==sPassant || sString01==sPassant01)
{
    n=Random(16);
    oChair=GetNearestObjectByTag("X2_PLC_CHAIRMIND", oNPC,n);

    AssignCommand(oNPC,ActionForceMoveToObject(oChair));


if (GetIsObjectValid(GetSittingCreature(oChair)))
                {
                  n=Random(3);
                oChair=GetNearestObjectByTag("X2_PLC_CHAIRMIND", oNPC,n);
                //  AssignCommand(oNPC,ActionForce MoveToObject(oComptoir));
                AssignCommand(oNPC,ActionForceMoveToObject(oChair));
                AssignCommand(oNPC,ActionSit(oChair));
                }
// Tu as 2 conditions en tout et pour tout, donc autant mettre un else.
else {

      AssignCommand(oNPC,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.
 
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 : 28/01/2006 04:30:37 Sujet du message :

Super, je suis content que tu aies pu trouver la solution, d'autant que ce script est très utile pour animer les intérieurs Wink !
 
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 60.21ms