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 12:50:23
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 |
Kustom Novice Messages: 8 |
Hello !
Après une recherche effectuée, je me lance... J'espere ne pas ouvrir le clone d'un autre topic. Je me suis lancé ds la création d'un monde persistant il n'y a pas longtemps et je me suis heurté à un problème. Comment faire pour qu'une quête soit faisable une seule fois par personnage ? Je trouve assez illogique que de pouvoir tuer "mégamob" 20 fois pour gagner 20 fois le même buttin que donne un PNJ. Voilà si qqn avait la réponse, ça m'arrangerait vraiment vu ma carence niveau scripts... :s |
Revenir en haut | |
Darkavanger Grand Chevalier Messages: 114 |
A mon avit, ça se voit au niveau des variables,
Lors de la demande de quête, tu mets une variable à 1 Lorsque la quête est finie, la varialbe passe à 2 Et lorsque le joueur reparle au PnJ qui propose la quête, on fait un test, pour voir à combien est la variable, si elle est à 2, on passe à autre chose. Je suis peut être pas super clair, mais regarde ICI y a un bon cour sur les varaibles. Reste à voir si tu veux qu'elle résiste à un reboot, là je sais plus comment qu'on fait. J'éspère avoir été clair et avoir répondu à ta question. A + et bon courage pour ton mod |
Revenir en haut | |
Kustom Novice Messages: 8 |
Merci de ta reponse rapide.
C'est exactement ca le problème, faut que ca résiste a un reboot... Quant au cours je l'ai lu attentivement (ca veut pas dire que j'ai tt pigé non + ) et je remercie les auteurs sur ces petits tuto ma foi, très utiles ! |
Revenir en haut | |
Adam Reith Ecuyer Messages: 49 |
Tu peux attribuer des variables persistantes avec la base de données de bioware,
Cherche du coté de SetCampInt() et GetCampInt() |
Revenir en haut | |
Kustom Novice Messages: 8 |
En bon francais ca donne quoi?
|
Revenir en haut | |
Mars Seigneur Messages: 199 |
Pour attribuer une variable persistante tu utilise ça:
Code : void main ()
{ object oJoueur = GetLastSpeaker(); SetCampaignInt("nom de la campagne", "nom de la variable", valeur, oJoueur); } Et pour vérifier une valeur: Code : int StartingConditional()
{ object oJoueur = GetLastSpeaker(); int iVariable = GetCampaignInt ("nom de la campagne", "nom de la variable", oJoueur); if (iVariable == 0) // tu peux changer le 0 par ce que tu veux return TRUE; return FALSE; } Bon comme en se moment je n'ai pas aurora sous la main il peut y avoir une faute de frappe. |
Revenir en haut | |
Kustom Novice Messages: 8 |
Merci de cette approche
En fait ca donne : -Premiere partie de la conversation pour PNJ --Premiere partie de la conversation pour PJ ----PNJ propose quete ------PJ accepte (quete ajoutee dans journal, fin conversation) ------PJ refuse (fin conversation) -2ème partie de la conversation pour PNJ si quête faite (detecte un objet ds l'inventaire) --2ème partie de la conversation pour PJ si quête faite (detecte un objet ds l'inventaire) ---Fin de la conversation pour PJ si quête non faite (pas d'objet dans inventaire --PNJ prend l'objet dans l'inventaire et donne qqchose en echange, fin de conversation ---Fin de la conversation pour PJ -3ème partie de la conversation pour PNJ (plus rien à dire) --32ème partie de la conversation pour PJ (plus rien à dire), fin. Voilà en gros la plan ; mais ou mettre la variable persistante ? Non ce n'est pas casse tete Ensuite, les scripts : Dites moi si je me trompe Code : void main ()
{ object oJoueur = GetLastSpeaker(); SetCampaignInt("nom de la campagne", "nom de la variable", valeur, oJoueur); } C'est a placer dans "Action conséquente" ? A quoi correspond "nom de la campagne" ? "Nom de la variable" correspond au nom de l'autre script (celui en condition d'execution) ? En gros, voila ce que ca donne d'apres ce que j'ai pu comprendre -Premiere partie de la conversation pour PNJ --Premiere partie de la conversation pour PJ ----PNJ propose quete ------PJ accepte (quete ajoutee dans journal, fin conversation) ------PJ refuse (fin conversation) -2ème partie de la conversation pour PNJ si quête faite (detecte un objet ds l'inventaire)(Je case les variables ici, dans actions consequentes et condition d'execution) --2ème partie de la conversation pour PJ si quête faite (detecte un objet ds l'inventaire)(Si la variable est égale a 0 le PJ a deja fait la quete, fin de conversation on va pas plus loin dans la quete) --2ème partie de la conversation pour PJ si quête faite (detecte un objet ds l'inventaire) (Si la variable est égale a 1, donc le PJ n'a pas encore fait la quete, on va pas plus loin dans la quete) ---Fin de la conversation pour PJ si quête non faite (pas d'objet dans inventaire) ---Fin de la conversation pour PJ si variable egale a 0 --PNJ prend l'objet dans l'inventaire et donne qqchose en echange, fin de conversation ---Fin de la conversation pour PJ -3ème partie de la conversation pour PNJ (plus rien à dire) --3ème partie de la conversation pour PJ (plus rien à dire), fin. Desole pour l'embrouille mais je fais de mon mieux |
Revenir en haut | |
Mars Seigneur Messages: 199 |
Bon alors je vais te donner un exemple pour une quete simple, du style va chercher l'objet x et ramene le au PNJ.
Lorsque le PNJ propose la quete et que le PJ accepte on fixe une variable sur le PJ. PNJ: Bonjour, vous pouvez me ramener une fraise. -PJ:Oui Biensur.(ici on fixe une variable persistante "script 1") -PJ:Non pas le temps. Script1: Code : void main ()
{ object oJoueur = GetLastSpeaker(); SetCampaignInt("nom de la campagne", "nom de la variable", valeur, oJoueur); } Tu peux changer "nom de la campagne et nom de la variable par ce que tu veux, a toi de voir comment tu veux t'organiser. Ensuite pour que le PNJ demande au PJ si il a trouvé des fraises, on vérifie la valeur de la variable PNJ: Vous m'avez rapporté mes fraises ? (dans la condition d'execution on place le script 2) -PJ: Oui -PJ: Non Script 2: Code : int StartingConditional()
{ object oJoueur = GetLastSpeaker(); int iVariable = GetCampaignInt ("nom de la campagne", "nom de la variable", oJoueur); if (iVariable == 0) // tu peux changer le 0 par ce que tu veux return TRUE; return FALSE; } Voila avec ça tu devrais t'en sortir. bon courage. [Edit] Pense a placer corectement ton dialogue, puisque Aurora prend les phrases de haut en bas, il vérifie si il y a une condition et si elle est respecté si oui la phrase est lu. Je ne sais pas si je suis tres clair, je vais te donner un exemple. 1ere phrase du PNJ: Merci, je n'ai plus besoin de rien (si variable est égal a 100) 2eme phrase du PNJ: M'avez vous rapportés des fraises ? (si variable est égale à 50) Réponse PJ: -Oui* (on fixe la variable à 100) -Non (on fait rien) 3ème phrase du PNJ: Pouvez vous me rapporter des fraises ? Réponse PJ -Oui (On fixe la variable a 50) -Non (on fait rien) *Je te conseil de mettre dans la condition d'execution du oui une vérification dans l'inventaire pour que le PJ est bien la fraise sur lui. |
Revenir en haut | |
Kustom Novice Messages: 8 |
Merci Mars! Je pense avoir pigé
Mais il reste un petit probleme, en effet, le 1er script n'est pas compilé : NWScript :
void main () { object oJoueur = GetLastSpeaker(); SetCampaignInt("nom de la campagne", "nom de la variable", valeur, oJoueur); } Voila ce que l'editeur dit : Code : ERREUR : VARIABLE DEFINED WITHOUT TYPE
A cette ligne : 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. J'espere ne pas trop t'embeter avec cela |
Revenir en haut | |
Klemmth Seigneur Messages: 176 Localisation: france |
remplace valeur par un nombre, et met des noms à toi pour les valeurs entre ".
Et à ta place j'utiliserai GetPCSpeaker() au lieu de GetLastSpeaker() qui peut te renvoyer un PNJ au lieu du PJ. _________________ ... |
Revenir en haut | |
Kustom Novice Messages: 8 |
Un grand merci a Mars d'avoir tout fait a ma place et a Klemmth d'avoir cloturé ce script!
|
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