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


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
Yan the salor
Seigneur
Inscrit le: 03 Oct 2004
Messages: 151
Répondre en citant
Posté le : 21/10/2004 10:40:37 Sujet du message : Ouvrir des portes

Dans une salle comportant plusieurs portes et une statue au centre:
Je voudrai faire ouvrir les portes dés qu'un Pj touche la statue (l'ouvre quoi).

Quelqu'un aurait-il une idée?
Dernière édition par Yan the salor le 22/10/2004 12:10:20; édité 1 fois
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
FitzChevalerie
Novice
Inscrit le: 20 Oct 2004
Messages: 6
Répondre en citant
Posté le : 21/10/2004 10:51:25 Sujet du message :

Tu peux peut-être essayé de mettre le script suivant sur le OnUsed de la statue :

NWScript :
void main()
{
    object oDoor1 = GetObjectByTag("dt_door1");
    DoDoorAction(oDoor1, DOOR_ACTION_OPEN);

}
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
 
Yan the salor
Seigneur
Inscrit le: 03 Oct 2004
Messages: 151
Répondre en citant
Posté le : 21/10/2004 12:08:38 Sujet du message :

j'ai essayé maias la porte reste close.
j'ai bien attribué le tag à la porte, mais rien.
Une idée?
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
kiky.le.magnifique
Homme très gay
Inscrit le: 19 Sep 2003
Messages: 907
Localisation: Camping de la nation martienne...
Répondre en citant
Posté le : 21/10/2004 12:52:34 Sujet du message :

NWScript :
void main()
{
    object oDoor1 = GetObjectByTag("dt_door1");
    AssignCommand(oDoor1, ActionOpenDoor(oDoor1));
   
}
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.

Cool
_________________
http://perso.wanadoo.fr/kikitor | Deviant Art | www.VistaEntraide.com | CCLLSELFV! | D-lire_K | Viendez rêver au Pays des fées... | Ne taquinez pas l'admin!
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
Yan the salor
Seigneur
Inscrit le: 03 Oct 2004
Messages: 151
Répondre en citant
Posté le : 22/10/2004 12:12:00 Sujet du message :

Ca marche aux poils (et je te remercie) pour une porte, mais quand j'en ajoute une autre avec le même tag, c'est cette dernière qui s'ouvre et plus la première.
Comment faire pour que toutes mes portes s'ouvrent en même temps en touchant la statue?
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Blackblood
Chevalier
Inscrit le: 20 Juil 2004
Messages: 80
Localisation: France
Répondre en citant
Posté le : 22/10/2004 12:35:58 Sujet du message :

Salut,

il te suffit de nommer les portes en incrémantant leur tag comme ceci :
NWScript :
void main()
{
    object oDoor1 = GetObjectByTag("dt_door1");
    AssignCommand(oDoor1, ActionOpenDoor(oDoor1));

    object oDoor2 = GetObjectByTag("dt_door2");
    AssignCommand(oDoor2, ActionOpenDoor(oDoor2));

    object oDoor3 = GetObjectByTag("dt_door3");
    AssignCommand(oDoor3, ActionOpenDoor(oDoor3));

}
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.


Maintenant, créer le nombre de portes dont tu as besoin, appelle-les : dt_door1, dt_door2, dt_door3, etc.
Met dans ce script le nombre de lignes correspondant au nombre de portes sans oublier de changer le n° de la porte bien entendu.

Bon courage
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
Yan the salor
Seigneur
Inscrit le: 03 Oct 2004
Messages: 151
Répondre en citant
Posté le : 23/10/2004 11:06:39 Sujet du message :

Super génial ça marche...sympa
Merci
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
blackwinter
Novice
Inscrit le: 18 Jan 2004
Messages: 8
Répondre en citant
Posté le : 15/12/2004 22:41:22 Sujet du message :

Le script plus haut a ses limites Very Happy. Il faut rentrer à chaque fois une valeur pour une nouvelle porte au risque d'en oublier une.

Que dirais tu de celui là qui va boucler les différentes portes du même tag pour les fermer une à une.

Voila la fonction à créer si tu as un "inc_" place là dedans

NWScript :

//string sO          : string du tag de la porte
//float fRearm      : float du temps de la fermeture de la porte

void FermePorte (string sO,float fRearm) {
object oO;
oO = GetFirstObjectInArea(OBJECT_SELF);
while (GetIsObjectValid(oO)){
      if (oO == GetObjectByTag(sO)){
          AssignCommand(oO, ActionOpenDoor(oO));
          DelayCommand(fRearm,ActionCloseDoor(oO));
          }
      oO = GetNextObjectInArea(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.


Après il te suffit d'appeler la fonction sur le on_used de ta statue.

NWScript :

void man()
{
FermePorte("tag_porte",60.00) //60 sec avant fermeture
}
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 avantages de cette solution c'est que de un on peut réutiliser cette fonction et de deux on évite d'oublier des portes. Et en plus on s'évite la peine de devoir changer les tags de chaque porte.

NB: Veuillez vérifier si je ne ne me suis pas trompé qlq part, on ne sait jamais. Et au fait j'espère que NWN considère bien les portes comme des objects Embarassed
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Athanagorn
Acolyte
Inscrit le: 12 Déc 2004
Messages: 38
Répondre en citant
Posté le : 15/12/2004 23:37:47 Sujet du message :

A prioris, rien à voir avec le sujet du post initial (ou alors, j'ai mal lu).
Le PO voulais bien ouvrir les portes, non? Ah, oui, ton script les ouvre puis les referme. Le nom reste à mon avis mal choisi (Puisqu'il m'a enduit d'erreur Wink ...)

Et a prioris (en tout cas, c'est ainsi qu'elle est décrite, et c'est toujours dangereux d'utiliser des fonctions d'une façon différente de celle décrite) GetFirstObjectInArea() prends une Area en paramètre, et OBJECT_SELF sera la statue et non la zone de la statue.
Remplacer par GetArea(OBJECT_SELF)?

Ah, une dernière chose... Je ne suis pas sûr que la statue soit capable de se déplacer pour aller fermer les portes...
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
blackwinter
Novice
Inscrit le: 18 Jan 2004
Messages: 8
Répondre en citant
Posté le : 16/12/2004 00:00:46 Sujet du message :


Athanagorn a écrit :
A prioris, rien à voir avec le sujet du post initial (ou alors, j'ai mal lu).
Le PO voulais bien ouvrir les portes, non? Ah, oui, ton script les ouvre puis les referme. Le nom reste à mon avis mal choisi (Puisqu'il m'a enduit d'erreur Wink ...)
Laughing

Non sans rire, en effet le nom n'est pas super bien choisis, m'enfin moi ouvrir un porte pour la laisser ouverte... Enfin juste je n'ai pas à critiquer un choix de conception. Sinon je ne comprends pas pourquoi tu dis que je n'ai rien avoir avec le sujet initial ? J'ouvre les portes non ?


Athanagorn a écrit :
Et a prioris (en tout cas, c'est ainsi qu'elle est décrite, et c'est toujours dangereux d'utiliser des fonctions d'une façon différente de celle décrite) GetFirstObjectInArea() prends une Area en paramètre, et OBJECT_SELF sera la statue et non la zone de la statue.
Remplacer par GetArea(OBJECT_SELF)?
Agree Embarassed, voila ce que c'est de faire ce genre de script de mémoire. En effet on doit faire référence à une area pour plus de facilité.


Athanagorn a écrit :
Ah, une dernière chose... Je ne suis pas sûr que la statue soit capable de se déplacer pour aller fermer les portes...
Attention
NWScript :
if (oO == GetObjectByTag(sO))
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.
vérifie que l'on parle bien de la porte et donc dans la suite ce sera elle qui va s'ouvrir, par contre en effet la fermeture ne ce fera pas il manque une partie de code.

Donc si l'on reprend le tout.

NWScript :

//string sO : string du tag de la porte

void OuvrePorte (string sO) {
object oO;
oO = GetFirstObjectInArea(GetArea(OBJECT_SELF));
  while (GetIsObjectValid(oO)){
    if (oO == GetObjectByTag(sO)) AssignCommand(oO, ActionOpenDoor(oO));
  oO = GetNextObjectInArea(GetArea(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.


Après il te suffit d'appeler la fonction sur le on_used de ta statue.

NWScript :

void man()
{
OuvrePorte("tag_porte")
}
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
 
Athanagorn
Acolyte
Inscrit le: 12 Déc 2004
Messages: 38
Répondre en citant
Posté le : 16/12/2004 09:51:50 Sujet du message :


blackwinter a écrit :
Sinon je ne comprends pas pourquoi tu dis que je n'ai rien avoir avec le sujet initial ? J'ouvre les portes non ?
Dans un premier temps, j'avais pas vu que tu ouvrais les portes avant de les refermer.


blackwinter a écrit :
Attention
NWScript :
if (oO == GetObjectByTag(sO))
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.
vérifie que l'on parle bien de la porte et donc dans la suite ce sera elle qui va s'ouvrir, par contre en effet la fermeture ne ce fera pas il manque une partie de code.
non,
NWScript :
if (oO == GetObjectByTag(sO))
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.
vérifie que l'objet est "UNE" des portes portants ce tag. L'objet retourné par GetObjectByTag(sO) peut être n'importe quel objet ayant pour trag sO, donc pas forcement celui que tu penses (sauf s'il est unique avec ce tag, bien sur, mais dans ce cas pas besoin de boucler avec GetFirstObject/GetNextObject.
Ce que tu veux, toi, c'est vérifier que l'objet à bien le bon tag et c'est comme ceci
NWScript :
if (GetTag(oO) == sO)
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.
qu'on doit faire.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Anthraxcite
Légende vivante
Inscrit le: 12 Juin 2004
Messages: 372
Localisation: Belgique
Répondre en citant
Posté le : 17/12/2004 16:30:49 Sujet du message :

NWScript :
void main()
{
    object oDoor;
    int i = 0;
    while((oDoor = GetNearestObjectByTag("tagdesportes",OBJECT_SELF,i))!=OBJECT_INVALID)
    {
        AssignCommand(oDoor, ActionOpenDoor(oDoor));
        i++;
    }
}
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é Visiter le site web du posteur MSN Messenger 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 80.177ms