La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
FAQ
Rechercher
Liste des Membres
Groupes d'utilisateurs
S'enregistrer Se connecter pour vérifier ses messages privés Connexion
S'enregistrer Se connecter pour vérifier ses messages privés Connexion
La date/heure actuelle est 23/11/2024 15:21:05
La Bibliothèque de Neverwinter Nights Index du Forum »
La Bibliothèque Binaire du NWScript - Neverwinter Nights
Voir le sujet précédent ¤ Voir le sujet suivant | |
---|---|
Auteur | Message |
tarnos Novice Messages: 11 |
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 | |
Dreams Ecuyer Messages: 41 Localisation: val de marne |
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); } Je n'ai qu'un seul soucis.... je ne sais pas où se met ce script **boulet** Je pense qu'un grand connaisseur ici te le dira voilà cordialement _________________ La raison de la réussite des gens du mal est l'inaction des gens du bien |
Revenir en haut | |
Klemmth Seigneur Messages: 176 Localisation: france |
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); } } _________________ ... |
Revenir en haut | |
finipe Grand Sage du Conseil Messages: 519 Localisation: Nantes |
Ç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..."); } } 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 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 | |
Klemmth Seigneur Messages: 176 Localisation: france |
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à.
Exact, désolé de cet oubli.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. _________________ ... |
Revenir en haut | |
tarnos Novice Messages: 11 |
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 | |
tarnos Novice Messages: 11 |
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 | |
Klemmth Seigneur Messages: 176 Localisation: france |
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..."); } } _________________ ... |
Revenir en haut | |
La Bibliothèque de Neverwinter Nights Index du Forum »
La Bibliothèque Binaire du NWScript - Neverwinter Nights
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