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 22:49:03
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 |
Eldorane Héros Messages: 298 Localisation: Moselle |
Salut !
est-il possible de "verrouiller" un pj pendant le temps d'une dialogue : il y a en effet un dial super important dans mon module et il faut absolument que le PJ le termine correctement. Ce dialogue n'a pas d'échapatoire dans les phrases, mais il ne faut pas non plus que le PJ se sauve _________________ Notre little site : Les Héros de la Nuit qui contient le lien vers la page de présentation de notre module, en cours de fabrication ! _________________ |
Revenir en haut | |
Stan Grand Chevalier Messages: 126 |
Tu as été flemmarde sur ce coup
En cherchant sur le forum : SetCommandable(oPJ, FALSE) -> le PJ ne peut plus contrôler son personnage du tout SetCommandable(oPJ, TRUE) -> retour à la normale Par contre je ne sais pas s'il peut encore terminer le dialogue, à tester |
Revenir en haut | |
Eldorane Héros Messages: 298 Localisation: Moselle |
Citation : Tu as été flemmarde sur ce coup :shock:Mais heuuuu...
bon c'est vrai que j'ai même pas cherché... . c'est ma faute, c'est ma faute c'est ma très grande faute Mais j'ai quand même trouvé l'erreur (volontaire ??) que tu as glissée dans tes lignes : c'est SetCommandable(FALSE,oPC) !! (héhé, pour une fois que c'est moi qui trouve !) Bon j'ai donc fais ce script : NWScript :
void main() { object oPC = GetFirstObjectInArea(); object oChair = OBJECT_SELF; SetTime(21, 00, 00, 00); // si il y a encore des objets dans la zone while(GetIsObjectValid(oPC)==TRUE) { if(GetIsPC(oPC)) // et si cet objet est un joueur { SetCommandable(FALSE,oPC); AssignCommand(oPC, ActionSit(oChair)); } oPC = GetNextObjectInArea(); } } Tout fonctionne à merveille, les PJ sont bloqués (en tout les cas c'est le cas pour mon perso en test solo), mais j'aimerai que les PJ soient assis et qu'ils le restent. (j'adore compliquer les choses) J'ai placé 6 chaises dans la zones pour les 6 joueurs potentiels. Sinon est ce que la fonction SetTime va affecter l'heure du module définitivement ? NB : Le "déblocage" des PJ se fait par la suite, à travers un autre script _________________ Notre little site : Les Héros de la Nuit qui contient le lien vers la page de présentation de notre module, en cours de fabrication ! _________________ |
Revenir en haut | |
Stan Grand Chevalier Messages: 126 |
Bah la faute n'est pas de moi puisque j'ai recopié le post d'un membre qui avait déjà écrit à ce sujet
*innocent* |
Revenir en haut | |
Eldorane Héros Messages: 298 Localisation: Moselle |
j'ai fait un premier test, mais même en solo mon perso ne s'assoit pas !
NWScript : void main() { object oPC = GetFirstObjectInArea(); object oChai1 = GetNearestObjectByTag("chaise1", OBJECT_SELF); object oChai2 = GetNearestObjectByTag("chaise2", OBJECT_SELF); object oChai3 = GetNearestObjectByTag("chaise3", OBJECT_SELF); object oChai4 = GetNearestObjectByTag("chaise4", OBJECT_SELF); object oChai5 = GetNearestObjectByTag("chaise5", OBJECT_SELF); object oChai6 = GetNearestObjectByTag("chaise6", OBJECT_SELF); // si il y a encore des objets dans la zone while(GetIsObjectValid(oPC)==TRUE) { if(GetIsPC(oPC)) // et si cet objet est un joueur { SetCommandable(FALSE,oPC); AssignCommand(oPC, ActionSit(oChai1)); } oPC = GetNextObjectInArea(); } } _________________ Notre little site : Les Héros de la Nuit qui contient le lien vers la page de présentation de notre module, en cours de fabrication ! _________________ |
Revenir en haut | |
Stan Grand Chevalier Messages: 126 |
Citation : Note that any actions assigned with AssignCommand, of course, will also not work as they try and add actions to the action queue when SetCommandable(FALSE, oTarget) is used, see remarks and the Code. Voilà voilou, na
Citation : AssignCommand(oNPC, SomeAction1()); AssignCommand(oNPC, SomeAction2()); AssignCommand(oNPC, SomeAction3()); AssignCommand(oNPC, ActionDoCommand(SetCommandable(TRUE))); AssignCommand(oNPC, SetCommandable(FALSE)); mais t'inquietes pas, entre Longbow et tous les autres boss de cutscene, tu vas en avoir de l'aide à ne plus savoir qu'en faire.C'est THE fonctions qu'ils connaissent par coeur je suppose |
Revenir en haut | |
Eldorane Héros Messages: 298 Localisation: Moselle |
j'ai rien compris...
Voici ce que j'ai bricolé : (dans le ONEnter de la zone) NWScript :
void main() { object oPC = GetFirstObjectInArea(); object oChai1 = GetNearestObjectByTag("chaise1", OBJECT_SELF); object oChai2 = GetNearestObjectByTag("chaise2", OBJECT_SELF); object oChai3 = GetNearestObjectByTag("chaise3", OBJECT_SELF); object oChai4 = GetNearestObjectByTag("chaise4", OBJECT_SELF); object oChai5 = GetNearestObjectByTag("chaise5", OBJECT_SELF); object oChai6 = GetNearestObjectByTag("chaise6", OBJECT_SELF); // si il y a encore des objets dans la zone while(GetIsObjectValid(oPC)==TRUE) { if(GetIsPC(oPC)) // et si cet objet est un joueur { // Assoit le PNJ sur une chaise AssignCommand(oPC, ActionSit(oChai1)); object oItem = GetFirstItemInInventory( oPC ); while( oItem != OBJECT_INVALID ) { DestroyObject( oItem ); oItem = GetNextItemInInventory( oPC ); } DestroyObject(GetItemInSlot(INVENTORY_SLOT_ARMS, oPC)); DestroyObject(GetItemInSlot(INVENTORY_SLOT_ARROWS, oPC)); DestroyObject(GetItemInSlot(INVENTORY_SLOT_BELT, oPC)); DestroyObject(GetItemInSlot(INVENTORY_SLOT_BOLTS, oPC)); DestroyObject(GetItemInSlot(INVENTORY_SLOT_BOOTS, oPC)); DestroyObject(GetItemInSlot(INVENTORY_SLOT_BULLETS, oPC)); DestroyObject(GetItemInSlot(INVENTORY_SLOT_CARMOUR, oPC)); DestroyObject(GetItemInSlot(INVENTORY_SLOT_CHEST, oPC)); DestroyObject(GetItemInSlot(INVENTORY_SLOT_CLOAK, oPC)); DestroyObject(GetItemInSlot(INVENTORY_SLOT_CWEAPON_B, oPC)); DestroyObject(GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oPC)); DestroyObject(GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oPC)); DestroyObject(GetItemInSlot(INVENTORY_SLOT_HEAD, oPC)); DestroyObject(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)); DestroyObject(GetItemInSlot(INVENTORY_SLOT_LEFTRING, oPC)); DestroyObject(GetItemInSlot(INVENTORY_SLOT_NECK, oPC)); DestroyObject(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)); DestroyObject(GetItemInSlot(INVENTORY_SLOT_RIGHTRING, oPC)); // equipe les nouveaux vetements object oVet = CreateItemOnObject ("tenuedepart", oPC, 1); AssignCommand(oPC, ActionEquipItem(oVet, INVENTORY_SLOT_CHEST)); // Bloque le PNJ SetCommandable(FALSE,oPC); } oPC = GetNextObjectInArea(); } } Bon ya que la partie bloquer le PNJ et supprimer le matos qui marche. Mais impossible de le faire asseoir et lui faire porter le vêtement "tenuedepart". Il récupère l'item dans son équimempent mais le perso ne le porte pas ! _________________ Notre little site : Les Héros de la Nuit qui contient le lien vers la page de présentation de notre module, en cours de fabrication ! _________________ |
Revenir en haut | |
kiky.le.magnifique Homme très gay Messages: 907 Localisation: Camping de la nation martienne... |
met un delay pour ton SetCommandable,
car là il se lance avant que le PJ ait finit son action... _________________ 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 | |
Eldorane Héros Messages: 298 Localisation: Moselle |
Ah oui, il bloque le PJ avant de le l'équiper du vêtement !
Sinon pour que les PJ soient assis ? _________________ Notre little site : Les Héros de la Nuit qui contient le lien vers la page de présentation de notre module, en cours de fabrication ! _________________ |
Revenir en haut | |
Stan Grand Chevalier Messages: 126 |
Gloups là tu t'emmèles méchamment.
Expliques ce que tu veux comme script précisement, car si c'est sur le OnEnter d'une zone, le script est totalement faux, et c'est pour ça que personne ne s'assoit etc... Pourquoi c'est faux : 2 principales raisons : 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. Le plus proche objet d'un OBJECT_SELF qui n'est autre que la map qui lance le script, ça ne doit pas fonctionner. Deuxième grosse erreur : tu utilises une fonction qui boucle tous les PJ d'une MAP, donc en gros, à chaque fois que quelqu'un va entrer dans ta carte, le script va se lancer pour tous les gens déjà présent. |
Revenir en haut | |
Eldorane Héros Messages: 298 Localisation: Moselle |
En fait ce que je veux faire, c'est qu'au lancement de cette zone :(la zone ne servira qu'une fois et où les PJ ne pourrons plus revenir)
- tous les PJ soient assis - qu'ils soient bloqués assis - qu'ils soient dépouillés de leur vêtements et items - qu'ils soient habillés avec le vêtement "tenuedepart" - que leur xp soit à 0 Les PJ devront ensuite "subir" un dialogue puis seront débloqués (ça c'est dans un autre script déjà préparé) Je sais que mon script ne marche pas parceque je n'y comprends que peut de chose... En fait je ne fait que coller des petits bouts que je récupère ça et là _________________ Notre little site : Les Héros de la Nuit qui contient le lien vers la page de présentation de notre module, en cours de fabrication ! _________________ |
Revenir en haut | |
Stan Grand Chevalier Messages: 126 |
NWScript :
void main() { object oPC = GetEnteringObject(); object oChair; if (GetIsPC(oPC)) { object oItem = GetFirstItemInInventory( oPC ); while( oItem != OBJECT_INVALID ) { DestroyObject( oItem ); oItem = GetNextItemInInventory( oPC ); } int nSlot; for (nSlot=0; nSlot<NUM_INVENTORY_SLOTS; nSlot++) { oItem=GetItemInSlot(nSlot, oPC); if (GetIsObjectValid(oItem)) DestroyObject(oItem); } // equipe les nouveaux vetements object oVet = CreateItemOnObject ("tenuedepart", oPC, 1); DelayCommand(0.5,AssignCommand(oPC, ActionEquipItem(oVet, INVENTORY_SLOT_CHEST))); // Assoit le PNJ sur une chaise for (nSlot=1;nSlot<=6,nSlot++) { oChair=GetObjectByTag("chaise"+IntToString(nSlot)); if (!GetIsObjectValid(GetSittingCreature(oChair))) { AssignCommand(oPlayer, ActionForceMoveToObject(oChair)); AssignCommand(oPlayer, ActionSit(oChair)); } } // Bloque le PNJ DelayCommand(5.0,SetCommandable(FALSE,oPC)); } } Pour le OnEnter de la zone, mais je ne promet rien |
Revenir en haut | |
Eldorane Héros Messages: 298 Localisation: Moselle |
Merci ! ça fonctionne "presque" correctement !
J'ai apporté quelques notes perso : NWScript :
void main() { object oPC = GetEnteringObject(); object oChair; if (GetIsPC(oPC)) { object oItem = GetFirstItemInInventory( oPC ); while( oItem != OBJECT_INVALID ) { DestroyObject( oItem ); oItem = GetNextItemInInventory( oPC ); } int nSlot; for (nSlot=0; nSlot<NUM_INVENTORY_SLOTS; nSlot++) { oItem=GetItemInSlot(nSlot, oPC); if (GetIsObjectValid(oItem)) DestroyObject(oItem); } // equipe les nouveaux vetements object oVet = CreateItemOnObject ("tenuedepart", oPC, 1); //DelayCommand(1.0,AssignComma nd(oPC, ActionEquipItem(oVet, INVENTORY_SLOT_CHEST))); AssignCommand(oPC, ActionEquipItem(oVet, INVENTORY_SLOT_CHEST)); // Assoit le PNJ sur une chaise for (nSlot=1;nSlot<=6;nSlot++) { oChair=GetObjectByTag("chaise"+IntToString(nSlot)); if (!GetIsObjectValid(GetSittingCreature(oChair))) { AssignCommand(oPC, ActionForceMoveToObject(oChair)); AssignCommand(oPC, ActionSit(oChair)); // met l'XP des joueurs a 1 SetXP(oPC, 1); } } // Bloque le PNJ DelayCommand(2.0,SetCommandable(FALSE,oPC)); //SetCommandable(FALSE,oPC); } } Le seul hic est que le PJ est à poil au lancement du jeu... j'ai tenté sans delay, aves des delays différents etc, rien à faire. Le SetCommandable FALSE bloque cette action... Si tu pouvais aussi me donner 2 ou 3 explications sur ton module. Je cerne les grandes lignes mais j'ai un peu de mal à saisir les trucs des "slot". Je vais poursuivre mes recherches pour habiller le PJ ! _________________ Notre little site : Les Héros de la Nuit qui contient le lien vers la page de présentation de notre module, en cours de fabrication ! _________________ |
Revenir en haut | |
Stan Grand Chevalier Messages: 126 |
L'objet est bien créé dans son inventaire ?
Est ce qu'il s'assoit ? car s'il s'assoit c'est étrange qu'il reste nu, c'est pas le blocage qui devrait empecher ça, ou ça empecherait tout. Sinon quelques explications : NWScript :
int nSlot; for (nSlot=0; nSlot<NUM_INVENTORY_SLOTS; nSlot++) { oItem=GetItemInSlot(nSlot, oPC); if (GetIsObjectValid(oItem)) DestroyObject(oItem); } Les slots d'inventaire sont en fait des chiffres qui vont de 0 à un certain nombre, et on sait qu'il y en a précisement : NUM_INVENTORY_SLOTS (qui doit être 16 ou un truc dans ce genre) Donc ce genre de boucle ça permet de dire : Pour nSlot vaut 0, jusqu'à ce que nSlot vaut la valeur du dernier Slot. Tu regardes si le Slot en question est plein, si oui, tu supprimes.Puis tu augmentes ton nSlot. Il refait un tour pour nSlot=1, donc dans le SLOT 1 il regarde si y'a un objet et ainsi de suite. NWScript :
for (nSlot=1;nSlot<=6;nSlot++) { oChair=GetObjectByTag("chaise"+IntToString(nSlot)); if (!GetIsObjectValid(GetSittingCreature(oChair))) { AssignCommand(oPC, ActionForceMoveToObject(oChair)); AssignCommand(oPC, ActionSit(oChair));}} Pour les chaises l'idée c'est de profiter de tes tags quasiment identiques.La encore on commence une boucle For (en francais on dirait Pour tel truc, tant que tel truc, faire tel truc) Le fonctionnement : Pour nSlot vaut 1.On met la chaise avec pour tag "chaise"+1 donc chaise1, dans la variable oChair. Si elle est pas occupée, hop le PJ y va et s'assoit. Si elle est occupée il regarde si la chaise 2 est libre.Et ainsi de suite, d'ailleur j'ai oublié une intruction NWScript :
for (nSlot=1;nSlot<=6;nSlot++) { oChair=GetObjectByTag("chaise"+IntToString(nSlot)); if (!GetIsObjectValid(GetSittingCreature(oChair))) { AssignCommand(oPC, ActionForceMoveToObject(oChair)); AssignCommand(oPC, ActionSit(oChair)); // met l'XP des joueurs a 1 SetXP(oPC, 1); break; } } Voilà on rajoute un break pour qu'il quitte la boucle dès qu'il a trouvé une chaise libre. J'ai peut-être une idée, si le seul truc qui coince c'est bien de s'équiper de l'objet, il faudrait retirer le SetCommandable(FALSE,oPC); de ce script, et l'ajouter à la fin du script de OnUsed des chaises. Avec un DelayCommand pour qu'il attende bien qu'on soit assis. |
Revenir en haut | |
Eldorane Héros Messages: 298 Localisation: Moselle |
doublon
Dernière édition par Eldorane le 18/04/2005 13:02:52; édité 1 fois
|
Revenir en haut | |
Eldorane Héros Messages: 298 Localisation: Moselle |
Citation : J'ai peut-être une idée, si le seul truc qui coince c'est bien de s'équiper de l'objet, il faudrait retirer le SetCommandable(FALSE,oPC); de ce script, et l'ajouter à la fin du script de OnUsed des chaises. Avec un DelayCommand pour qu'il attende bien qu'on soit assis C'est effectivement ça qui coince ! Si je mets le blocage du PJ, tout fonctionne sauf l'habillage du PJ !
Dans ce cas là l'item se retrouve dans l'inventaire du PJ mais il ne le porte pas... Tu parles de mettre le blocage dans le OnUsed des chaises ? Donc je devrais faire une copie du script de Bioware et rajouter l'instruction ? _________________ Notre little site : Les Héros de la Nuit qui contient le lien vers la page de présentation de notre module, en cours de fabrication ! _________________ |
Revenir en haut | |
Stan Grand Chevalier Messages: 126 |
Voilà oui, avec un DelayCommand pour qu'il soit bien assit avant d'être bloqué.
|
Revenir en haut | |
Eldorane Héros Messages: 298 Localisation: Moselle |
ça ne fonctionne pas, à moins de mettre les chaises dans le ONUse, mais dans ce cas si les PJ décident de s'asseoir à nouveau, ils vont se retrouver bloqué !
Je vais abandonner le truc du blocage car il y a juste après le script l'entrée fracassante d'une belle Elfe qui vient annoncer une nouvelle importante. Je ne pense pas que les joueurs vont zapper ce dialogue car c'est le début du jeu. Quoi qu'il en soit, je test le script en multi demain soir, je posterai le résultat !!! en attendant MERCI !!! _________________ Notre little site : Les Héros de la Nuit qui contient le lien vers la page de présentation de notre module, en cours de fabrication ! _________________ |
Revenir en haut | |
Eldorane Héros Messages: 298 Localisation: Moselle |
J'ai remarqué un bug : si le PJ bouge à la fin du dialogue, il n'est pas téléporté !
NWScript :
// si il y a encore des PNJ dans la zone while(GetIsObjectValid(oPC)==TRUE) { // et si cet objet est un joueur if(GetIsPC(oPC)) { DelayCommand(3.0,AssignCommand(oPC, ActionJumpToObject(oWP))); } oPC = GetNextObjectInArea(); } on peut pas forcer la téléportation même si le PJ veut bouger ? _________________ Notre little site : Les Héros de la Nuit qui contient le lien vers la page de présentation de notre module, en cours de fabrication ! _________________ |
Revenir en haut | |
Stan Grand Chevalier Messages: 126 |
Comment se passe le dialogue ? un PNJ approche du groupe de perso et leur parle et ensuite tu les téléportes ?
Ca affiche une boite de dialogue ou c'est juste des speakstring ? Si ça affiche une boite de dialoguqe, faut mettre un script de téléportation dans le Conséquence de la derniere phrase du PJ. Sinon pourquoi y'a un Delay sur cette action ? les Delay c'est à éviter le plus possible car ça pose pas mal de soucis |
Revenir en haut | |
Eldorane Héros Messages: 298 Localisation: Moselle |
Il s'agit effectivement d'un dialogue classique dont la dernière ligne lance le script.
Je l'ai bien mis dans le "Actions consèquentes" de la dernière phrase. Mais comme je le précise, il fonctionne uniquement si le PJ ne bouge pas. Si je fais bouger mon PJ tout de suite après la fin du dialogue, la téléportation ne se fait pas. J'ai mis le delay car ce même script fait également partir certains PNJ de la zone, mais je vais essayer en l'enlevant. _________________ Notre little site : Les Héros de la Nuit qui contient le lien vers la page de présentation de notre module, en cours de fabrication ! _________________ |
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