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 01/11/2024 06:36:55
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 |
Silverwave Ecuyer Messages: 69 |
Posté le : 21/05/2003 06:15:31 Sujet du message : Spawn, trigger, conversations et skills (topic édité)
Salut à tous,
je suis à mon premier mod, et même pour quelqu'un qui a fait des études en informatique (et donc, qui connait le c++) je ne réussit pas à faire ce que j'aimerais qu'il arrive et sa me fait c... !!! Primo : J'aimerais faire apparaître, au spawn du PJ, un message au dessus de sa tête qui dit "blablabla...". J'ai essayer avec OnEnter sur une zone mais elle ne semble pas s'activer puisque le PJ spawn directement à l'intérieur de la zone. Secundo : Je veux qu'une zone (Trigger) soit détruite lorsque le PJ sors de cette zone en question. C'est comment ca, j'ai regarder la fonction DestroyLocalArea mais cela ne semble pas être ca puisqu'il demande un intrant d'un string qui est le nom de la variable locale. Tercio : J'ai fait la même chose que ce qu'ils disent de faire dans le tutorial pour les conversations et je n'arrive toujours pas à faire en sorte que, par exemple, lorsqu'on parle à un PNJ, il dise ce qu'il a à dire et faire que lorsqu'on lui reparle pour une 2e fois ou plus, il dise autre chose... Enfin : Ben, c'est pas primordiale mais ca serait chouette que quelqu'un me dise comment je fais pour qu'un personnage utilise une de ses habiletée? Merci ! |
Revenir en haut | |
Tuyen Demi-dieu Messages: 460 Localisation: Chez moi |
Eh bien pour ta première question, essaie la fonction :
Code : void main()
{ object oPC = GetIsPc(); FloatingTextStringOnCreature("blablabla", oPC, FALSE); } Je ne suis pas sur de la première ligne, mais ca doit être à peu près comme ca... Bref! l'essentiel c'est que oPC représente le PJ. Il faut mettre ca dans le onEnter je pense que c'est le plus approprié.. j'ai po testé m'enfin ca me semble logique! lol!... Pour ta deuxième question, il faut que tu mette ca dans le OnExit de ton Trigger : Code : void main()
{DestroyObject(OBJECT_SELF);} Sinon pour que le PNJ dise une réplique différente selon le nombre de fois que tu lui parles, il faut qu'à la première réplique, dans la section Action Conséquente tu mets un script qui met une certaine variable , genre "int iDejaParler" sur le PNJ ( ou sur le PJ ) à 1 avec la fonction SetLocalInt. Et qu'ensuite sur la réplique de la deuxième fois où il parle au Pj, tu mets dans Condition d'exécution un autre script qui teste cette variable à 1, avec GetLocalInt. Le plus IMPORTANT c'est de placer la deuxième réplique AVANT la première... puisque le PNJ teste ses réplique selon l'ordre dans laquelle elles lui apparaissent... S'il n'y a pas de condition d'exécution pour la première, alors il va tout le temps la sortir. C'est pourquoi il faut mettre les répliques avec le plus grand nombre de condition en premier! Désolé de ne pas poster des scripts entiers, là je suis pas chez moi je connais pas le toolset par coeur! mais ce sont des idées que je te donne, et puis comme tu connais le language informatique, ca doit mieux passer... ( parce que moi je connais du C++ que cin et cout! lol! ) |
Revenir en haut | |
finipe Grand Sage du Conseil Messages: 519 Localisation: Nantes |
Bienvenue à toi !
(J'ai changé ton titre, essaye de mettre des titres en rapport avec le contenu du message pour les recherches c'est mieux !) Bon alors dans l'ordre : - Ton message quand le PJ entre dans une zone : plutôt que de mettre un trigger, mets ton script dans le onEnter de la zone elle-même... le script suivant devrait faire l'affaire : Code : void main()
{ object oPC = GetEnteringObject(); if(GetIsPC(oPC)) // vérifions que l'objet qui entre est bien un joueur (un peu superflu mais bon...) { FloatingTextStringOnCreature("Blablablabla", oPC, FALSE); // ou aussi : AssignCommand(oPC, ActionSpeakString("Blablablabla")); // ou encore : SendMessageToPC(oPC, "Blablabla"); } } Pour détruire le déclencheur à la sortie du Joueur, c'est très simple : un déclencheur est un objet possédant un tag, sers-t-en. Sur le onExit du déclencheur : Code : void main()
{ DestroyObject(OBJECT_SELF) } ...ici pas besoin du tag, le OBJECT_SELF suffit Pour les conversations, comme l'a dit Tuyen il faut utiliser les variables locales et les conditions. Pour ça va voir cette adresse : [http] ...j'ai détaillé toute la réponse dans ce post, l'intéressé était satisfait j'espère que ça te contentera Et enfin pour les tests, il y a une méthode simple qui peut te satisfaire, et qui est la suivante : Code : #include "nw_i0_tool" // ça c'est indispensable, le script en dessous fait appel à cette bibliothèque void main() { if(AutoDC(DC_****, SKILL_*****, Get*****())) { // actions effectuées si le test est réussi } } -> Trois difficultés possibles : DC_EASY, DC_MEDIUM, DC_HARD -> Les compétences, y a qu'à regarder la liste des constantes pour trouver ce qu'il te faut -> Et le Get***** tu mets ce dont tu as besoin en fonction de l'endroit où est placé ton script. Voilà voilà ! _________________ » Le Tref & l'Aucube : Histoire, misanthropie & zoologie léonine » 1626, le Gant & l'Epée : intrigues & duels sous le règne de Louis XIII |
Revenir en haut | |
Silverwave Ecuyer Messages: 69 |
Merci, c'est ca que j'avais oublier pour les conversations (ben, que ne ne savais pas en fait), la priorité, et c'est très logique, dans une perspective de programmation.
Mais pour ce qui est du texte d'intro, cela ne semble pas marcher. Il semble que le script ne détecte pas que le personnage entre dans la zone puisqu'il y est déjà en commencant la partie. J'ai le même problème lorsque je met une zone et que le personnage commence directement dedans. Par contre, tout ca m'As donner une idée. Je n'ai qu'à le mettre dans le Heartbeat de la zone, comme ca, où qu'il soit, après 6 secondes il recevr le message, et j'utiliserai une variable locale pour que le message ne s'affiche qu'une fois. Er, question justement sur les variables locales. Sont-elles valables tout le long du jeu ou pour la zone en cours seulement? Pcq, disons que je met une condition sur une conversation qui est que la variable doit avoir la valeur 3 pour qu'elle soit visible et que je set cette variable dans une autre zone, est-ce que sa va marcher? Et pis pour le destroyself, cela ne fontionne pas Je crois que c'est que ce script se dit de cette façon : Si la zone vient à sortir d'elle-même, elle se détruit. Ce qui est impossible. Ne faudrait-il pas mettre une vérification sur un objet de type PC (le joueur) et qu'il vérifie onexit du PC, la il détruit la zone (object_self). ? Et pour l'utilisation de skill, je comprend pas ce que le GET doit être. Et lorsque tu dit action, je vais dans la liste de droite et je choisis Effectkekchose, c'est ca? Enfin, un nouveau problème. Soit le code suivant : Code : #include "nw_i0_generic"
void main() { object oNPC = GetObjectByTag("Dwolf"); object oPC = GetFirstPC(); SetIsTemporaryEnemy (oPC, oNPC); DetermineCombatRound(GetPCSpeaker()); } J'ai mis ceci dans une conversation pour que le NPC attaque le/les PC. Le problème c'est qu'il a déjà une action en cours et il devient "rouge" soit un ennemi mais continue a marcher vers son Flag, sauf si le pj l'attaque ou passe près. Moi Je désire qu'il fonce sur le PC, je fais ca comment? Merci pour votre aide les mecs! |
Revenir en haut | |
finipe Grand Sage du Conseil Messages: 519 Localisation: Nantes |
Bon alors : le trigger qui se détruit sur le onExit, j'ai testé ça fonctionne bien. Je te remets le code j'avais oublié un point-virgule tout à l'heure :
Code : void main()
{ DestroyObject(OBJECT_SELF); } Ensuite, le message sur le onEnter de la zone ça fonctionne aussi. Le truc c'est que le délai d'affichage fait qu'on ne le voit pas forcément. Je te propose donc ça : Code : void main()
{ object oPC = GetEnteringObject(); if(GetIsPC(oPC)) // vérifions que l'objet qui entre est bien un joueur (un peu superflu mais bon...) { DelayCommand(3.0, FloatingTextStringOnCreature("Blablablabla", oPC, FALSE)); // ou aussi : DelayCommand(3.0, AssignCommand(oPC, ActionSpeakString("Blablablabla"))); // ou encore : DelayCommand(3.0, SendMessageToPC(oPC, "Blablabla")); } } Pour le test et le Get**** c'est simple : Get**** c'est en fait ce qui va te servir à définir le joueur. Si le script est placé sur une conversation, tu utiliseras GetPCSpeaker(), s'il est sur un placeable, tu utiliseras GetLastUsedBy(), sur un onEnter GetEnteringObject() etc... tape "get" dans la boîte de recherche de l'éditeur de script tu auras tout ce que tu veux Et enfin, pour ton dernier truc essaye de rajouter ça à ton script : Code : ActionAttack(oPC);
(d'ailleurs t'as un peu mélangé tes définitions entre GetPCSpeaker() et GetFirstPC() dans ton script... il est possible que ce soit le même perso dans les 2 cas mais c'est pas sûr vérifie bien tes définitions) Bye ! _________________ » Le Tref & l'Aucube : Histoire, misanthropie & zoologie léonine » 1626, le Gant & l'Epée : intrigues & duels sous le règne de Louis XIII |
Revenir en haut | |
Silverwave Ecuyer Messages: 69 |
Super, tout fonctionne !
Er sauf pour le ActionAttack(oPC) et c'est normal pcq le script est implanté dans un conversation et le ActionAttack n'est envoyé à aucune créature. Il faudrait que... AAHH j'viens de trouver! J'viens de tomber sur un chouette fonction qui est : Code : AssignCommand(oNPC,ActionAttack(oPC));
C'est donc simple avec le AssingCommand, j'peux faire faire ce que je veux à qui je vous, génial! Évidemment, j'ai rencontré un nouveau problème, lol. Désolé C'est que j'attribue une "Patrol Route" à des créatures, simple, ils suivent des Waypoints les uns après les autres. Mais le problème c'est que s'ils sont dérangés, s'ils attaquent ou si un PJ viens leur parler, ils ne continuent pas leur "patrouille", il arrête et ne font plus rien. Alors comment j'm'en sors cette fois? Un gros merci encore |
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