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 20:53:51
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 |
whiteange Novice Messages: 11 |
Bonjour à tous,
Je débute en script NVWS et je me trouve confronter à une difficulté au niveau de la gestion des variables. Le contexte : UN NPC possède deux dialogues (inscrit sous root dans cet ordre) : 1 - Le premier dialogue concerne la récompense pour la quete : diag1 2 - Le deuxième dialogue concerne une question debouchant sur 2 reponses possibles de la part du PJ : 2a - Je prends la quete qui consite a tuer un monstre (diag2a) 2b - le NPC me remercie (diag2b) 2c - Je pose une question (diag2c) ================ Ce qui fais que : diag1 ne s'excute que si GetLocalInt(GetPCSpeaker(),"QUETE") == 2, puis initalise cette valeur à 3 (3=Effectue, plsu possible de la faire) diag2a ne s'execute que si GetLocalInt(GetPCSpeaker(),"QUETE") =/= 1 et =/=2 et =/=3 diag2b initialise SetLocalInt(GetPCSpeaker(),"QUETE",1) diag2c n'itialise rien ================ Conséquence : Lorsque je parle avec le NPC il n'y a pas de soucis, le diag2 n'apparait qu'une fois s'il est selctionne, et n'apparait plus après. ================ Ensuite je vais tuer mon monstre qui se trouve dans une autre zone, et dans le script onDeath, j'initialise QUETE à 2 de la même façon que précedemment. ================ Je reviens voir mon NPC et là rien du tout ========================== ========================== Je pense qu'il y a donc un problème de variable, mais je ne sait pas comment le résoudre, et quelqu'un a t'il une solution plus simple que la façon dont je fais les tests pour connaitre l'etat de la quete, car j'ai l'impression que c'est une soupe infame de script Merci à tous |
Revenir en haut | |
finipe Grand Sage du Conseil Messages: 519 Localisation: Nantes |
Reporte toi à ce topic :
[http] ...qui a été fait tout exprès pour ce genre de chose. _________________ » Le Tref & l'Aucube : Histoire, misanthropie & zoologie léonine » 1626, le Gant & l'Epée : intrigues & duels sous le règne de Louis XIII Dernière édition par finipe le 25/11/2003 06:55:56; édité 1 fois
|
Revenir en haut | |
whiteange Novice Messages: 11 |
Hum oui ,j'ai lu ce sujet, j'ai exactement celà dans mes definitons, mais le résultat ne donne pas la chose attendue : :
Donc, j'aimerais avoir si quelqu'un aurait une idée du pourquoi du comment ? Je viens de faire un test dans la case OnDeath ou se trouve un script par defaut (pour un monstre), j'ai inclut ceci (c'est qd ce monstre meurt que QUETE devient = à 2) : NWScript :
#include "x0_i0_spawncond" void main() { int nClass = GetLevelByClass(CLASS_TYPE_COMMONER); int nAlign = GetAlignmentGoodEvil(OBJECT_SELF); //Inclusion if(GetLocalInt(GetPCSpeaker(), "QUETE") == 1) { SetLocalInt(GetPCSpeaker(), "QUETE", 2); } //Fin d'Inclusion if(nClass > 0 && (nAlign == ALIGNMENT_GOOD || nAlign == ALIGNMENT_NEUTRAL)) { object oKiller = GetLastKiller(); AdjustAlignment(oKiller, ALIGNMENT_EVIL, 5); } SpeakString("NW_I_AM_DEAD", TALKVOLUME_SILENT_TALK); SpeakString("NW_ATTACK_MY_TARGET", TALKVOLUME_SILENT_TALK); if(GetSpawnInCondition(NW_FLAG_DEATH_EVENT)) { SignalEvent(OBJECT_SELF, EventUserDefined(1007)); } int nQuete = GetLocalInt(GetPCSpeaker(), "QUETE"); //Ajout de ActionSpeak ActionSpeakString(IntToString(nQuete)); //Fin Ajout } ==> J'obtient 0 au lieu de la valeur attendue 2, alors que puisque dans mon dialogue initiale avec le NPC QUETE est initialisée à 1 puisque je ne peut plus choisir cette option dans les dialogues. EDIT de finipe : pense à utiliser les balises de code pour tes scripts, sinon on comprend rien |
Revenir en haut | |
finipe Grand Sage du Conseil Messages: 519 Localisation: Nantes |
Donne plus de précision et de manière plus claire, car il est évident que tu as fait une erreur quelquepart... vérifie bien les erreurs habituelles :
- script dans action conséquente/condition d'utilisation ? - ordre des phrases dans le dialogue ? - égalité/inégalité de variable non exacte ? - ... Difficile de te dire d'où vient ton erreur avec ce que tu donnes comme indice. _________________ » 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 | |
whiteange Novice Messages: 11 |
Oki doki, désolé pour le peu d'inidce, alors je reprends
-Voici le dialogue pour la quête dans l'odre exacte et les conditions : Première partie (condition, consequence) NWScript :
int StartingConditional() { // Inspecter variables locales if(!(GetLocalInt(GetPCSpeaker(), "QUETE") == 2)) return FALSE; return TRUE; } NPC : Merci Jeune Aventurier. Voici votre récompense [FIN] NWScript :
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. (Suite du dialogue ) NPC : Bonjour Jeune aventurier, que puis je pour vous ? (Deuxième partie, condition pour le dialogue du PJ) NWScript :
int StartingConditional() { // Inspecter variables locales if(!(GetLocalInt(GetPCSpeaker(), "QUETE") != 1)) return FALSE; if(!(GetLocalInt(GetPCSpeaker(), "QUETE") != 2)) return FALSE; if(!(GetLocalInt(GetPCSpeaker(), "QUETE") != 3)) return FALSE; return TRUE; } PJ : Auriez vous une tache ? NPC : Oui, figure vous que .... [FIN] (Action conséquente ci dessous) NWScript :
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. (Suite dialogue) PJ : Ou suis je ? NPC : Blablablabla .... [FIN] ========== Je tue le monstre (voir script de mort du monstre plus haut) Je revient, et là rien. Merci de ton aide |
Revenir en haut | |
whiteange Novice Messages: 11 |
suite du post
Je vient de faire un test avec l'affichage des variables : Le NPC affiche à la fin de chaque dialogue la valeur de QUETE, elle se trouve toujours à 1 quand j'ai selectionne la quete a faire. Lorsque je tue le monstre, la variable est à 0 Lorsque je revient au NPC, la variable est à 1 Voilà Merci de votre aide. |
Revenir en haut | |
finipe Grand Sage du Conseil Messages: 519 Localisation: Nantes |
Bon alors déjà, dans ton script onDeath du monstre, essaye de remplacer les GetPCSpeaker() par des GetLastKiller()... Ton GetPCSPeaker ne renvoie à rien dans un script de onDeath, et donc il est normal qu'une fois le monstre tué, ta variable locale soit toujours à 1.
C'est une erreur bête et basique que je fais moi-même encore souvent, fais bien attention à ce qui définit l'objet porteur de ta variable. Pour être sûr de pas te tromper, mets la sur le module avec un GetModule(), comme ça c'est valable partout. _________________ » 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 | |
whiteange Novice Messages: 11 |
Tout d'abord merci Effectivement en mettant GetLastKiller celà fonctionne
Euh GetModule() ? si tu as le temps, explique moi ce que tu veut dire par là . Je suis un peu noob Sinon donc tout marche sauf que maintenant le NPC reste bloquer sur le dialogue "Merci ...", alors qu'il ne devrait plus le dire la seconde fois que je l'interroge Enfin bon je vais chercher le pourquoi du comment, merci encore |
Revenir en haut | |
whiteange Novice Messages: 11 |
Pour ceux que celà interesserait, voici la réponse :
Quand le NPC remercie, j'avais mis dans action conséquente QUETE à 3 ce qui faisait qu'il ne pourrait plus la faire, mais cette valeur n'était pas prise en compte et je restai à 2. J'ai donc rajouter, un dialogue PJ, qui lorsqu'il est sélectionné a pour action conséquente de mettre QUETE à 3. Et là celà fonctionne. Peut être y a t'il une solution plus simple, mais je ne voit pas laquelle. |
Revenir en haut | |
finipe Grand Sage du Conseil Messages: 519 Localisation: Nantes |
GetPCSpeaker() renvoie le joueur dans un script de conversation. Tu stockes donc dans ces cas là la valeur de ta variable locale sur l'objet joueur. Il est donc logique que pour récupérer la valeur de ta variable ensuite, il faut que tu la cherches sur le joueur : tout dépendra donc à quel endroit se situe ton script pour récupérer la valeur. Si c'est toujours dans une converstion, pas de problème, tu gardes GetPCSpeaker(). Par contre, si c'est sur un déclencheur par exemple, tu utiliseras plutôt GetEnteringObject(). Si c'est sur le onDeath d'une créature, tu utiliseras GetLastKiller(). Etc.
Mais tu peux stocker ta variable sur plein d'autres choses, et tout bêtement sur le module lui-même. Dans ce cas là, tu n'as qu'à utiliser un GetModule(), ça marche quelque soit l'endroit où tu l'utilises. L'endroit où tu stockes ta variable (le module, le joueur, un objet autre quelconque - placeable ou npc par ex. -) est à définir selon ce que tu veux faire et selon ton module. Si tu fais un module solo, stockes tes variables sur le module lui-même c'est plus simple. A partir du moment où tu as plusieurs joueurs, ça devient différent : selon que tu stockes sur le module ou sur le joueur, ta variable aura des conséquences différentes. Ca paraît tout bête, mais finalement ça a beaucoup d'implications, mais surtout d'avantages ! Une variable bien placée peut faire gagner un temps précieux _________________ » 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 | |
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