La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
La date/heure actuelle est 23/11/2024 22:49:42


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
Silverwave
Ecuyer
Inscrit le: 21 Mai 2003
Messages: 69
Répondre en citant
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 Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Tuyen
Demi-dieu
Inscrit le: 23 Nov 2002
Messages: 460
Localisation: Chez moi
Répondre en citant
Posté le : 21/05/2003 10:55:19 Sujet du message :

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! Embarassed mais ce sont des idées que je te donne, et puis comme tu connais le language informatique, ca doit mieux passer... Very Happy ( parce que moi je connais du C++ que cin et cout! lol! )
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
finipe
Grand Sage du Conseil
Inscrit le: 11 Fév 2003
Messages: 519
Localisation: Nantes
Répondre en citant
Posté le : 21/05/2003 12:19:24 Sujet du message :

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 Wink !)

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 Smile

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 Wink

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 Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
Silverwave
Ecuyer
Inscrit le: 21 Mai 2003
Messages: 69
Répondre en citant
Posté le : 21/05/2003 18:23:13 Sujet du message : Merci

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 Sad
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 Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
finipe
Grand Sage du Conseil
Inscrit le: 11 Fév 2003
Messages: 519
Localisation: Nantes
Répondre en citant
Posté le : 21/05/2003 19:28:45 Sujet du message :

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 Wink

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 Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
Silverwave
Ecuyer
Inscrit le: 21 Mai 2003
Messages: 69
Répondre en citant
Posté le : 21/05/2003 21:07:04 Sujet du message :

Super, tout fonctionne Very Happy !

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... Shocked

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! Very Happy

Évidemment, j'ai rencontré un nouveau problème, lol. Désolé Surprised
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? Embarassed


Un gros merci encore Smile
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Montrer les messages depuis :
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


Sauter vers:
FAQ | Rechercher | Liste des Membres | Groupes d'utilisateurs | S'enregistrer | Profil | Se connecter pour vérifier ses messages privés | Connexion
Powered by phpBB 2.* [m] © 2001, 2002 phpBB Group
Theme rewritten in beautiful XHTML code by Baldurien.
Thème "La Bibliothèque de Neverwinter" crée par Kruger
Traduction par : phpBB-fr.com
Page generated in 32.979ms