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 27/12/2024 03:33:41
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 |
Tititatoum Voyageur Messages: 2 Localisation: Clermont-Ferrand |
Posté le : 09/07/2008 14:49:18 Sujet du message : (débutant) Déclencheur ne réalise que certaines conditions
Bonjour. Je suis navré de poster une demande qui paraîtra sans doute banale aux habitués d'Aurora, mais je débute depuis peu dans la réalisation de scripts (simples!) et je tombe sur un os en essayant d'appliquer ce que je pensais avoir compris.
J'explique le contexte de mon problème :
En bas de cette ile, sur un passage peu large, un déclencheur à quelques mètres de l'entrée d'une caverne; A l'entrée de la caverne, une cloche (Placable, statique). Ce que je cherche : Je voudrais que le passage sur le déclencheur fasse sonner la cloche ( j'aimerais son + texte), puis provoque l'apparition successive (à quelques secondes d'intervalle) de trois pirates. Chacun jette un oeil à droite puis à gauche, lance une menace et (enfin) attaque le PJ. Enfin, une fois tous apparus, le déclencheur se contentera désormais de faire sonner la cloche. J'ai tenté un script assez basique, mais la seule chose qu'il produit est l'apparition simltanée des trois pirates. Il ne tient aucun compte des textes ou sons marqués. De plus, il se redéclenche à chaque passage durant un certain temps (que je n'ai pas réussi à définir) avant de ne plus rien faire (ni les sons ni les textes demandés). J'avoue que je sèche... Voici mon script : NWScript :
//:///////////////////////// ////////////////////////////// //////////////////// //:: OnEnter script : sonclochecave //:///////////////////////// ////////////////////////////// //////////////////// /* Le passage du PC sur le Trigger declenche la cloche de l'entree de la caverne, ce qui provoque la venue successive de trois pirates. Chaque pirate fait une animation puis parle puis attaque. Apres l'apparition des trois pirates, le trigger ne fait plus que faire sonner la cloche. */ //:///////////////////////// ////////////////////////////// //////////////////// //:: Cree par : Tititatoum //:: //:: avec l'aide precieuse des "Cours de Scripts pour les Quiches" de Celowin //:: traduits par Amaranthe //:: //:: Le : 08 Juillet 2008 02h34 //:///////////////////////// ////////////////////////////// //////////////////// // on definit oPC object oPC = GetEnteringObject(); //on va definir la variable de passage int nPASSAGE = GetLocalInt(OBJECT_SELF, "PASSAGE"); void main() { // si le PC n'est pas encore passe if (nPASSAGE != 1 && GetIsPC(oPC)) { // on joue seulement le son de cloche 1 puis on attend 3 secondes ActionDoCommand(PlaySound("as_cv_bell1")); ActionSpeakString("Une petite cloche se met a tinter devant l'entree de la caverne"); ActionWait(3.0); { // assigne les objets "oPirate1" et "oDest" object oPirate1 = GetNearestObjectByTag("Pirate1"); object oPirate2 = GetNearestObjectByTag("Pirate2"); object oPirate3 = GetNearestObjectByTag("Pirate3"); object oDest = GetWaypointByTag("WP_CaveDoor_1"); // On cree le premier pirate au WP de la caverne, // on lui fait tourner la tete a droite et a gauche puis parler // on lui demande d'attaquer ce qu'il a vu (le PC), // puis on attend 3 secondes CreateObject(OBJECT_TYPE_CREATURE,"bandit001",GetLocation(oDest)); AssignCommand(oPirate1,ActionPlayAnimation(ANIMATION_FIREFORGET_HEAD_TURN_RIGHT)); AssignCommand(oPirate1,ActionPlayAnimation(ANIMATION_FIREFORGET_HEAD_TURN_LEFT)); AssignCommand(oPirate1,ActionSpeakString("Toi ici ! Tu vas mourir !!!")); AssignCommand(oPirate1,ActionAttack(oPC)); ActionWait(5.0); { // on fait la meme chose avec le deuxieme pirate CreateObject(OBJECT_TYPE_CREATURE,"bandit002",GetLocation(oDest)); AssignCommand(oPirate1,ActionPlayAnimation(ANIMATION_FIREFORGET_HEAD_TURN_RIGHT)); AssignCommand(oPirate1,ActionPlayAnimation(ANIMATION_FIREFORGET_HEAD_TURN_LEFT)); AssignCommand(oPirate1,ActionSpeakString("Par la Malpeste ! Je croyais que...")); AssignCommand(oPirate2,ActionAttack(oPC)); ActionWait(6.0); { // on refait la meme chose avec le troisieme pirate CreateObject(OBJECT_TYPE_CREATURE,"bandit003",GetLocation(oDest)); AssignCommand(oPirate1,ActionPlayAnimation(ANIMATION_FIREFORGET_HEAD_TURN_RIGHT)); AssignCommand(oPirate1,ActionPlayAnimation(ANIMATION_FIREFORGET_HEAD_TURN_LEFT)); AssignCommand(oPirate1,ActionSpeakString("Mince alors !")); AssignCommand(oPirate3,ActionAttack(oPC)); { // On initialise la variable de passage en lui donnant la valeur 1 ActionDoCommand(SetLocalInt(OBJECT_SELF,"PASSAGE",1)); } } } } } else { // s'il est deja passe, alors on joue le son de cloche 2, // on attend 2 secondes puis on joue le 1 ActionDoCommand(PlaySound("as_cv_bell2")); ActionSpeakString("La petite cloche de la caverne se met a tinter"); ActionWait(2.0); ActionSpeakString("La cloche retentit de nouveau, mais rien ne semble se produire"); ActionDoCommand(PlaySound("as_cv_bell1")); } } Je ne suis pas franchement sûr de tout ce que j'utilise, mais il me semble que, même si les animations demandées aux pirates ne fonctionnent pas (faut-il que je les mette en "ActionDoCommand" ?), je devrais au moins avoir les textes et les sons correctement puisque le "CreateObject" fonctionne. Non...? J'ai pensé à tout mettre en pile d'Action, histoire de ne pas coincer sur les timings, mais c'est peut-être ça qui empêche mon déclencheur de changer d'état avant un certain temps ? Ne vaudrait-il pas mieux que je place les actions à effectuer des pirates dans leur propre script "onSpawn" (enfin, "userDefine", plutôt...). Je n'ai pas encore osé tenter... Est-ce que je place certaines fonction au mauvais endroit (avant le main, plus haut ou plus bas)...? J'avoue que je n'ai pas encore bien saisi toutes ces subtilités... Si quelqu'un a une idée ou peut m'expliquer où je fais les erreurs, je suis preneur. Merci d'avance. _________________ a découvert Aurora depuis trois semaines; commence un long cycle de nuits blanches à cause de lui... |
Revenir en haut | |
vicayne vrae Ecuyer Messages: 62 Localisation: Les Marches d'Argent |
Bonjour, je suis très loin d'être un expert, je début tout comme toi je pense.
J'ai regardé ton script et il y a quelques choses que je peux te dire: - Pour que ton déclencheur ne refasse pas apparaître d'autres pirates. // On initialise la variable de passage en lui donnant la valeur 1 ActionDoCommand(SetLocalInt(OBJECT_SELF,"PASSAGE",1)); Mettre au début, au lieux de à la fin, car le script peut très bien ce lancer plusieurs fois avant qu'il soit fini d'être exécuter. - Je ne pense pas que tu puisses trouver un tag avant d'avoir créé la créature donc à mettre juste après le CreateObjet object oPirate1 = GetNearestObjectByTag("Pirate1"); - Il me semble qu'il y a aussi des erreurs de nom dans les AssignCommand qui sont normalement pour oPirate2 et oPirate3 au lieux de oPirate1. -Si tu veux être sur que les animations sois joué je pense qu'il faudra leur laisser le temps d'être jouer avec une petite attente entre les deux peu t'être. J'espère que ça te fera avancer dans ton module. |
Revenir en haut | |
Ivellios Légende vivante Messages: 447 Localisation: Poitiers |
Quelques remarques :
- Comme précisé dans le post précédent la définition des pirates est mauvaise, le coup des GetNearestObjectByTag() ne risque pas de marcher tant que les pirate ne sont pas créé en jeu ^^. Pour celà le plus simple est de recupéré dans la variable lors du CreateObject() directement car la fonction renvoie l'objet créé. - Tu mets des accolades là où il ne faut pas, c'est pas forcemment génant normalement, mais prend un tuto de base de C tu devrais y voir plus clair, et ça allègera tes scripts. - La fonction PlaySound() ne marche pas sur les trigger (et oui c'est chiant ^^) donc on assigne l'action au Joueur directement ou un Plaçable (genre une cloche ^^). Ici une version où j'ai juste corrigé tes erreurs, et j'ai passé la création des pirates dans une fonction, c'est plus clair et comme ça t'apprendra par la même occasion ;p. Je me suis pas trop embété j'ai été au plus simple (même pas mit de commentaires, mais vu ton script tu devrais comprendre), à tester voir si ça marche, en tout cas ça compile ^^. NWScript : void Create_Pirate(object oCible, location lLoc, string sTag, string sSpeak); void main() { object oPC = GetEnteringObject(); if(!GetLocalInt(OBJECT_SELF, "PASSAGE") && GetIsPC(oPC)) { object oPirate1, oPirate2, oPirate3; location lDest = GetLocation(GetWaypointByTag("WP_CaveDoor_1")); SetLocalInt(OBJECT_SELF, "PASSAGE" , TRUE); AssignCommand(oPC, PlaySound("as_cv_bell1")); FloatingTextStringOnCreature("", oPC); ActionWait(3.0); ActionDoCommand(Create_Pirate(oPC, lDest, "bandit001", "Toi ici ! Tu vas mourir !!!")); ActionWait(5.0); ActionDoCommand(Create_Pirate(oPC, lDest, "bandit002", "Par la Malpeste ! Je croyais que...")); ActionWait(6.0); ActionDoCommand(Create_Pirate(oPC, lDest, "bandit003", "Mince alors !")); } else { AssignCommand(oPC, PlaySound("as_cv_bell2")); FloatingTextStringOnCreature("", oPC); DelayCommand(2.0, FloatingTextStringOnCreature("La cloche retentit de nouveau, mais rien ne semble se produire", oPC)); DelayCommand(2.0, AssignCommand(oPC, PlaySound("as_cv_bell1"))); } } void Create_Pirate(object oCible, location lLoc, string sTag, string sSpeak) { object oPirate = CreateObject(OBJECT_TYPE_CREATURE, sTag, lLoc); AssignCommand(oPirate, ActionPlayAnimation(ANIMATION_FIREFORGET_HEAD_TURN_RIGHT)); AssignCommand(oPirate, ActionPlayAnimation(ANIMATION_FIREFORGET_HEAD_TURN_LEFT)); AssignCommand(oPirate, ActionSpeakString(sSpeak)); AssignCommand(oPirate, ActionAttack(oCible)); } _________________ Scripts, systèmes, fonctions,... c'est par ici... Pyjama pour castor, une vocation, un avenir sûr |
Revenir en haut | |
Tititatoum Voyageur Messages: 2 Localisation: Clermont-Ferrand |
Un grand MERCI à vous deux pour toutes ces infos qui m'ont été d'une grande aide.
Merci, Ivellios, ton script fonctionne parfaitement bien, même si bien sûr tu te doutes que je préfère améliorer le mien (^^) Il m'aura permis de comprendre :
Merci Vicayne vrae pour tous tes judicieux conseils :
Encore merci à vous deux, j'aurai réussi à faire avancer mon script et surtout à comprendre certaines fonctions de base que je veux maitriser avant d'oser m'attaquer à d'autres fonctions plus "lourdes". Je retourne de suite essayer de compiler avec tout ça sous le coude... Mais bon, pas ce soir, là je commence à fatiguer... ^^ _________________ a découvert Aurora depuis trois semaines; commence un long cycle de nuits blanches à cause de lui... |
Revenir en haut | |
vicayne vrae Ecuyer Messages: 62 Localisation: Les Marches d'Argent |
Merci à toi Ivellios, pour ce cours de code. J'adore.
Propre, claire, comme devraient l'être tous les scripts. Que du bonheur, je suis fan. |
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