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 19:19:28
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 |
burning-angel Novice Messages: 10 |
Posté le : 29/06/2007 16:04:00 Sujet du message : une serveuse dans une auberge, avec WP, pauses et dialogues
Salut à tous
Je viens de créé un script pour une serveuse dans une auberge pour y mettre un peu de vie avec 20 WP et quelques pseudos dialogues : NWScript :
object oCurrent = GetObjectByTag( "Serveuse" ); void GoToWaypoint( int iNumber = 1 ) { string sNumber = IntToString(iNumber); object oWp = GetObjectByTag( "lcda_cerfgris_wp" + sNumber ); ActionForceMoveToObject( oWp, FALSE ); if(iNumber == 1) { ActionSpeakString("Puis-je vous servir quelques chose ?"); ActionWait(6.0); ActionSpeakString("Entendu !"); ActionWait(0.5); } if(iNumber == 4) { ActionSpeakString("Que puis-je vous servir ?"); ActionWait(6.0); ActionSpeakString(""); ActionWait(0.5); } if(iNumber == 11) { ActionSpeakString(""); ActionWait(6.0); ActionSpeakString("Entendu !"); ActionWait(0.5); } if(iNumber == 16) { ActionSpeakString("Que puis-je vous servir ?"); ActionWait(6.0); ActionSpeakString(""); ActionWait(0.5); } if(iNumber == 3 || iNumber == 10 || iNumber == 15 || iNumber == 20) { ActionSpeakString("Et voila..."); ActionWait(8.0); } } void Patrol( int iWayPoints, int iTimes = 1, int iStart = 1 ) { // On decremente iTimes if ( iTimes > 0 ) iTimes--; int i = iStart; while ( i <= iWayPoints ) { GoToWaypoint( i ); i++; } // Si l'objet peut encore faire un tour... if ( iTimes != 0 ) Patrol( iWayPoints, iTimes, iStart ); else GoToWaypoint( iStart ); } void main() {Patrol( 20, 10 );} le problème : ELLE NE FAIT RIEN ! elle ne bouge même pas ! pourtant j ai mis ce script dans son OnSpawn mais rien... si je vire les lignes avec les "ActionSpeakString" elle marche comme prévu et marque bien les pauses... mais pourquoi le texte bloc le script ? d avance merci pour l aide. |
Revenir en haut | |
Mythyzyn Héros Messages: 292 Localisation: Lyncya |
Alors là, bonne question
Sinon, test le script en le mettant sur OnPercepted. Il marchera peut être et t'économisera qq ressources au passage (le PNJ n'a pas besoin d'agir si personne le voit vu que c'est pour mettre de l'animation). Tu peux même rajouter un contrôle dans ton script pour vérifier si il y a des PJs dans la zone. Si y'en a pas, elle s'arrête et reprendra son activité à la prochaine perception de PJ _________________ NwN2 - Lyncya 3 - La Guerre du Crystium |
Revenir en haut | |
Black Knight Grand Maître Chanteur du Conseil Messages: 1031 Localisation: Fin fond du trou du cul du monde |
C'est à cause de l'ActionSpeakString. Enfaite, ActionSpeakString renvoit donc sur l'action d'un objet, qui parlera. Le blême, c'est que tu mets ActionSpeakString comme ça ! Il faut pas.
AssignCommand(OBJECT_SELF, ActionSpeakString("")); Essaie ça, ça devrait fonctionner. BK _________________ [http] |
Revenir en haut | |
burning-angel Novice Messages: 10 |
Mythyzyn => malheureusement comme ca, elle recommancera son chemin du début a chaque fois, et ce n est pas souhaité
Black Knight => j ai testé, rien de plus, rien de moins, j ai toujours une statut bien immobile comme serveuse avez-vous d autres idees s ils vous plaient ? Dernière édition par burning-angel le 29/06/2007 19:03:08; édité 1 fois
|
Revenir en haut | |
Mythyzyn Héros Messages: 292 Localisation: Lyncya |
Sauf si tu sauvegardes en variable local sur elle même le dernier WP et que tu définis le suivant à la reprise (Constante ?).
Après c'est à toi de voir _________________ NwN2 - Lyncya 3 - La Guerre du Crystium |
Revenir en haut | |
burning-angel Novice Messages: 10 |
heu ? d accord ... mais tu modifirais le script comment alors ? parce que la je vois pas
|
Revenir en haut | |
Mythyzyn Héros Messages: 292 Localisation: Lyncya |
Je suis désolé mais en ce moment j'ai pas le temps de me plonger sur le script
Sauf si une âme charitable te fait ça, pour ma part il faudra attendre. J'ai lancé les idées de modification sans trop réfléchir à la façon de faire mais en sachant que c'est faisable _________________ NwN2 - Lyncya 3 - La Guerre du Crystium |
Revenir en haut | |
Black Knight Grand Maître Chanteur du Conseil Messages: 1031 Localisation: Fin fond du trou du cul du monde |
Enfaite, c'est assez simple:
On va prendre un exemple, ou la serveuse doit bouger à 4 endroits différent: Les Waypoints ont comme tag : 0_SERVEUSE_MOVE, 1_SERVEUSE_MOVE, 2_SERVEUSE_MOVE, 3_SERVEUSE_MOVE Grâce à un script, on va retrouver le chiffre se trouvant au début. Toutes les locals commencent à 0, c'est pour ça que nous avons un WP de tag 0. Bref, on va placer le script dans le OnHB de la demoiselle, et lui ordonner, par rapport à sa local, d'aller à un WP. Je t'aide vite fait à la construction du script, je ne suis plus sur NWN, et j'ai pas réellement temps d'ouvrir l'éditeur, donc ce sera juste un plan. NWScript :
void main() { int iWP = GetLocalInt(OBJECT_SELF, "Waypoint"); int iMaxWP = 4; int iNextWP = iWP+1; string sTag = "_SERVEUSE_MOVE"; //Petite astuces, voir plus bas. location lLoc = GetLocation(GetWaypointByTag(iWP)); //Script de movement SetLocalInt(OBJECT_SELF, "Waypoint", iNextWP); } Bon alors la il y a les principales fonctions, à savoir que toi tu feras le reste, faire bouger la demoiselle au WP. Résumons: iWP = La local de la serveuse. À savoir, comme je l'ais dit plus haut, que en debut de "partie" la local est à 0, donc j'te conseil de placer la serveuse sur le WP de départ, c'est à dire 0. Donc, cette local désigne le premier chiffre que l'on a dans le tag. (X_SERVEUSE_MOVE où X = Local). iMaxWP = Le nombre maximum de WP. On va éviter de faire augmenter les locals pour rien. J'ai 4 WPs, donc iMaxWP = 4. iNextWP = Le WP suivant ou devra allé la serveur, donc c'est enfaite, si on a passé le CP à l'école : iWP + 1. (par exemple: la serveur est au WP 1, donc 1 + 1 : 2, la serveuse passera au WP 2). sTag = La suite du tag du WP. "Petite astuce" : Alors, tu as deux solutions. Soit tu considère que le WP 0 est le point de départ de la serveuse, donc, il sera inutile, soit tu considère que ce WP sera un point ou elle devra allé. Pour la première solution, je te conseil de mettre iNewWP à la place iWP dans la fonction lLoc, comme ça, elle passera directement le WP 0 pour aller au 1. Pour la deuxième solution, tu laisses comme j'ai fait, on va directement dans la source ; la local. lLoc = La localisation du WP en question. Donc tout dépendra de l'astuce que tu as utilisée. "Script de movement" = Je te laisse faire, je connais plus les fonctions exacts, mais ça commence par AssignCommand(OBJECT_SELF, ...); trouve la suite La dernière fonction met à jour la local, donc si elle était à 0 au début, elle passera à iNewWP ce qui veut dire 0 + 1, donc 1. Pour t'aider un peu plus, tu mets un IF regardant si iMaxWP n'est pas atteint, à ce moment la t'évites de calculer, OU BIEN, tu remets à 0/1 pour que la serveuse refasse un p'tit tour. Voila, j'espère que c'est clair Mais normalement il existe une fonction déjà approprié dans NWN, ou tu dois mettre le tag de la serveur, par exemple : NW_WP_SERVEUSE, et le WP doivent faire une suite de chiffre ; NW_WP_SERVEUSE_01. Et si tu click sur la serveuse, t'as le chemin de tracé. T'as aussi une méthode ou faut toucher le OnSpawn, et enlever "//" à une ligne pour que la serveuse bouge toute seule, en revanche, je sais plus quel ligne :s BK _________________ [http] |
Revenir en haut | |
burning-angel Novice Messages: 10 |
ok... je vais essayer ca, merci beaucoup, je te tiens au courant
|
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