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


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
cbil
Novice
Inscrit le: 07 Juil 2006
Messages: 5
Répondre en citant
Posté le : 12/07/2006 21:10:13 Sujet du message : Script de levier/porte généralisé...

Salut tout le monde ! Ca fais plusieurs semaines que je viens, d'abord sur le site system-tek puis le forum, enfin je me decide à poster mon premier message. Je suis un nouveau scripteur NWN ^^.

Donc voila, j'ai vu plusieurs script de levier qui ouvre une porte mais celui-ci (ce que je n'ai pas trouvé ailleurs) est plus général...vous pouvez vous en servir pour n'importe quel combinaison levier/porte, aucune changement dans le script ne sera necessaire.
En revanche, il est necessaire d'avoir une cohérence entre le tag du levier et le tag de la porte.

Explication des tags :
Pour le tag d'un levier : levier01, le tag de la porte devra etre : door_levier01

Placement du script :
Le script est à placer dans le onUsed du levier

Remarque :
On peut avoir (si je me trompe pas), plusieurs levier pour une meme porte (les leviers auront le meme tag).....et si mon raisonnement est bon, si on active un levier, tous les autres seront activés également.


Le Script :
NWScript :
void animLevier(int valeur, object levier);

void main()
{
      //on recupere l'objet levier
      object oLevier = OBJECT_SELF;


      //on recupere le tag du levier
      string tag = GetTag(oLevier);
      //on modifier le tag pour avoir door_tagdulevier
      tag = "door_"+tag;


      //on chercher l'objet porte ayant ce nouveau tag
      object oDoor = GetObjectByTag(tag);

      //si la porte n'a pas ete trouve on s'arrete
      if(oDoor==OBJECT_INVALID)
                return;

      //si la porte est fermee, on l'ouvre (! signifie le contraire)
      if(!GetIsOpen(oDoor))
      {
            //on ouvre la porte
            ActionOpenDoor(oDoor);
            //on anim le levier vers active
            animLevier(TRUE,oLevier);

      }else{ //sinon on ferme la porte
            //on ferme la porte
            ActionCloseDoor(oDoor);
          //on anim le levier vers desactiver
            animLevier(FALSE,oLevier);
      }

}


void animLevier(int valeur, object levier)
{
    if(valeur==TRUE)
    {
        //on anim vers active apres un delai de 0.1 s
        DelayCommand(0.1, AssignCommand(levier, PlayAnimation(ANIMATION_PLACEABLE_ACTIVATE)));
    }else{
        //on anim vers desactive apres un delai de 0.1 s
        DelayCommand(0.1, AssignCommand(levier, PlayAnimation(ANIMATION_PLACEABLE_DEACTIVATE)));
    }

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



N'hésitez pas a faire vos remarques, c'est ideale pour s'ameliorer dans les scripts ^^

a+ All
Cbil
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
cbil
Novice
Inscrit le: 07 Juil 2006
Messages: 5
Répondre en citant
Posté le : 12/07/2006 21:15:14 Sujet du message :

Ah oui j'oubliais....

J'ai mis un DelayCommand pour les anims du levier car quand je met l'animation des levier directemnt, il n'execute pas les autres actions (meme si le code de l'animation est placé tout à la fin) mais uniquement l'animation.

Avec un DelayCommand, le probleme est resolu, le temps est tres court (0.1s) pour garder l'impression d'une ouverture de la porte et une activation du levier executé en meme temps.

a+
Cbil
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Djezebel
Héros
Inscrit le: 29 Sep 2005
Messages: 252
Répondre en citant
Posté le : 13/07/2006 12:21:57 Sujet du message :

Ca fonctionne très bien, très bonne initiative. ^^
Cela évite d'avoir plusieurs scripts pour chaque levier.

Continue comme ça ! Smile
 
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 : 13/07/2006 17:49:04 Sujet du message :

NWScript :
void animLevier(int valeur, object levier)
{
    DelayCommand(0.1, AssignCommand(levier, PlayAnimation(201-valeur)));
}
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.

Le top de l'optimisation :
ANIMATION_PLACEABLE_ACTIVATE c'est 200
ANIMATION_PLACEABLE_DEACTIVATE c'est 201
TRUE c'est 1
FALSE c'est 0
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur MSN Messenger Ignorer l'utilisateur
 
Sith Vicious
Grand Sage du Conseil
Inscrit le: 19 Oct 2005
Messages: 693
Répondre en citant
Posté le : 13/07/2006 18:14:13 Sujet du message :

Laughing
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
cbil
Novice
Inscrit le: 07 Juil 2006
Messages: 5
Répondre en citant
Posté le : 13/07/2006 21:15:36 Sujet du message :

En effet, c plus simple comme ca et mieux pour les calculs ^^

Merci
a+
Cbil
 
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 35.425ms