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 09:53:46
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 |
Djezebel Héros Messages: 252 |
Bonjour à tous,
Dans la série "j'ai des idées mais j'ai du mal à les appliquer", voici la "Boule de cristal". L'effet voulu est celui-ci : Un item "boulecristal" a une propriété actions 3 fois par jour. (jusque là, pas de souci). Maintenant, j'aimerais qu'une fois que le joueur possedant l'item dans son inventaire clique dessus, un dialogue s'affiche. (jusque-là, toujours pas de problème). Le dialogue affiché présenterait la liste des joueurs en ligne avec un texte et en choix possible chaque nom de joueur. (exemple : - Boule de Cristal : Sur quelle personne désirez-vous levez le voile ? - Joueur 1 - Joueur 2 - Joueur 3 ) Bien évidement, il faut qu'il y ait autant d'entrées qu'il y ait de joueurs en ligne. (là ça me pose un problème à dire vrai). Enfin, lorsqu'on clique sur le nom du joueur, un dialogue s'afficherait décrivant la zone où il se trouve (ça je pense pouvoir me débrouiller pour le faire). Quelqu'un a-t-il des idées ? Dernière édition par Djezebel le 03/05/2006 10:51:35; édité 4 fois
|
Revenir en haut | |
Ivellios Légende vivante Messages: 447 Localisation: Poitiers |
Une boucle sur les joueurs avec des Custom ?
_________________ Scripts, systèmes, fonctions,... c'est par ici... Pyjama pour castor, une vocation, un avenir sûr |
Revenir en haut | |
kiky.le.magnifique Homme très gay Messages: 907 Localisation: Camping de la nation martienne... |
Il faut faire une boucle while pour passer tous tes joueurs et stocker leur noms dans des CustomToken.
Pas le temps ni ne courage de te le faire, mais fouille de ce coté là quoi... _________________ http://perso.wanadoo.fr/kikitor | Deviant Art | www.VistaEntraide.com | CCLLSELFV! | D-lire_K | Viendez rêver au Pays des fées... | Ne taquinez pas l'admin! |
Revenir en haut | |
Djezebel Héros Messages: 252 |
Merci de vos réponses bien que j'aurais souhaité un peu plus de détails ^^
Je pense que je suis sur la bonne voie, mais je ne sais toujours pas comment mettre plusieurs token dans un dialogue... Je veux dire, est-ce que je dois faire toute une série de <CUSTOM3001> <CUSTOM3002> etc dans le dialogue ? N'y a-t-il pas un moyen de remplacer ça pour donner le nombre exacte de ligne en fonction du nombre de joueurs ? Autrement, le script qui pourrait être appliqué pourrait être celui-ci, il me semble (c'est la boucle pour les joueurs et mettre un token ... ) Je ne peux malheureusement pas tester me manquant la partie dialogue... NWScript :
void main() { object oPC = GetFirstPC() ; int nToken = 3000; while (GetIsObjectValid(oPC)) { string sPC = GetPCPlayerName(oPC); int nToken2 = nToken + 1; SetCustomToken(nToken2 , sPC); nToken = nToken2; oPC = GetNextPC(); } } Est-ce que c'est bon ? Je n'ai rien vu en recherche dans les token qui parlait de phrases ajoutées "spontanément" dans le dialogue... J'ai bien vu comment on peut faire un token et mettre une phrase à la place du <CUSTOMXXX> mais je n'ai pas trouvé comment créer le <CUSTOMXXXX1> ... etc ... Merci de votre attention. EDIT : J'ai créé un dialogue construit ainsi : - Sur qui désirez-vous des informations ? -- <CUSTOM3000> -- <CUSTOM3001> -- <CUSTOM3002> -- <CUSTOM3003> Dans le condition j'ai mis le script précédent et cela ne fonctionne pas... |
Revenir en haut | |
Argyl Grand Sage du Conseil Messages: 704 |
Il y a de grande chance que cela ne fonctionne pas puisque tu n'as pas de PC, essaies avec un scan de zone(s) et des PnJs.
Sinon, mets des conditions supplémentaires, genre si pas de PC, une phrase :"Les conditions pour une divination sereine ne sont pas réunies" |
Revenir en haut | |
Wololo Légende vivante Messages: 385 |
en fait j'avais déjà ce même type de dialogue sauf que je téléportai le joueur utilisant la boule de cristal (en lui collant l'insvisibilité de CutScene, et une immobilisation) dans la zone du joueur visé ..
le souçis était qu'il partageait les dégâts si il tombait sur un sort de zone .. j'avais utilisé des CUSTOM TOKENS et une boucle sur les joueurs (GetArea(oPJ)) _________________ vive les dumps et les livres ! Sanctuaire des Scripts |
Revenir en haut | |
Djezebel Héros Messages: 252 |
Bonjour à tous !
Ca se précise, bien que ce ne soit pas encore ça ^^ La boucle de PJ ne pose visiblement aucun souci (je teste en étant en mode joueur) et j'ai réussi à faire avancer la chose. Déjà, ma principale erreur avait été de faire un "void main" alors que c'était une condition d'execution de dialogue (donc StartingConditionnal). Ca a donc été modifié et ça "fonctionne". Le seul problème c'est que j'ai ceci : - Sur quelle personne désirez-vous des informations ? --<UNRECOGNIZED TOKEN> -- Djezebel --<UNRECOGNIZED TOKEN> --<UNRECOGNIZED TOKEN> Comment faire pour enlever les Unrecognized token quand on n'en a pas besoin ? Merci pour votre aide |
Revenir en haut | |
Harmelyo Chevalier Messages: 84 |
Ne peux tu pas faire un test avant de créer ton dialogue? Tu n'affichera un nombre d'options qu'égal au nombre de token valide.
Sinon peut être qu'avec un compteur incrémenter à chaque Token instancier... |
Revenir en haut | |
Wololo Légende vivante Messages: 385 |
tu mets des conditions d'affichage à chaque branche du dialogue (afficher la possibilité joueur 2 uniquement si joueur2 est different de OBJECT_INVALID)
_________________ vive les dumps et les livres ! Sanctuaire des Scripts |
Revenir en haut | |
Djezebel Héros Messages: 252 |
Auriez-vous des exemples plus précis (liens vers d'autres posts)? Car j'avoue que même avec vos explications, je reste assez perdue
|
Revenir en haut | |
lylver Héros Messages: 274 |
Schéma du dialogue, les scripts pré(condition) et post(action) sont entre parenthèses ()
Citation : <Racine> Que voulez vous faire? __Lever le voile. (pj_list) ____°Choisissez PJ. ______(pj_cond_custom) <CUSTOM3601> (pj_custom1) ______(pj_cond_custom) <CUSTOM3602> (pj_custom2) ______(pj_cond_custom) <CUSTOM3603> (pj_custom3) ______(pj_cond_custom) <CUSTOM3604> (pj_custom4) ______(pj_cond_custom) <CUSTOM3605> (pj_custom5) ______(pj_cond_custom) Autres. (pj_next) °lien vers Choisissez ______Retour. NWScript :
void main() { object oPC = GetPCSpeaker(); int nCount = 0; object oPJ = GetFirstPC(); while( GetIsObjectValid(oPJ) ){ DeleteLocalInt(oPJ,"PJ_LIST"); // il faut que l'utilisation du dialogue soit unique, sinon ajouter oPJ = GetNextPC(); } while( GetIsObjectValid(oPJ) && nCount < 5) { if( !GetIsDM(oPJ) && (oPJ!=oPC) ){ nCount++; SetCustomToken(3600+nCount, GetName(oPJ)); SetLocalObject(oPC, "PJ_CUSTOM"+IntToString(nCount), oPJ); SetLocalInt(oPJ,"PJ_LIST",TRUE); // marqueur } oPJ = GetNextPC(); } if (!nCount) { SetCustomToken(3601, "No PJ could be found."); SetLocalInt(oPC, "PJ_ITEM", 1); return; } if (GetIsObjectValid(oPJ)) { SetLocalInt(oPC, "PJ_MORE", nCount); nCount++; } SetLocalInt(oPC, "PJ_ITEM", nCount); } NWScript :
void main() { object oPC = GetPCSpeaker(); int nPJ = GetLocalInt(oPC, "PJ_MORE"); int nCount = 0; object oPJ = GetFirstPC(); while (GetIsObjectValid(oPJ) && nCount < 5) { if( !GetIsDM(oPJ) && (oPJ!=oPC) && !GetLocalInt(oPJ,"PJ_LIST") ){ nCount++; SetCustomToken(3600+nCount, GetName(oPJ)); SetLocalObject(oPC, "PJ_CUSTOM"+IntToString(nCount), oPJ); SetLocalInt(oPJ,"PJ_LIST",TRUE); // marqueur nPJ++; } oPJ = GetNextPC(); } if (GetIsObjectValid(oPJ)) { SetLocalInt(oPC, "PJ_MORE", nPJ); nCount++; } else DeleteLocalInt(oPC, "PJ_MORE"); SetLocalInt(oPC, "PJ_ITEM", nCount); } NWScript :
int StartingConditional() { object oPC = GetPCSpeaker(); int nCount = GetLocalInt(oPC, "PJ_ITEM"); if( nCount ){ SetLocalInt(oPC, "PJ_ITEM", --nCount); return TRUE; } return FALSE; } Il vous reste à utiliser les variables : NWScript :
int nCount = GetLocalInt(oPC, "PJ_ITEM"); object oPJ = GetLocalObject(oPC, "PJ_CUSTOM"+IntToString(nCount)); dans les scripts pj_custom(i) à tester/débugger sur l'éditeur : j'ai fait en direct. |
Revenir en haut | |
Djezebel Héros Messages: 252 |
Alors là, je dis chapeau Lylver
J'ai testé, ça a bien compilé mais comme je l'ai testé en solo, ça ne donnait pas grand chose. J'attends de pouvoir tester en multi pour te dire le résultat En tout cas merci grandement ! |
Revenir en haut | |
Djezebel Héros Messages: 252 |
Après teste, ça ne fonctionne malheureusement pas.
Il s'avère qu'il y avait deux joueurs, et que l'objet disait qu'il n'y en avait aucun. Donc aucune création de branche ni même de nom. Une idée ? (j'ai repris le script tel quel) |
Revenir en haut | |
lylver Héros Messages: 274 |
Je te regarde ça ce week-end, je vais en avoir besoin donc ca finira par être au point.
|
Revenir en haut | |
Djezebel Héros Messages: 252 |
Entendu, merci beaucoup
|
Revenir en haut | |
Fanboy Acolyte Messages: 23 |
je pense qu'apré la premiere boucle du premier script
il faut rajouter : oPJ = GetFristPC(); ca ma sauté au yeu en lisant le script, la premier boucle se faisant oPJ ciblera frocément un objet invalide...pour sortir de la 1ere boucle... ce faisant ca rentre pas dans la 2eme boucle.. et tu a du recevoir comme message : "No PJ could be found" _________________ Kikoo |
Revenir en haut | |
kiky.le.magnifique Homme très gay Messages: 907 Localisation: Camping de la nation martienne... |
(fausse manip désolé... )
_________________ http://perso.wanadoo.fr/kikitor | Deviant Art | www.VistaEntraide.com | CCLLSELFV! | D-lire_K | Viendez rêver au Pays des fées... | Ne taquinez pas l'admin! |
Revenir en haut | |
Viduc de Papironda Grand Chevalier Messages: 119 |
|
Revenir en haut | |
Black Knight Grand Maître Chanteur du Conseil Messages: 1031 Localisation: Fin fond du trou du cul du monde |
Salut.
Voila, alors j'ai médité sur ce script pour pouvoir savoir comment le mettre en place, et je pense avoir réussit, bien sur, je ne l'ai pas testé sur le net, puisque mon Routeur me bloque encore, donc si quelqu'un pouvait le testé cela serait gentil de ca part. On va prendre mon cas : 1) Placer un placeable quelque part ou vous voulez. 2) Mettez un dialogue dans ce placeable de ce genre : "Bonjour, voici la liste des joueurs connectés en ce moment même. _<CUSTOM9001> _<CUSTOM9002> _Etc.. jusqu'au maximum de votre serveur (moi 32)" 3) Placez ce script dans le OnUsed du placeable : NWScript :
void main() { object oPC = GetLastUsedBy(); //... object oPJ = GetFirstPC(); //... int nCustom = 9000; //... ActionWait(1.0); while(oPJ != OBJECT_INVALID && oPJ != oPC)//... { SetLocalInt(GetModule(), "PJ_LIST", GetLocalInt(GetModule(), "PJ_LIST")+1);//On met une variable pour dire combien il y a de joueur dans le serveur } int nPlayer = GetLocalInt(GetModule(), "PJ_LIST");//... int nMax = 0;//... ActionWait(1.0);//... while(oPJ != OBJECT_INVALID && oPJ != oPC && nMax < nPlayer) { nCustom++;//... nMax++; //... SetCustomToken(nCustom, GetName(oPJ)+" ("+GetPCPlayerName(oPJ)+")"); nCustom = nCustom;//... nMax = nMax; //... } ActionWait(1.0);//... nMax = nMax;//... nCustom = nCustom;//... while(nMax <= 31) { nCustom++;//... nMax++;//... SetCustomToken(nCustom, "Place non prise");//Ici on dit que il n'y a plus de joueur, donc la place est dispo nCustom = nCustom;//... nMax = nMax;//... } ActionWait(2.0);//... ActionStartConversation(oPC, "", TRUE);//On active le dialoque } Tout est expliqué en vert. Ensuite allez jouer et normalement ca fonctionne. Bien sur, comme vous l'avez remarquer, le script ne vous prend pas en compte, donc, dans les Customs vous vous arreterez a votre maximum-1, donc moi au lieu de 32, je mets 31. Voila _________________ [http] |
Revenir en haut | |
PetitPrince Super-Mouton Messages: 2043 Localisation: Asteroïde B-612 actuellement crashé en Suisse |
Rien à voir: pourquoi tu commentes pour ne rien dire (chuis juste curieux, c'tout )
Rien à voir²: Salut Djezebel ! Comment ça va depuis Cendrelune ? _________________ b-612.yi.org (chez moi) | tetrisconcept.com (LE site sur Tetris) | Grospixels (c'était mieux avant) | Geekzone (for and by crazy geeks) Securom, ça suxe |
Revenir en haut | |
Djezebel Héros Messages: 252 |
Salut !
Blacknight => J'ai testé et hélas ça n'a pas fonctionné (too many instructions). Mais merci pour cette initiative Petit Prince : Je t'ai répondu en mp... Et si tu mettais ta main à la pâte pour résoudre ce souci hein ? ^^ |
Revenir en haut | |
Black Knight Grand Maître Chanteur du Conseil Messages: 1031 Localisation: Fin fond du trou du cul du monde |
Tu la essayé avec deux joueurs le script ou pas? car moi j'ai aucun problème sur le "Too Many instruction". Aurais tu changer quelque chose dans le script par hazard?
_________________ [http] |
Revenir en haut | |
lylver Héros Messages: 274 |
2 erreurs corrigées
NWScript :
void main() { object oPC = GetPCSpeaker(); int nCount = 0; object oPJ = GetFirstPC(); while( GetIsObjectValid(oPJ) ){ DeleteLocalInt(oPJ,"PJ_LIST"); // il faut que l'utilisation du dialogue soit unique, sinon ajouter oPJ = GetNextPC(); } oPJ = GetFirstPC(); while( GetIsObjectValid(oPJ) && nCount < 5) { if( !GetIsDM(oPJ) && (oPJ!=oPC) ){ nCount++; SetCustomToken(3600+nCount, GetName(oPJ)); SetLocalObject(oPC, "PJ_CUSTOM"+IntToString(nCount), oPJ); SetLocalInt(oPJ,"PJ_LIST",TRUE); // marqueur } oPJ = GetNextPC(); } if (nCount == 0) { // arf arf ... SetCustomToken(3601, "No PJ could be found."); SetLocalInt(oPC, "PJ_ITEM", 1); return; } if (GetIsObjectValid(oPJ)) { SetLocalInt(oPC, "PJ_MORE", nCount); nCount++; } SetLocalInt(oPC, "PJ_ITEM", nCount); } Je teste en multi-player dés le prochain reboot du TNB Merci à PetitPrince d'avoir rappelé de pas flooder (un post ca doit apporter quelque chose à la discussion, remerciements compris et appréciés) ... autre chose, je rappelle que la pub sauvage et les expressions vulgaires ... -------------- Validé à 7 joueurs -------------- Pour exploiter, on ne peut pas utiliser PJ_ITEM, il est automatiquement décrémenté, il faut mettre une valeur fixe de 1 à 5 dans les scripts pj_custom(i) Dernière édition par lylver le 04/05/2006 11:07:57; édité 4 fois
|
Revenir en haut | |
Sith Vicious Grand Sage du Conseil Messages: 693 |
Black Knight a écrit : NWScript :
void main() { object oPC = GetLastUsedBy(); //... object oPJ = GetFirstPC(); //... int nCustom = 9000; //... ActionWait(1.0); while(oPJ != OBJECT_INVALID && oPJ != oPC) { SetLocalInt(GetModule(), "PJ_LIST", GetLocalInt(GetModule(), "PJ_LIST")+1);//On met une variable pour dire combien il y a de joueur dans le serveur } int nPlayer = GetLocalInt(GetModule(), "PJ_LIST");//... int nMax = 0;//... ActionWait(1.0);//... while(oPJ != OBJECT_INVALID && oPJ != oPC && nMax < nPlayer) { nCustom++;//... nMax++; //... SetCustomToken(nCustom, GetName(oPJ)+" ("+GetPCPlayerName(oPJ)+")"); nCustom = nCustom;//... nMax = nMax; //... } ActionWait(1.0);//... nMax = nMax;//... nCustom = nCustom;//... while(nMax <= 31) { nCustom++;//... nMax++;//... SetCustomToken(nCustom, "Place non prise");//Ici on dit que il n'y a plus de joueur, donc la place est dispo nCustom = nCustom;//... nMax = nMax;//... } ActionWait(2.0);//... ActionStartConversation(oPC, "", TRUE);//On active le dialoque } Et les actionWait servent quasi à rien, autant mettre un delayCommand de 5.0 avant le départ du dialogue (ou en mettre un seul de 5 secondes) |
Revenir en haut | |
Black Knight Grand Maître Chanteur du Conseil Messages: 1031 Localisation: Fin fond du trou du cul du monde |
Je n'ai pas mit ces lignes pour faire jolie, j'ai du les mettre car sinon le serveur fesait un crash. Et normalement si, le serveur trouvera tout les joueurs, puisque dans mon premier While je dit combien il y en a. Et les oPC != oPj c'est pour évité a ce que on ce retrouve dans la liste.
_________________ [http] |
Revenir en haut | |
La Bibliothèque de Neverwinter Nights Index du Forum »
La Bibliothèque Binaire du NWScript - Neverwinter Nights
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