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 14:57:31
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 |
Khorgan Ecuyer Messages: 67 |
Bonjour,
Je suis nouveau dans NWN et pas vraiment doué pour les scripts J'essaye de me faire la main sur de petits modules pour voir ce que ça donne, et je cherche un script pouvant faire la chose suivante : On place un item particulier (qu'on va appeler A pour simplifier) dans un plaçable. Je voudrais qu'au bout d'un temps défini (une heure par exemple) cet item A soit transformé en un nouvel item B. Est-ce que c'est possible ? Si oui une âme généreuse pourrait-elle m'expliquer comment faire ? Merci d'avance |
Revenir en haut | |
Elandil2 Chevalier Messages: 97 Localisation: sur mon ordi loir-et-cher |
C'est tout a fait faisable !
C'est un script a mettre dans le OnClose d'un placeable. Il faut voir si l'item en question est dans le placeable. NWScript :
if(GetIsObjectValid(GetItemPossessedBy("TAG_DE_TON_OBJET",OBJECT_SELF))) { DelayCommand(3600.0,DestroyObject(GetObjectByTag("TAG_DE_TON_OBJET"))); DelayCommand(3600.0,CreateItemOnObject("Res/ref de ton nouvel objet",OBJECT_SELF)); } Et voila le travail. C'est une vesion simplifiée, je n'ai pas l'éditeur sous les yeux. _________________ Rejoignez nous sur notre forum Aelor, module en construction Vive Gimli |
Revenir en haut | |
Khorgan Ecuyer Messages: 67 |
Merci beaucoup
|
Revenir en haut | |
Khorgan Ecuyer Messages: 67 |
Oups j'ai oublié de demander une précision :
Si je place 2 objets A dans le placeable, est-ce qu'avec le même script ça va me donner automatiquement 2 objets B ? Encore merci |
Revenir en haut | |
Elandil2 Chevalier Messages: 97 Localisation: sur mon ordi loir-et-cher |
Non, si tu est pateint 10 minutes je te fait ça avec l'éditeur tout bô tout propre ...
_________________ Rejoignez nous sur notre forum Aelor, module en construction Vive Gimli |
Revenir en haut | |
Khorgan Ecuyer Messages: 67 |
Sans problème je suis patient (vu mon niveau en script il vaut mieux ! )
Merci de tes efforts |
Revenir en haut | |
Elandil2 Chevalier Messages: 97 Localisation: sur mon ordi loir-et-cher |
Voilou ! ca compile mais c'est a tester pour voir si ca te convient .. et biensur il faut le completer là iou je l'ai indiqué !
NWScript : /*---------------------------- ------------------------------ -----------------*\
| Creer un item a partir d'un autre dans un placeable au bout d'un certain | | Temps Cree par Gimli Oakenshield | \*-------------------------- ------------------------------ -------------------*/ void main() { object oPlaceable = OBJECT_SELF; string sTag = "***";// remplace les *** par le tag de ton objet object oItem = GetObjectByTag(sTag); string sResRef = "***"; // Remplace les *** par le res/ref de ton item a creer int iNb = GetItemStackSize(oItem); float fTime = 3600.0;//Ici met le temps en seconde a attendre (avec la virgule) if(iNb >= 0) { DelayCommand(fTime,SetItemStackSize(oItem,1)); DelayCommand(fTime,DestroyObject(oItem)); ActionWait(fTime); CreateItemOnObject(sResRef,oPlaceable,iNb); } } _________________ Rejoignez nous sur notre forum Aelor, module en construction Vive Gimli |
Revenir en haut | |
Khorgan Ecuyer Messages: 67 |
Mille merci !!!
Je crée mes 2 item (enfin j'essaye ^^) puis je teste ça |
Revenir en haut | |
Khorgan Ecuyer Messages: 67 |
Bon je viens de tester avec un timer de 10 sec et ça marche nickel
Merci beaucoup pour ta réponse aussi efficace que rapide A ton avis serait-il possible d'améliorer le script de façon à rendre le placeable vérouillé tant que le timer n'est pas arrivé au bout et/ou ajouter un effet visuel quand le timer se termine ? (oui oui je sais j'abuse ) |
Revenir en haut | |
Khorgan Ecuyer Messages: 67 |
Bon alors en fait j'ai un petit problème :
J'ai utilisé le script sur plusieurs placeables identiques (peut-être que le problème vient de là). Dans certains placeables l'item A ne disparait pas et je peux le récupérer dans mon inventaire (mais il disparait de mon inventaire au bout d'un moment). Ensuite l'item B continu de réapparaitre dans le placeable même si je ne rajoute pas d'item A. Voilà, si tu as une idée sur comment résoudre ça Merci d'avance |
Revenir en haut | |
Sith Vicious Grand Sage du Conseil Messages: 693 |
Si tu veux fermer le placeable pendant l'opération (et si on peut ni l'ouvrir ni le détruire) d'un coup ça devient plus simple.
Place ça dans le OnClose du placeable : NWScript :
void main() { string sTag = "TAG de l'item A"; SetLocked(OBJECT_SELF,TRUE); object oItem = GetFirstItemInInventory(OBJECT_SELF); float fDelay = 3600.0; effect eVis = EffectVisualEffect(VFX_FNF_IMPLOSION); //un petit effet visuel qui pete pour la forme while (GetIsObjectValid(oItem)) { if (GetTag(oItem)==sTag) { DestroyObject(oItem); CreateItemOnObject("resref de l'item B",OBJECT_SELF); } oItem = GetNextItemInInventory(OBJECT_SELF); } DelayCommand(fDelay,SetLocked(OBJECT_SELF,FALSE)); DelayCommand(fDelay+0.5;ApplyEffectToObject(DURATION_TYPE_INSTANT,eVis,OBJECT_SELF)); } J'ai ni testé ni compilé, y a peut-être des fautes mais bon, l'idée est là. En fait si le truc est fermé y a pas à s'embeter, on change tout de suite l'item et quand on peut le rouvrir ô miracle, un item B tout neuf ! Par contre si tu veux laisser le coffre ouvert, c'est beaucoup plus compliqué, tout a fait faisable aussi, mais ça demande plus de trucs. |
Revenir en haut | |
Khorgan Ecuyer Messages: 67 |
Ok je vais tester ça ^^
En fait je pense que c'est mieux si le placeable reste verrouiller une fois l'item A déposé dedans donc ça devrait convenir pil poil Donc merci à toi aussi |
Revenir en haut | |
Khorgan Ecuyer Messages: 67 |
Alors, je viens de tester ton script :
1) le placeable ne se lock pas, je peux l'ouvrir à nouveau juste apèrs avoir mis l'item A dedans. 2) comme avec le script précédant, une fois l'item A mis dans le placeable, il suffit d'ouvrir/fermer/ouvrir etc.. celui-ci pour qu'à chaque fois un nouvel item B apparaisse. 3) sniff j'ai pas eu droit à l'effet visuel Est-ce que le fait d'utiliser le même placeable plusieurs fois (en fait j'ai 24 occurences du même placeable l'un à côté de l'autre, et j'ai le script sur chacune des occurences, je place donc un item A dans chacun d'entre eux) peut avoir une influence ? (il faut peut-être donner des noms différents à chaque occurence, ou quelque chose dans le genre ?). En tout cas merci de m'aider |
Revenir en haut | |
Sith Vicious Grand Sage du Conseil Messages: 693 |
Tu dors jamais non plus toi ?
Je regarde ça je te dis |
Revenir en haut | |
Sith Vicious Grand Sage du Conseil Messages: 693 |
Bon ça a l'air de marcher
avec ça : NWScript :
void main() { string sTag = "Tag item A"; object oItem = GetFirstItemInInventory(OBJECT_SELF); float fDelay = 10.0; effect eVis = EffectVisualEffect(VFX_FNF_IMPLOSION); //un petit effet visuel qui pete pour la forme int bItemInside = FALSE; while (GetIsObjectValid(oItem)) { if (GetTag(oItem)==sTag) { DestroyObject(oItem); bItemInside = TRUE; } oItem = GetNextItemInInventory(OBJECT_SELF); } if (bItemInside) { SetLocked(OBJECT_SELF,TRUE); DelayCommand(fDelay,SetLocked(OBJECT_SELF,FALSE)); DelayCommand(fDelay+0.5,ApplyEffectToObject(DURATION_TYPE_INSTANT,eVis,OBJECT_SELF)); CreateItemOnObject("resref item B",OBJECT_SELF); } } J'ai pas pigé, si je mets la création de l'item dans le while, je me retrouve avec le coffre blindé de l'item B, quelqu'un peut m'expliquer ? Enfin sinon je crois que ça marche, mais c'est bizare si avant il se lockait pas, j'ai pas eu ce problème (a la limite si ça te le refait coche la case "peut être reverouillé" a tout hasard) |
Revenir en haut | |
Khorgan Ecuyer Messages: 67 |
Si si je dors... mais pas la nuit
Ok je vais tester ça Et encore merci |
Revenir en haut | |
Khorgan Ecuyer Messages: 67 |
Bon je viens de tester et... comment dire.... c'est... parfait !!
Mille merci ça marche nickel, le placeable est bien verrouillé, la transformation se passe impec, l'effet est là et je n'ai plus le problème de réapparition d'item B à chaque ouverture ^^ Je vais juste changé l'effet pour essayer de trouver quelque chose qui corresponde un peu plus à mon histoire, mais sinon c'est exactement ce que je voulais Bon ben je redis merci car vraiment je suis épaté de l'accueil et des réponses que j'ai eu pour mon premier post sur ce forum |
Revenir en haut | |
Khorgan Ecuyer Messages: 67 |
Bonjour,
Je voudrais savoir si il est possible d'améliorer le script de Sith ci-dessus. En effet ce script fonctionne très bien mais je souhaiterais compliquer un peu l'affaire : Je voudrais que l'item transformé dépendent de l'item mis à la base, je m'explique : Actuellement avec ce script, je mets un item A dans un palceable, et il se transforme en item B. Moi je voudrais savoir si il est possible que, en mettant un item A il se transforme en item B, ET si je mets un item C dans le même placeable celui-ci se transforme en un item D. En fait je souhaiterais pouvoir faire 5 transformations différentes sur le même placeable : A => B C => D E => F G => H I => J J'ai essayé de bidouiller le script de Sith dans tout les sens mais je n'ai abouti à rien Quoique je fasse, ça fonctionne pour la transformation de A en B, mais ça ignore le reste Donc si quelqu'un a une idée sur comment faire.... ^^ Merci d'avance |
Revenir en haut | |
Enki Légende vivante Messages: 432 |
Bonsoir Khorgan,
n'étant pas trés calé (en fait je suis même mauvais) en ce qui concerne les boucles, j'ai pris ta question comme un défi technique. En sorte que j'y ai passé cinq heures, pour arriver malheureusement à un résultat très moyen. Je me suis largement inspiré du script de Sith Vicious, en le modifiant un peu. Le script suivant te permet de placer soit un objet a ou c ou e ou g ou i dans un coffre et d'avoir les objets correspondants (b,d,f,h,j), soit plusieurs objets identiques (ex: 5 "a") et d'avoir en retour 5 objets "b". Mais si tu mets 2 "a" et "3" c par exemple, tu n'auras que 3 "d" en échange. et les "a" auront disparus. C'est le mieux que je puisse faire dans l'état actuel de mes connaissances en script concernant les boucles. Voilà lê script : NWScript :
void DestroyAllObject(object oDestroy) { object oItem = GetFirstItemInInventory(OBJECT_SELF); while(GetIsObjectValid(oItem)) { DestroyObject(oItem); oItem = GetNextItemInInventory(OBJECT_SELF); } } #include "nw_i0_plot" void main() { string sTag = "a"; string sTag01 = "c"; string sTag02 = "e"; string sTag03 = "g"; string sTag04 = "i"; object oItem = GetFirstItemInInventory(OBJECT_SELF); float fDelay = 3.0; effect eVis = EffectVisualEffect(VFX_FNF_IMPLOSION); //un petit effet visuel qui pete pour la forme int nItem=GetNumItems(OBJECT_SELF,sTag); int nItem01=GetNumItems(OBJECT_SELF,sTag01); int nItem02=GetNumItems(OBJECT_SELF,sTag02); int nItem03=GetNumItems(OBJECT_SELF,sTag03); int nItem04=GetNumItems(OBJECT_SELF,sTag04); while(oItem!=OBJECT_INVALID) { if (GetTag(oItem) == sTag ) { DestroyAllObject(oItem); int i; for (i = 0; i < nItem; i++) { SetLocked(OBJECT_SELF,TRUE); DelayCommand(fDelay,SetLocked(OBJECT_SELF,FALSE)); DelayCommand(fDelay+0.5,ApplyEffectToObject(DURATION_TYPE_INSTANT,eVis,OBJECT_SELF)); CreateItemOnObject("b",OBJECT_SELF,nItem); } //----------fin du for /////// } //----------fin du if /////// else if (GetTag(oItem) == sTag01 ) { DestroyAllObject(oItem); int i; for (i = 0; i < nItem01; i++) { SetLocked(OBJECT_SELF,TRUE); DelayCommand(fDelay,SetLocked(OBJECT_SELF,FALSE)); DelayCommand(fDelay+0.5,ApplyEffectToObject(DURATION_TYPE_INSTANT,eVis,OBJECT_SELF)); CreateItemOnObject("d",OBJECT_SELF,nItem01); } //----------fin du for /////// } //----------fin du if /////// else if (GetTag(oItem) == sTag02 ) { DestroyAllObject(oItem); int i; for (i = 0; i < nItem02; i++) { SetLocked(OBJECT_SELF,TRUE); DelayCommand(fDelay,SetLocked(OBJECT_SELF,FALSE)); DelayCommand(fDelay+0.5,ApplyEffectToObject(DURATION_TYPE_INSTANT,eVis,OBJECT_SELF)); CreateItemOnObject("f",OBJECT_SELF,nItem02); } //----------fin du for /////// } //----------fin du if /////// else if (GetTag(oItem) == sTag03 ) { DestroyAllObject(oItem); int i; for (i = 0; i < nItem03; i++) { SetLocked(OBJECT_SELF,TRUE); DelayCommand(fDelay,SetLocked(OBJECT_SELF,FALSE)); DelayCommand(fDelay+0.5,ApplyEffectToObject(DURATION_TYPE_INSTANT,eVis,OBJECT_SELF)); CreateItemOnObject("h",OBJECT_SELF,nItem03); } //----------fin du for /////// } //----------fin du if /////// else if (GetTag(oItem) == sTag04 ) { DestroyAllObject(oItem); int i; for (i = 0; i < nItem04; i++) { SetLocked(OBJECT_SELF,TRUE); DelayCommand(fDelay,SetLocked(OBJECT_SELF,FALSE)); DelayCommand(fDelay+0.5,ApplyEffectToObject(DURATION_TYPE_INSTANT,eVis,OBJECT_SELF)); CreateItemOnObject("j",OBJECT_SELF,nItem04); } //----------fin du for /////// } //----------fin du if /////// oItem = GetNextItemInInventory(OBJECT_SELF); // sans le break, il plante : d'un il en fait 6 // break; } //----------fin du While /////// } //----------fin du script /////// Si quelqu'un peut l'améliorer, je suis intéressé ! A bientôt ! |
Revenir en haut | |
Khorgan Ecuyer Messages: 67 |
Enki : j'ai testé ton script et il fonctionne nickel
Il y a juste un petit truc bizarre : si je mets 1 item A, ça me donne 1 item B Mais si je mets plus d'un item A le résultat n'est pas proportionnel : par exemple si je mets 3 item A ça va me donner 5 item B Mais en fait... ça m'arrange ^^ (ça convient bien niveau rp à ce que je veux en faire donc c'est top ) Niveau amélioration il y a une chose qui m'intéresserai, mais là ça devient compliqué je pense : Si je mets un item A, il se transforme en item B (comme actuellement). Mais si je mets un item A + un item C (par exemple) et bien ça se transforme en un item Z ^^ Enfin bon, c'est juste une idée hein ^^ En tout cas merci, pis pour ton côté "très mauvais" en ce qui concerne les boucles ben... j'espère qu'un jour j'arriverai à être aussi mauvais que toi lol, ça voudrait dire que j'ai beaucoup progressé |
Revenir en haut | |
Enki Légende vivante Messages: 432 |
Salut Khorgan !
Merci pour les compliments, en fait AVANT de faire ton script j'étais nul en boucle, maintenant je commence un peu à comprendre ! Pour le bug je comprends pas, car dans mon module de émo il n'apparait pas. Pour faire un item "Z" avec deux items différents A et C par exemple, c'est possible et je crois pas trop compliqué. Il faut rajouter une condition au début du genre s'il y a UN item "A" ET UN item "C", alors etc... Je vais en faire une de suite sans la tester, et tu me diras si cela marche. NWScript :
if (nItem==1 && nItem01==1) { DestroyAllObject(oItem); SetLocked(OBJECT_SELF,TRUE); DelayCommand(fDelay,SetLocked(OBJECT_SELF,FALSE)); DelayCommand(fDelay+0.5,ApplyEffectToObject(DURATION_TYPE_INSTANT,eVis,OBJECT_SELF)); CreateItemOnObject("z",OBJECT_SELF,nItem); } //----------fin du if /////// Ce script se met directement en dessous de : 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. il ne faut surtout pas que tu oublies de transformer : 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. en : 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. Voilà à bientôt ! |
Revenir en haut | |
Khorgan Ecuyer Messages: 67 |
Merci, je teste ça dès que je peux (mais bon il faut que je crée les item, que je décide précisément quelle association d'item donne quel résultat, donc il va me falloir un peu de temps )
|
Revenir en haut | |
Ivellios Légende vivante Messages: 447 Localisation: Poitiers |
Tu peux utiliser ça aussi, ou du moins t'en inspirer.
_________________ Scripts, systèmes, fonctions,... c'est par ici... Pyjama pour castor, une vocation, un avenir sûr |
Revenir en haut | |
Khorgan Ecuyer Messages: 67 |
Ivellios a écrit : Tu peux utiliser ça aussi, ou du moins t'en inspirer. Effectivement ça à l'air pas mal du tout
Merci |
Revenir en haut | |
Khorgan Ecuyer Messages: 67 |
Ivelios : j'ai testé le script donné sur JOL et effectivement il fonctionne très bien et permet créer ses propres recettes très facilement (même moi j'ai compris du premier coup, c'est pour dire ).
Par contre il ne lock pas le placeable et n'as pas d'effet visuel mais je pense que c'est adaptable (heu j'ai pas essayer mais je pense que quelqu'un s'y connaissant un peu en script devrait pouvoir le faire). Par contre son gros désavantage (vu l'utilisation que je veux en faire) est le suivant : il fabrique les item un par un. Par exemple si je lui demande de transformer des item A en item B, que je mets 5 item A dans le placeable, quand je l'ouvre à nouveau j'aurai 4 item A et un item B. Il me faudrat l'ouvrir et le fermer 5 fois de suite pour arriver à avoir mes 5 item B. Problème que je n'ai pas avec les script ci-dessus Par contre pour le script d'Enki (je n'ai pas encore tester les "nouvelles recettes" utilisant 2 item à transformer en un 3eme) à propos du nombre d'item B qui varie suivant le nombre d'item A (voir mes post précédent) : J'utilise le script à 2 endroits différents pour 2 utilisations différentes et j'ai remarqué une chose : quand les item B sont des item "non stackable" alors 5 item A me donne invariablement 5 item B. Par contre quand les item B sont stackable, alors 1 item A donne 1 item B, 2 item A donnent 4 item B, 3 item A donnent 6 item B, etc.. Par contre... je ne sais pas pourquoi |
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