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 10:26:15
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 !
J'ai du mal actuellement avec les patterns. Voici l'effet voulu : Un groupe d'aventuriers arrive dans une pièce où il n'y a qu'un piedestal en son centre et deux "issues". Si un PJ dit le mot de passe ("Silence"), l'une des portes s'ouvre. Si le placeable "entend" un autre mot, c'est l'autre porte qui s'ouvre. Actuellement je dispose de ceci : - Une porte avec pour tag "D1Porte1" - Une autre avec pour tag "D1Porte2" - Un piedestal avec comme scripts : NWScript :
// Dans le onUserDefined du placeable #include "NW_I0_GENERIC" void main() { SetAssociateListenPatterns(); SetListeningPatterns(); SetListening(OBJECT_SELF, TRUE); SetListenPattern(OBJECT_SELF, "Silence", 1000); SetListenPattern(OBJECT_SELF, "**", 1001); } Et cela : NWScript :
// Dans le onHeartbeat du placeable #include "NW_I0_GENERIC" void main() { int iNb = GetListenPatternNumber(); object oPJ = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC); //Le PJ le plus proche switch (iNb) { case 1000 : object oDoor = GetObjectByTag("D1Porte1"); AssignCommand(oDoor, ActionOpenDoor(oDoor)); break; } } Mais bien évidement... ça ne fonctionne pas. Est-ce que le GetListenPatternNumber ne peut être fait que par un PNJ ? Merci d'avance ! Dernière édition par Djezebel le 30/01/2006 20:29:50; édité 1 fois
|
Revenir en haut | |
Sith Vicious Grand Sage du Conseil Messages: 693 |
Yup, il n'y a que les créatures qui peuvent écouter.
Définis les Patterns dans le OnSpawn, ensuite chaque fois qu'il va entendre une phrase ça va déclancher un script OnConversation. Teste donc la phrase entendue dans ce script (avec le GetListenPatternNumber) et ça devrait marcher beaucoup mieux. |
Revenir en haut | |
Enki Légende vivante Messages: 432 |
Salut Djezebel !
Il y a plusieurs problème dans tes scripts. Le premier : un placeable n'a pas d'oreille ! Utilise un PNJ invisible et transparent à la place, à coté de ton piedestal. Le deuxième : il faut placer tes scripts sur le OnSpawn pour écouter les Patterns et sur le OnConversation (le Onuserdefined est encore mieux) pour ouvrir la porte. Le troisième : Pas besoin de /else/ puisque tu as un /switch/. Mets ces deux scripts : NWScript :
// Dans le Onspawn du pnj invisible. #include "NW_I0_GENERIC" void main() { SetSpawnInCondition(NW_FLAG_ON_DIALOGUE_EVENT); SetAssociateListenPatterns(); SetListeningPatterns(); SetListening(OBJECT_SELF, TRUE); SetListenPattern(OBJECT_SELF, "Silence", 1000); SetListenPattern(OBJECT_SELF, "**", 1001); } NWScript :
//:///////////////////////// ///////////////////// //:: Custom User Defined Event #include "NW_I0_GENERIC" void main() { int nUser = GetUserDefinedEventNumber(); if(nUser == 1004) // ON DIALOGUE { int iNb = GetListenPatternNumber(); object oPJ = GetLastSpeaker(); //Le PJ le plus proche object oDoor = GetObjectByTag("D1Porte1"); object oDoor01 = GetObjectByTag("D1Porte2"); switch (iNb) { case 1000 : AssignCommand(oDoor, ActionOpenDoor(oDoor)); break; case 1001 : // AssignCommand(oDoor01, ActionOpenDoor(oDoor01)); break; } } } Voilà, ça doit marcher ! |
Revenir en haut | |
Djezebel Héros Messages: 252 |
Salut Sith Vicious et Enki !
Ca marche déjà mieux mais il y a un petit problème : Quand le joueur dit un mot, la porte s'ouvre (jusque là, c'est normal) Mais si on ferme la porte, toutes les 8 secondes elle se rouvre ! En gros à chaque OnHeartbeat le script va avoir en mémoire la dernière phrase prononcée et ouvrir la porte même s'il n'y a plus personne. Je ne crois pas qu'on puisse mettre une boucle pour dire "ne le fait qu'une fois" vu que si le joueur dit une autre phrase il faut que la porte s'ouvre... En somme, il ne faudrait que la porte ne s'ouvre qu'au moment où le PJ parle et autrement, rien ne se passe. |
Revenir en haut | |
Sith Vicious Grand Sage du Conseil Messages: 693 |
Théoriquement, tu n'as rien à mettre dans le heartbeat, tout se passe dans le OnConversation (ou le userdef du coup). Du coup je comprends pas trop.
Autrement, tu devrais aussi vérifier que GetLastSpeaker est bien un joueur, car il peut y avoir plein de trucs qui parlent un peu partout et parfois bien cachés. |
Revenir en haut | |
Djezebel Héros Messages: 252 |
Autant pour moi ! J'avais mis le script du OnUserDefined sur le OnHeartBeat... ceci expliquait cela ^^
Merci encore à vous deux ! |
Revenir en haut | |
L'Erudit Seigneur Messages: 167 |
Encore une victime de NWScript secourue ! Ah, c'est beau la communauté !
|
Revenir en haut | |
AZAZEL11 Seigneur Messages: 156 |
héhé c'est joli ce script, le ou les scripts changent beaucoup si on ne veut pas qu'il y ait de dialogues obligatoires? J'ai essayé pour moi même mais il doit avoir quelque chose que je ne fais pas de correct car rien ne fonctionne....il faut mettre quoi dans quel événements..? *a bien essayé*
le mieux encore serait le onuser en effet mais il faut changer quoi? (sans dialogues) mais j'aimerais quand meme savoir pourquoi ca ne marche pas chez moi... _________________ L'imagination est plus importante que le savoir. (Albert Einstein) |
Revenir en haut | |
sto Voyageur Messages: 2 |
Le langage que vous utilisez ressemble énormément à du C. Je crois comprendre que vous avez résolu tous vos problèmes, mais peut être ça peut être interessant d'avoir des notions de C, si c'est bien le langage qui est utilisé.
Ainsi par exemple, dans un case, il est possible d'utiliser default : break; c'est l'équivalent du else, pour le switch. ( [http] ) --> illustration |
Revenir en haut | |
PetitPrince Super-Mouton Messages: 2043 Localisation: Asteroïde B-612 actuellement crashé en Suisse |
sto > le NWScript est effectivement dérivé du C. Et l'utilisation du default: foo(); break; est effectivement possible .
_________________ 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 | |
AZAZEL11 Seigneur Messages: 156 |
se demande que veux dire *C* quel est son nom svp?
_________________ L'imagination est plus importante que le savoir. (Albert Einstein) |
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