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 15:21:05


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
tarnos
Novice
Inscrit le: 21 Jan 2005
Messages: 11
Répondre en citant
Posté le : 31/01/2005 23:13:14 Sujet du message : ouvrir une porte grace a plusieurs leviers

Salut a tous.

Je suis a la recherche d'un script ... qui me permettrais d'ouvrir une porte que si j'ai actionne 4 leviers.

J'ai trouve facilement pour 1 levier. Mais d'apres ce que j'ai pu voir, il faut que j'utilise des variables. est ce vrai ???

Merci de me renseigner ...
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Dreams
Ecuyer
Inscrit le: 30 Juil 2004
Messages: 41
Localisation: val de marne
Répondre en citant
Posté le : 01/02/2005 01:10:30 Sujet du message :

Bon, je ne sais pas si cela te conviendra mais j'ai quelque chose qui pourrait te servir comme substitut sinon.

Un script pour ouvrir une porte grace à plusieurs leviers MAIS des leviers à activer dans un certain ordre.

Pour cela creer ta porte, vérouillée et avec un TAG, creer des leviers avec un tag du type "LEVER_X" ou X sera le numéro de ton levier.

La séquence pour activer les leviers peut etre du type "12345" ou "11245" ou "13335" bref ce que tu veux, tout ca pour dire que tu peux utiliser plusieur fois un meme levier.

Tu peux faire jusqu'à 10 leviers si ca te chante.

Voilà le script


NWScript :
void main()
{

    string sLeverSequence = "1234";//C'est ici que tu mets l'ordre voulu
    object oDoor = GetObjectByTag ("tag de la porte");
    object oLeverStatus = GetObjectByTag ("LEVER_1");
    int iLeverCount = GetLocalInt (oLeverStatus, "LEVER_COUNT");
    int iThisLever = StringToInt (GetSubString (GetTag (OBJECT_SELF), 6, 1));
    int iNextLeverExpected = StringToInt (GetSubString (sLeverSequence, iLeverCount, 1));
    ActionPlayAnimation(ANIMATION_PLACEABLE_ACTIVATE);
    ActionPlayAnimation(ANIMATION_PLACEABLE_DEACTIVATE);

   
    if (iThisLever == iNextLeverExpected)
    {
        iLeverCount++;

        if (iLeverCount >= GetStringLength (sLeverSequence))
        {
            iLeverCount = 0;
            AssignCommand (oDoor, ActionOpenDoor(oDoor));
            SetLocked (oDoor, FALSE);
        }
    }
    else
    {
       
        iLeverCount = 0;
    }

    SetLocalInt (oLeverStatus, "LEVER_COUNT", iLeverCount);
}
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 qu'un seul soucis.... je ne sais pas où se met ce script EmbarassedEmbarassedEmbarassedEmbarassedEmbarassed **boulet**

Je pense qu'un grand connaisseur ici te le dira Very Happy

voilà
cordialement
_________________
La raison de la réussite des gens du mal est l'inaction des gens du bien
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Klemmth
Seigneur
Inscrit le: 26 Juin 2004
Messages: 176
Localisation: france
Répondre en citant
Posté le : 01/02/2005 07:19:15 Sujet du message :

ce script doit se mettre dans le OnUsed des leviers.
Si tu ne veux pas d'ordre tarnos, voilà un script vite fait :

A mettre dans le OnUsed des leviers :

NWScript :
void main()
{
  object oPC = GetLastUsedBy();
  object oDoor = GetObjectByTag ("tag de la porte");
  int nCount = GetLocalInt( oPC, "count_leviers" );
  ActionPlayAnimation(ANIMATION_PLACEABLE_ACTIVATE);
  ActionPlayAnimation(ANIMATION_PLACEABLE_DEACTIVATE);

  SetLocalInt( oPC, "count_leviers", nCount + 1 );

  if ( nCount >= 4 )
  {
    AssignCommand( oDoor, ActionOpenDoor( oDoor ) );
    SetLocked (oDoor, FALSE);
  }
}
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
 
finipe
Grand Sage du Conseil
Inscrit le: 11 Fév 2003
Messages: 519
Localisation: Nantes
Répondre en citant
Posté le : 01/02/2005 13:14:00 Sujet du message :

Ça posera un problème comme solution, car il suffira que le joueur actionne 4x le même levier pour ouvrir la porte dans ce cas-là.

Il faut en plus de la variable locale qui compte jusqu'à 4 un test sur le levier pour savoir s'il a été ou non actionné. Donc par exemple une seconde variable locale propre à chaque levier, stockée sur les leviers même, tandis que la variable concernant l'ouverture de la porte sera stockée sur le PJ ou sur le module.

Ça donnerait un truc dans ce genre là :

NWScript :
void main()
{
object oPC = GetLastUsedBy();
object oDoor = GetObjectByTag("tag de la porte");
int nCount = GetLocalInt(oPC, "count_leviers");
int nUtilise = GetLocalInt(OBJECT_SELF, "deja_utilise");

ActionPlayAnimation(ANIMATION_PLACEABLE_ACTIVATE);
ActionPlayAnimation(ANIMATION_PLACEABLE_DEACTIVATE);

  if(nUtilise == 0)
  {
    SetLocalInt(OBJECT_SELF, "deja_utilise", 1);
    SetLocalInt(oPC, "count_leviers", nCount+1); // on augmente le compteur total
    if(nCount == 3)
    {
      SpeakString("Un cliquetis retentit, puis des engrenages semblent s'animer quelque part dans les murs...");
      SetLocked(oDoor, FALSE);
      AssignCommand(oDoor, ActionOpenDoor(oDoor));
    }
    else
    {
      SpeakString("Un cliquetis retentit...");
    }
  }

  else
  {
    SpeakString("Rien ne se passe...");
  }
}
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.

Voilà, à peu près (j'ai pas testé). J'insiste sur le nCount == 3, et non pas 4. En effet, à la 1ère utilisation, le compteur prendra la valeur 0, et non pas 1. Donc, 0,1,2,3 et hop la porte s'ouvre Wink

EDIT après test : c'est bon ça marche. Un dernier détail, les plaçables leviers sont par défaut en position activée, donc il faut les mettre en position désactivée dans l'éditeur.
_________________
» Le Tref & l'Aucube : Histoire, misanthropie & zoologie léonine
» 1626, le Gant & l'Epée : intrigues & duels sous le règne de Louis XIII
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
Klemmth
Seigneur
Inscrit le: 26 Juin 2004
Messages: 176
Localisation: france
Répondre en citant
Posté le : 01/02/2005 18:20:27 Sujet du message :


finipe a écrit :
Ça posera un problème comme solution, car il suffira que le joueur actionne 4x le même levier pour ouvrir la porte dans ce cas-là.

Il faut en plus de la variable locale qui compte jusqu'à 4 un test sur le levier pour savoir s'il a été ou non actionné. Donc par exemple une seconde variable locale propre à chaque levier, stockée sur les leviers même, tandis que la variable concernant l'ouverture de la porte sera stockée sur le PJ ou sur le module.
Exact, désolé de cet oubli.
_________________
...
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
tarnos
Novice
Inscrit le: 21 Jan 2005
Messages: 11
Répondre en citant
Posté le : 03/02/2005 16:42:22 Sujet du message :

Ouaaa ... Merci o maitre des Scripts qui m'ont repondu

Le script a Super bien marche. Sa y est je suis debloquer..

Merci bien .
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
tarnos
Novice
Inscrit le: 21 Jan 2005
Messages: 11
Répondre en citant
Posté le : 04/02/2005 18:50:14 Sujet du message :

re salut

Un point m'embete tous de meme... Est ce que on pourrait mettre une tempo sur la porte et les leviers.

Pour que dans par exemple 20 sec apres que la porte ce soit ouverte elle se referme a clef et que les leviers se remette a leur etat d'origine..

Merci
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Klemmth
Seigneur
Inscrit le: 26 Juin 2004
Messages: 176
Localisation: france
Répondre en citant
Posté le : 04/02/2005 19:03:28 Sujet du message :

NWScript :
void main()
{
object oPC = GetLastUsedBy();
object oDoor = GetObjectByTag("tag de la porte");
int nCount = GetLocalInt(oPC, "count_leviers");
int nUtilise = GetLocalInt(OBJECT_SELF, "deja_utilise");
levier
int nLevier = 3; //nombre de leviers
int nLoop;

ActionPlayAnimation(ANIMATION_PLACEABLE_ACTIVATE);
ActionPlayAnimation(ANIMATION_PLACEABLE_DEACTIVATE);

  if(nUtilise == 0)
  {
    SetLocalInt(OBJECT_SELF, "deja_utilise", 1);
    SetLocalInt(oPC, "count_leviers", nCount+1); // on augmente le compteur total
    if(nCount == 3)
    {
      SpeakString("Un cliquetis retentit, puis des engrenages semblent s'animer quelque part dans les murs...");
      SetLocked(oDoor, FALSE);
      AssignCommand(oDoor, ActionOpenDoor(oDoor));
      DelayCommand( 20.0, AssignCommand( oDoor, ActionCloseDoor( oDoor ) ) );
      DelayCommand( 21.0, SetLocked( oDoor, TRUE ) );
      DelayCommand( 21.0, SetLocalInt( oPC, "count_leviers", 0 ) );
      for ( nLoop=1; nLoop<=nLevier; nLoop++ )
      {
        DelayCommand( 21.0, SetLocalInt( GetObjectByTag( "levier"+IntToString( nLoop ) ), "deja_utilise", 0 ) ); //pour que ca marche, il faut que tu mettes comme tag de tes leviers : "levier1", "levier2", ...
      }
    }
    else
    {
      SpeakString("Un cliquetis retentit...");
    }
  }

  else
  {
    SpeakString("Rien ne se passe...");
  }
}
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
 
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 49.363ms