La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
La date/heure actuelle est 30/09/2024 15:34:08


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
ptolemee
Ecuyer
Inscrit le: 28 Oct 2003
Messages: 42
Répondre en citant
Posté le : 28/10/2003 14:54:32 Sujet du message : petite question a propos de dialogues et de combats

Voilà, je débute dans la programmation de scripts et je bute sur un problème.

Je souhaiterais qu'un NPC escorté de 2 gardes interdisent l'acces à un endroit à moins d'avoir un item.

Si le PC n'a pas l'item alors la conversation avec le chef NPC peut s'enveminer (3 étapes : 1- il prévient, 2- il s'énervent, 3- ils attaquent).

quand le chef attaque, les deux autres suivent et l'un des deux crie "A l'Attaque"

C'est au moment de l'attaque que j'ai un problème ....

Si je mets mon script sur la dernière parole du NPC alors le deuxième garde crie bien "A l'Attaque" mais aucun des 3 perso ne m'attaquent ??

Si je rajoute un réponse du PC au dialogue (genre vas-y attaque moi si tu l'ose) alors là les 3 persos attaquent bien le PC mais le second NPC ne crie pas "A l'Attaque"

Je dois vous avoué que je ne comprends pas bien.

voici le script :

Code :
#include "NW_I0_GENERIC"
void main()
{
   
    object oElf001 = GetObjectByTag ("Elf001");
    object oElf002 = GetObjectByTag ("Elf002");
   
    AdjustReputation (GetPCSpeaker(), OBJECT_SELF, -100);
   
    AssignCommand (oElf001, DetermineCombatRound());
    AssignCommand (oElf002, DetermineCombatRound());
    AssignCommand(oElf001, ActionDoCommand(SpeakString("A l'Attaque!!!")));
   
    DetermineCombatRound();
}


merci pour votre aide précieuse.

Confused
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Cassin
Papa-poule(t) & poissard intemporel
Inscrit le: 16 Sep 2002
Messages: 7471
Localisation: 6 bis rue de la Couveuse, Poulailler 39b
Répondre en citant
Posté le : 28/10/2003 15:06:06 Sujet du message :

(j'ai ajouté les balises [ code ] et [ /code ] (sans les espaces) autour de ton script pour que ça soit plus lisible)


A première vue ton script me paraît correct, le seul truc "suspect" que je trouve est cette ligne :
AssignCommand(oElf001, ActionDoCommand(SpeakString("A l'Attaque!!!")));

Pourquoi un AssignCommand suivis d'un ActionDoCommand ?
Un simple AssignCommand(oElf001, ActionSpeakString("A l'Attaque!!!")); ne serait-il pas plus simple ?



Enfin, je dis ça, si ça se trouve je me plante Very Happy
_________________
Aventure ! Camaraderie ! Et acier sur acier ! Les ingrédients légendaires ! Hein Bouh ?

http://cassin1306.spaces.live.com
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
ptolemee
Ecuyer
Inscrit le: 28 Oct 2003
Messages: 42
Répondre en citant
Posté le : 28/10/2003 16:18:25 Sujet du message :

Merci pour ton aide.

j'ai effectivement remplacé cette ligne de code mais cela n'a véritablement rien changé sur le fond.

Si c'est mon NPC qui finit le dialogue (ex "je t'avais prévenu, meurt!") alors il me dit bien cette phrase, le second perso crie bien (cf au dessus) mais personne ne m'attaque.

Si c'est le PC qui finit la phrase (ex chiche !) alors là le combat à lieu mais mon second NPC ne crie pas.

Donc problème intacte....

ils sont sur une faction defender, cela a-t-il quelque chose à voir ?

merci
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Cassin
Papa-poule(t) & poissard intemporel
Inscrit le: 16 Sep 2002
Messages: 7471
Localisation: 6 bis rue de la Couveuse, Poulailler 39b
Répondre en citant
Posté le : 28/10/2003 16:26:09 Sujet du message :

Non, la faction n'a rien à voir là-dedans... Par contre si tu fais passer la Faction Defender en hostile envers le joueur, TOUS les PNJ de Defender le deviendront, même à l'autre bout du module, donc attention Wink



Selon cette ligne
Code :
AdjustReputation (GetPCSpeaker(), OBJECT_SELF, -100);

tu fais baisser de -100 la réputation de GetPCSpeaker par rapport à OBJECT_SELF, donc si tu la met sur une phrase du PJ, ça devrait ajuster la réput' du PJ par rapport au PJ, donc il ne devrait rien se passer, hors apparemment c'est le contraire...


Difficile d'en dire plus l'éditeur sous les yeux, j'essaierais de regarder ce soir si j'ai le temps Wink
_________________
Aventure ! Camaraderie ! Et acier sur acier ! Les ingrédients légendaires ! Hein Bouh ?

http://cassin1306.spaces.live.com
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
ptolemee
Ecuyer
Inscrit le: 28 Oct 2003
Messages: 42
Répondre en citant
Posté le : 28/10/2003 17:13:54 Sujet du message :

J'essaye de mon côté quelques bodouillage, je mets un post demain à ce sujet

Razz
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
ptolemee
Ecuyer
Inscrit le: 28 Oct 2003
Messages: 42
Répondre en citant
Posté le : 28/10/2003 17:27:46 Sujet du message :

Voilà,

j'ai un peu avancé.

Si je change ma ligne adjustréputation par

SetIsTemporaryEnemy(GetPCSpeaker());

alors là tout fonctionne bien si le dernier à parler est le PJ.

Si le dernier à parler est le NPC alors ils ne m'attaquent toujours pas ? Je pense que cela peut venir du fait que le NPC ne peut pas devenir ennemi de lui-même (si je comprends bien la fonction GetPCSpeaker).

Si quelqu'un à une idée....
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Cassin
Papa-poule(t) & poissard intemporel
Inscrit le: 16 Sep 2002
Messages: 7471
Localisation: 6 bis rue de la Couveuse, Poulailler 39b
Répondre en citant
Posté le : 28/10/2003 17:34:36 Sujet du message :


ptolemee a écrit :
Si le dernier à parler est le NPC alors ils ne m'attaquent toujours pas ? Je pense que cela peut venir du fait que le NPC ne peut pas devenir ennemi de lui-même (si je comprends bien la fonction GetPCSpeaker).
Non justement, GetPCSpeaker renvoie le joueur qui dialogue avec le PNJ (pour récupérer le PNJ il faut un GetLastSpeaker), c'est ça que je ne comprend pas, ça fait l'inverse de ce que ça devrait faire...
_________________
Aventure ! Camaraderie ! Et acier sur acier ! Les ingrédients légendaires ! Hein Bouh ?

http://cassin1306.spaces.live.com
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
ptolemee
Ecuyer
Inscrit le: 28 Oct 2003
Messages: 42
Répondre en citant
Posté le : 29/10/2003 09:05:56 Sujet du message :

Bon j'ai effectué quelques test :

Si je veux que mon NPC attaque le joueur à la fin de sa phrase alors il faut que je remplace "GetPCSpeaker" dans mon script par "GetLastSpeaker"....

Cela vous semble-t-il correct comme script ?

2- autres questions : pourquoi seul le NPC me saute dessus et que les 2 gars qui l'accompagnent ne m'attaquent qu'une fois ce NPC principal mort ? Je voudrais qu'ils m'attaquent tous ensembles (je sais je suis un peu pervers.....)

merci
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Cassin
Papa-poule(t) & poissard intemporel
Inscrit le: 16 Sep 2002
Messages: 7471
Localisation: 6 bis rue de la Couveuse, Poulailler 39b
Répondre en citant
Posté le : 29/10/2003 09:31:54 Sujet du message :

Désolé, je n'ai pas pu regarder ça hier soir...


Pour le fait que seul un des PNJ t'attaque et que les autres ne réagissent qu'à sa mort, je pense (si quelqu'un d'autre pouvait confirmer/infirmer... Wink ) que ça vient du fait que tu ne changes la réputation du joueur par rapport à la faction des PNJ que sur UN SEUL des PNJ.

Je crois qu'il y a une sorte de "changement de faction actif" et "changement de faction passif". Je m'explique Very Happy :
Ton PNJ attaques le joueur car c'est sur lui que tu changes la faction ("changement actif"). Les gardes, eux, ont quand même leur faction changée mais pas directement ("changement passif"), et donc n'attaquent pas en premier lieu car un PNJ réagit à 2 choses :
- leur champ de vision : celui-ci n'est modifié que si quelque chose entre ou sort de leur champ de vision, s'il se déplace à l'intérieur de celui-ci, ils ne réagissent pas, c'est donc pour ça qu'ils ne "voient" pas que le joueur a changé de faction
- les "listeners" : ce sont des "phrases" muettes qui sont envoyées par un PNJ lorsqu'il entreprend quelque chose. Par exemple lorsqu'un PNJ meurt, il envoie à ses copains à portée un truc du genre "argh je suis mort", ce qui les fait réagir en conséquence. Ca serait donc pour ça que tes gardes n'attaquent le joueur que lorsque ton PNJ principal meurt (je ne pense pas qu'il y ait de listener de lancé lorsqu'un PNJ se met à attaquer, d'où le problème)

La solution ? Essaie de mettre la ligne de changement de faction sur les 3 PNJ, ça marchera peut-être...



Maintenant, je dis ça mais je peux me tromper complètement Embarassed, si quelqu'un d'autre pouvait donner son avis sur la question, ça serait bien Wink
_________________
Aventure ! Camaraderie ! Et acier sur acier ! Les ingrédients légendaires ! Hein Bouh ?

http://cassin1306.spaces.live.com
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
ptolemee
Ecuyer
Inscrit le: 28 Oct 2003
Messages: 42
Répondre en citant
Posté le : 29/10/2003 10:07:40 Sujet du message :

J'ai essayé différentes méthodes pour changer la faction des 3 NPC mais mes limites de codes se font cruellement sentir.

Pourrais-tu me suggérer une idée de code stp Smile

mici
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
ptolemee
Ecuyer
Inscrit le: 28 Oct 2003
Messages: 42
Répondre en citant
Posté le : 29/10/2003 10:26:38 Sujet du message :

sinon j'ai essayé ça mais il semble y avoir une erreur sur la ligne adjustereputation...


Code :
#include "NW_I0_GENERIC"
void main()
{

    object oElf001 = GetObjectByTag ("Elf001");
    object oElf002 = GetObjectByTag ("Elf002");
    object oPJ = GetPCSpeaker ();

    AssignCommand (oElf001, DetermineCombatRound());
    AssignCommand (oElf002, DetermineCombatRound());
    SetIsTemporaryEnemy(GetLastSpeaker());
    void AdjustReputation(oPJ, oElf001, -100);

    AssignCommand(oElf001, ActionSpeakString("A l'Attaque!!!"));
    AssignCommand(oElf002, ActionSpeakString("Protegeons Thord !!!"));

    DetermineCombatRound();

}


où est l'erreur merci
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
lendraste
Grand Maître Chanteur du Conseil
Inscrit le: 20 Fév 2003
Messages: 1403
Localisation: Quelque part ailleurs
Répondre en citant
Posté le : 29/10/2003 11:08:01 Sujet du message :


ptolemee a écrit :
sinon j'ai essayé ça mais il semble y avoir une erreur sur la ligne adjustereputation...
Oui, il y a un "void" en trop.
Désolé, mais n'ayant pas suivi avec assiduité le reste du sujet, je n'ai pas la possibilité de répondre pleinement aux questions qui se sont posées ici.
_________________
Lendraste de Loreval
Qui cherche la Vérité cherche celui qui la détient, car elle n'existe pas à l'état naturel.
La cité des mensonges - 1
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Numéro ICQ Ignorer l'utilisateur
 
ptolemee
Ecuyer
Inscrit le: 28 Oct 2003
Messages: 42
Répondre en citant
Posté le : 29/10/2003 12:30:27 Sujet du message :

Bien merci pour ton aide le script fonctionne mieux maintenant.

Bon je vous demande votre aide une dernière fois à partir du dernier script :

1- si dans mon dialogue, je le met sur la fin d'un texte du PJ, alors les 3 NPC m'attaquent bien en même temps mais aucun des deux elfes ne crient leurs textes ?

2- si dans mon dialogue, je le met sur la fin d'un texte du NPC, alors seul ce dernier m'attaque et les 2 autres une fois celui-ci mort (j'ai bien lu ton message Cassin mais je ne trouve pas la solution) par contre au bébut du combat, les 2 elfes crient bien leurs textes ?

Bref un coup ca marche à moitié, un coup ca marche mais l'autre moité Smile

Si quelqu'un à la réponse à ce problème...
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
lendraste
Grand Maître Chanteur du Conseil
Inscrit le: 20 Fév 2003
Messages: 1403
Localisation: Quelque part ailleurs
Répondre en citant
Posté le : 29/10/2003 13:47:03 Sujet du message :


ptolemee a écrit :
1- si dans mon dialogue, je le met sur la fin d'un texte du PJ, alors les 3 NPC m'attaquent bien en même temps mais aucun des deux elfes ne crient leurs textes ?
C'est normal car tu leur assigne sous forme d'action. Donc ces "cris" vont être placé à la suite de toute autre action. Le problème est que le passage en mode combat des deux personnages s'approprie leur queue d'action et empêchera donc l'ActionSpeakString de se déclencher.
Donc, plutot que d'assigner un ActionSpeakString, assigne leur plutôt un SpeakString. Le SpeakString n'est pas une action et sera joué immédiatement quoi que fasse le personnage à ce moment.


Citation :
2- si dans mon dialogue, je le met sur la fin d'un texte du NPC, alors seul ce dernier m'attaque et les 2 autres une fois celui-ci mort (j'ai bien lu ton message Cassin mais je ne trouve pas la solution) par contre au bébut du combat, les 2 elfes crient bien leurs textes ?
Si je trace l'exécution de ton script dans le cas numéro 2 voici ce qui se passe. Tu demandes un DetermineCombatRound sur les deux elfes, mais à ce moment tu n'as pas changé la réputation du personnage, donc les elfes ne font rien contre lui. Ayant épuisé leur queue d'action (en ne faisant rien), les ActionSpeakString que tu leur place dans la queue s'exécute normalement. Le fait de les passer hostile semble ne pas suffire à déclencher leurs assauts, mais dès que le PJ à tué le premier personnage, les PNJs le détecte et l'attaque pour ce crime. A noter que le SetIsTemporaryEnnemy fonctionne là avec ses valeurs par défaut, autrement dit, comme c'était au PNJ de parler, il est le OBJECT_SELF de la fonction. De plus SetIsTemporaryEnnemy ne s'applique qu'à une seule personne et non à une faction. Note que je ne comprends pas pourquoi le AdjustReputation semble n'avoir aucun effet dans ce contexte. Il y a sans doute des données manquantes dans la présentation de ton problème.

Désolé ne n'avoir pas le temps de creuser davantage, mais je pense qu'il y a pas mal de chose à revoir dans l'ordre des instructions de ce scripts. Essaye surtout de bien faire la différence entre ce qui est une action (donc qui se met dans la queue d'action et qui est différé s'il y a déjà des actions en cours) et ce qui n'en est pas (donc qui est exécuté immédiatement).
_________________
Lendraste de Loreval
Qui cherche la Vérité cherche celui qui la détient, car elle n'existe pas à l'état naturel.
La cité des mensonges - 1
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Numéro ICQ Ignorer l'utilisateur
 
ptolemee
Ecuyer
Inscrit le: 28 Oct 2003
Messages: 42
Répondre en citant
Posté le : 29/10/2003 17:55:20 Sujet du message :

Merci bcp pour tes explication sur les actions et le reste. Cela éclaire un peu ma lumière.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
ptolemee
Ecuyer
Inscrit le: 28 Oct 2003
Messages: 42
Répondre en citant
Posté le : 29/10/2003 18:34:59 Sujet du message :

Bon lendraste dans le cas 1 j'ai parfaitement réussit à faire fonctionner le script.

Dans le cas 2 toujours pas même en changeant de place les éléments. Par contre je veux bien une suggestion pour changer l'ensemble de la faction de ces 3 NPC mais j'ai pas bien réussit à le faire. Si on change l'ensemble de faction en hostile, il devraient me sauter dessus tous les trois..

Pouvez-vous m'éclairer la dessus ?

merci
 
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 34.717ms