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:38:49
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 |
adn2 Acolyte Messages: 23 |
Voila m
NWScript :
void main() { location lCachet = GetLocation(GetWaypointByTag("WP_PLACEPC")); vector vFacePC = GetPosition(GetObjectByTag("FACE_PC")); //FACE_PC est un WP object oPC = GetEnteringObject(); if(GetIsPC( oPC)) { SetCommandable(FALSE, oPC); AssignCommand(oPC, ClearAllActions()); AssignCommand(oPC, ActionForceMoveToLocation(lCachet)); AssignCommand(oPC, ActionWait(1.0)); AssignCommand(oPC, ActionDoCommand(SetFacingPoint(vFacePC))); AssignCommand(oPC, ActionWait(1.0)); AssignCommand(oPC, ActionDoCommand(ActionPlayAnimation(ANIMATION_LOOPING_SIT_CROSS, 1.0, 5000.0))); AssignCommand(oPC, ActionWait(1.0)); AssignCommand(oPC, ActionDoCommand(SpeakString("chose a dire a la fin"))); } } Bon alors, ce que le pc est sensé faire en entrant sur un trigger, c'est, dans l'ordre: -aller au lieu de la cachette. -se tourner dans la direction indiquée. -s'assoir par terre. -dire ce qu'il doit dire. Mais bien entendu ça foire, et il se content d'aller au lieu de la cachette et de rester planté la sans rien dire. Or, j'ai essayé pas mal de combinaisons avec le ActionDoCommand ou sans, mais rien n'y fait. |
Revenir en haut | |
Sith Vicious Grand Sage du Conseil Messages: 693 |
Je crois que ça vient du SetCommandable, essaye sans dans un premier temps, si ça corrige le truc rajoute un delaycommand (de 0.1/0.2 secondes juste histoire que les actions soient ajoutées à la liste).
Après, je sais pas si le fait de lui faire jouer une animation pendant 5000 secondes va pas retarder l'actionWait et le ActionSpeakString suivant, enfin là je sais pas. |
Revenir en haut | |
adn2 Acolyte Messages: 23 |
Bon, le problème vient bien du SetCommandable qui empeche les actions de se faire. Ceci dit, un DelayCommand de 0.2 ne suffit pas.
Je peux éventuellement le remplacer par un EffectCutSceneDominated, meme si c'est moins propre. EDIT: En fait, cet effet la aussi empeche le bon fonctionnement du script. |
Revenir en haut | |
L'Erudit Seigneur Messages: 167 |
Citation : Après, je sais pas si le fait de lui faire jouer une animation pendant 5000 secondes va pas retarder l'actionWait et le ActionSpeakString suivant, enfin là je sais pas. C'est le problème, car l'animation est plaçée dans la file d'action, et tant qu'elle n'est pas terminée, l'action suivante ne se déclenchera pas !
Autrement dit, ton PNJ va attendre 5001 secondes avant de pronnoncer la phrase ! |
Revenir en haut | |
Enki Légende vivante Messages: 432 |
Bonjour !
Alors, pour les chaines d'actions, je te conseille de créer une fonction, je vais te donner un exemple avec ton script. Je m'en sert assez souvent, c'est une astuce très utile. Je fais ça sur le vif, sans testé, alors, il se peut qu'il y ait des erreurs, à toi de vérifier ! NWScript :
void ChaineAction() { location lCachet = GetLocation(GetWaypointByTag("WP_PLACEPC")); vector vFacePC = GetPosition(GetNearestObjectByTag("FACE_PC")); //FACE_PC est un WP * il vaut mieux utiliser GetNearest.... * ClearAllActions(); ActionForceMoveToLocation(lCachet); ActionWait(1.0); ActionDoCommand(SetFacingPoint(vFacePC)); ActionWait(1.0); ActionPlayAnimation(ANIMATION_LOOPING_SIT_CROSS, 1.0, 50.0); ActionWait(1.0); DelayCommand(10.0,SpeakString("chose a dire a la fin")); SetCommandable(FALSE); DelayCommand(15.0,SetCommandable(TRUE)); // ne pas oublier cette ligne, sinon tu ne peux plus bouger ! ActionPlayAnimation(ANIMATION_LOOPING_SIT_CROSS, 1.0, 5000.0); } void main() { object oPC = GetEnteringObject(); if(GetIsPC( oPC)) { AssignCommand(oPC, ChaineAction()); } } Et voilà ! |
Revenir en haut | |
adn2 Acolyte Messages: 23 |
Bon, ça marche pas mal, a ceci près qu'il refuse toujours obstinément de s'orienter vers le WP.
|
Revenir en haut | |
Black Knight Grand Maître Chanteur du Conseil Messages: 1031 Localisation: Fin fond du trou du cul du monde |
a quoi ça sert de mettre des commentaires si vous l'ai lisez pas
NWScript :
//FACE_PC est un WP * il vaut mieux utiliser GetNearest.... * GetNearestObjectByTag = ceci signifie avoir un object (donc perso, placeable, etc..) prés de soit un waypoint n'est pas un object, mais un waypoint. Je suppose que la fonction GetNearestWaypointByTag existe Black _________________ [http] |
Revenir en haut | |
L'Erudit Seigneur Messages: 167 |
Le waypoint est un objet.
Voilà la liste des objets (source: Lexicon): Citation : OBJECT_TYPE_STORE (128)
OBJECT_TYPE_PLACEABLE (64) OBJECT_TYPE_WAYPOINT (32) OBJECT_TYPE_AREA_OF_EFFECT (16) (spell effects, like web) OBJECT_TYPE_DOOR ( 8 ) OBJECT_TYPE_TRIGGER (4) OBJECT_TYPE_ITEM (2) OBJECT_TYPE_CREATURE (1) Dernière édition par L'Erudit le 16/06/2006 18:42:14; édité 1 fois
|
Revenir en haut | |
Black Knight Grand Maître Chanteur du Conseil Messages: 1031 Localisation: Fin fond du trou du cul du monde |
|
Revenir en haut | |
adn2 Acolyte Messages: 23 |
bon ben j'ai encore un problème du meme style avec un autre script, mais cette fois c'est un PNJ qui est commandé et il est tout a fait commandable.
C'est dans le On Enter d'un trigger, on vérifie si c'est le bon PNJ, NWScript :
void ChainAction() { vector vFace = GetPosition(GetNearestObjectByTag("FACE_HEAL")); ActionWait(2.0); ActionDoCommand(SetFacingPoint(vFace)); ActionWait(1.0); ActionDoCommand(PlayAnimation(ANIMATION_LOOPING_LOOK_FAR, 1.0, 4.0)); ActionWait(3.0); ActionDoCommand(ActionSpeakString("")); } Cette partie est appelée par un AssignCommand(oPNJ, ChainAction)); comme utilisé plus haut. Le problème n'est pas là, c'est que tout se passe bien, il se tourne, joue l'animation...à l'infini. J'ai beau mettre 4 secondes comme duration, jamais il n'enchaine et dit le texte. PS: je précise qu'il y a d'autres textes ensuite (et une autre animation à la fin) mais je n'ai pas jugé utile de les mettre, car ils devraient pas poser de pb. |
Revenir en haut | |
Black Knight Grand Maître Chanteur du Conseil Messages: 1031 Localisation: Fin fond du trou du cul du monde |
|
Revenir en haut | |
Sith Vicious Grand Sage du Conseil Messages: 693 |
Il semble que l'ActionPlayAnimation vide la liste d'action. Essaye avec un PJ tu le vois : t'as 5 icones jusqu'à ce que tu joue l'animation, dès que tu commence elles disparaissent.
Tu t'en sortiras pas de cette manière du coup, faut passer par une suite de DelayCommand bien ajustés je pense. |
Revenir en haut | |
L'Erudit Seigneur Messages: 167 |
Un bug à reporter alors, hum
|
Revenir en haut | |
Viduc de Papironda Grand Chevalier Messages: 119 |
oui a prioris la meilleure solution est le delaycommand (perso j'utilise jamais le actionwait..) et surtout la création de fonction... en plus c'est beaucoup plus claire et plus souple.... ça te permet même du coup de gérer la command createobject avec le delay command puisque tu appels la fonction quand tu veux et ça c'est tip top!!!
Viduc _________________ |
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