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 17:36: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 |
L'Erudit Seigneur Messages: 167 |
Posté le : 17/01/2006 01:33:14 Sujet du message : Des Torches qui s'allument, mais qui ne s'éteignent pas
Bon, je suis sur un système tout bête depuis un bout de temps, et je n'arrive pas à le faire marcher entièrement.
Des torches sont repartis dans un couloir, sur les côtés. Quand le PJ passe, les torches (Tag unique "Torche") s'allument au fur et à mesure, gràce à ce script, placé dans le OnEnter d'un trigger finement placé. NWScript :
void main() { object oPC = GetEnteringObject(); if (!GetIsPC(oPC)) return; string sTorche = "Torche"; object oTorche1 = GetNearestObjectByTag(sTorche, oPC, 1); object oTorche2 = GetNearestObjectByTag(sTorche, oPC, 2); effect eLumiere = EffectVisualEffect(VFX_DUR_LIGHT_YELLOW_10); int nPermanent = DURATION_TYPE_PERMANENT; int nAllume = ANIMATION_PLACEABLE_ACTIVATE; AssignCommand(oTorche1, PlayAnimation(nAllume)); AssignCommand(oTorche2, PlayAnimation(nAllume)); ApplyEffectToObject(nPermanent, eLumiere, oTorche1); ApplyEffectToObject(nPermanent, eLumiere, oTorche2); } Jusque là tout va bien, mais je souhaite que les torches s'eteignent lorsque le PJ quitte la zone couverte par les torches, et voilà le script que cela donne: NWScript :
void main() { object oPC = GetEnteringObject(); if (!GetIsPC(oPC)) return; int n; string sTorches = "Torche"; object oTorche = GetNearestObjectByTag(sTorches, OBJECT_SELF, n); effect eLumiere = EffectVisualEffect(VFX_DUR_LIGHT_YELLOW_10); int nEteint = ANIMATION_PLACEABLE_DEACTIVATE; for(n = 1; oTorche == OBJECT_INVALID; n++) { AssignCommand(oTorche, PlayAnimation(nEteint)); RemoveEffect(oTorche, eLumiere); } } Malheuresement ce script se compile, mais ne fait rien du tout. J'ai essayé de le modifier de long en large et ca ne donne rien. Donc, j'implore votre aide, et au passage si vosu avez des conseils pour optimiser le système, je suis preneur. Merci ! |
Revenir en haut | |
Enki Légende vivante Messages: 432 |
Bonsoir, l'Erudit !
Je sais combien c'est dur de bloquer sur des scripts, surtout avec des boucles. On a vite l'impression de tourner en rond et c'est vrai que c'est agaçant d'avoir l'impression d'avancer dans le noir. En fait, tu avais commis deux petites erreurs dans ton deuxième script, remplace-le par celui là et elles t'apparaîtront clairement ! NWScript :
void main() { object oPC = GetEnteringObject(); if (!GetIsPC(oPC)) return; int n; string sTorches = "Torche"; object oTorche = GetNearestObjectByTag(sTorches, OBJECT_SELF, n); effect eLumiere = EffectVisualEffect(VFX_DUR_LIGHT_YELLOW_10); int nEteint = ANIMATION_PLACEABLE_DEACTIVATE; for(n = 0; oTorche!=OBJECT_INVALID ; n++) { oTorche = GetObjectByTag(sTorches,n); AssignCommand(oTorche, PlayAnimation(nEteint)); RemoveEffect(oTorche, eLumiere); } } J'espère avoir éclairé ta lanterne ! |
Revenir en haut | |
L'Erudit Seigneur Messages: 167 |
Merci beaucoup ! Gràce à tes corrections, j'ai pu refiare un script qui marche à présent.
Mais j'aimerais identifier mes fautes. La première, et la plus idiote (surement la fatigue): le "== OBJECT_INVALID" au lieu de "!= OBJECT_INVALID". La seconde et moins facile à déceler: Si je reprend mon script qui ne marche pas en rectifiant la premiere faute, et que je teste, il y a un TooManyInstruction qui s'affiche. Alors là, je ne sais pas d'où il vient, mais ce que je sais c'est qu'en incluant "oTorche = GetNearestObjectByTag(sTorches, OBJECT_SELF, n);" dans la boucle, puis en référencant "object oTorche = GetObjectByTag(sTorches);" au départ (sans quoi la condition de fin de boucle est remplie avant son lançement), le tout marche. Je me demande si le "for" initie dabord la valeur de "n" à 1, ou s'il teste d'abord la condition de boucle. Et à priori, le "for" n'aime pas aller chercher les références à ses exécutions, hors des crochets (je pense au oTorche du premier script qui ne marchait pas). Peut être que le "while" ou le "do while" auraient été plus approprié pour ce script? Au fait, voilà le nouveau script. Vous pouvez voir les flambeaux s'allumer au fur et à mesure de votre avancée dans le couloir (vori plus haut le script qui marche), puis s'éteindre dès que vous quittez le couloir (script qui marche a présent, merci Enki ^^). C'est magnifique ! NWScript : void main() { object oPC = GetEnteringObject(); if (!GetIsPC(oPC)) return; int n; string sTorches = "Torche"; object oTorche = GetObjectByTag(sTorches); effect eLumiere = EffectVisualEffect(VFX_DUR_LIGHT_YELLOW_10); int nEteint = ANIMATION_PLACEABLE_DEACTIVATE; for(n = 1; oTorche != OBJECT_INVALID; n++) { oTorche = GetNearestObjectByTag(sTorches, OBJECT_SELF, n); AssignCommand(oTorche, PlayAnimation(nEteint)); RemoveEffect(oTorche, eLumiere); } } |
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