
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.







La date/heure actuelle est 19/04/2025 21:34:44
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 |
Cassin Papa-poule(t) & poissard intemporel ![]() Messages: 7471 Localisation: 6 bis rue de la Couveuse, Poulailler 39b |
Salut,
voilà, j'ai créé deux petits scripts tous simples à utiliser dans des dialogues, un pour ajouter l'interlocuteur comme hench et l'autre pour le rendre Hostile (si on lui cause mal ![]() J'ai utilisé pour les deux la fonction GetLastSpeaker qui me paraissait la plus approprié pour utiliser ces scripts pour plusieurs PNJ sans à chaque fois faire un script spécial reprennant leur tag. Voilà les scripts : Code : object oPC = GetPCSpeaker();
object oHench = GetLastSpeaker(); void main() { AddHenchman (oPC, oHench); } et Code : object oSpeaker = GetLastSpeaker();
void main() { ChangeToStandardFaction (oSpeaker, STANDARD_FACTION_HOSTILE); } mais ils ne marchent pas (il ne se passe rien). Les scripts ne sont pas en cause car en remplaçant le GetLastSpeaker par un GetObjectByTag("TagDuPNJConcerné"), ça marche... J'ai essayé en plaçant ces scripts sur une phrase du PNJ ou du joueur, mais ça ne change rien non plus... A quoi sert donc cette fonction alors, si ce n'est pour récupérer l'interlocuteur du joueur ??? _________________ Aventure ! Camaraderie ! Et acier sur acier ! Les ingrédients légendaires ! Hein Bouh ? http://cassin1306.spaces.live.com |
Revenir en haut | ![]() ![]() ![]() ![]() |
finipe Grand Sage du Conseil ![]() Messages: 519 Localisation: Nantes |
Voilà ce que dit le lexicon :
Citation : Description
Description :
Use this in a conversation script to get the person with whom the PC is conversing. Returns OBJECT_INVALID if the caller is not a valid creature. Remarks If called within a conversation (e.g., as part of the "StartingConditional" script for a PC line of text AFTER the NPC has spoken previously), the function will not return the last NPC speaker, but will return OBJECT_INVALID. The value is apparently set after the whole conversation with an NPC is completed, not after each line of conversation. This means you can't use this function during a conversation to grab the tag of the NPC that is speaking. Utilisez cette fonction dans un script de conversation pour définir la personne avec laquelle le joueur parle. Renvoie OBJECT_INVALID si celui qui appelle n'est pas une créature valide. Remarque : Si la fonction est appelée à l'intérieur d'une conversation, la fonction ne renverra pas le dernier NPC à qui le joueur a parlé, mais renverra OBJECT_INVALID. La valeur est apparemment définie après que l'entière conversation avec le NPC soit finie, et non après chaque ligne de conversation. Ceci signifie que vous ne pouvez utiliser cette fonction pendant une conversation pour obtenir le tag du NPC à qui l'on parle. Ce que j'en comprends c'est que cette fonction renvoie le dernier NPC à qui tu as parlé APRES que l'entière conversation ait eu lieue, et ce même si ensuite tu a débuté une autre conversation avec un autre NPC (jusqu'à ce que cette autre conversation avec cet autre NPC soit terminée, auquel cas GetLastSpeaker() renverra alors cet autre NPC). Ou alors, si tu as débuté une nouvelle conversation, la fonction GetLastSpeaker() renvoie automatiquement OBJECT_INVALID, je sais pas faut tester. Dans ce cas, tu ne peux pas utiliser cette fonction dans une conversation. _________________ » 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 | ![]() ![]() ![]() ![]() |
Baldurien L'homme qui chutait sur le macadam ![]() Messages: 14070 Localisation: Quadran Alpha |
heu :
A éviter les variables globales ! Code : void main()
{ object oPC = GetPCSpeaker(); object oHench = GetLastSpeaker(); AddHenchman (oPC, oHench); } Je sais pas si ça va changer grand chose, mais braiffe! _________________ #nwnights-fr @ irc.darkmyst.org TitanQuest-FR |
Revenir en haut | ![]() ![]() ![]() ![]() |
Cassin Papa-poule(t) & poissard intemporel ![]() Messages: 7471 Localisation: 6 bis rue de la Couveuse, Poulailler 39b |
Ca change quoi que les variables soient déclarées avant ou après le void main() ?
Ca a une importance ??? (encore un truc que je savais pas ![]() Finipe : merci pour la définition du Lexicon, je n'ai pas le réflexe d'y aller quand je bute sur un truc de ce genre... Je trouve ça un peu débile si ça ne renvoie que le PNJ de la conversation précédente, ça n'a que peu d'intérêt je trouve... ![]() Bon, j'essaierais de creuser ça demain si j'en ai le temps ![]() _________________ Aventure ! Camaraderie ! Et acier sur acier ! Les ingrédients légendaires ! Hein Bouh ? http://cassin1306.spaces.live.com |
Revenir en haut | ![]() ![]() ![]() ![]() |
Baldurien L'homme qui chutait sur le macadam ![]() Messages: 14070 Localisation: Quadran Alpha |
La différence ?
Simple : ça fonctionne ! Ce que je veux dire en gros, c'est qu'en variable globale c'est pas intelligent c'est à éviter car tu ne sais pas quand est appelé ce bout de code. Tu ne sais même pas s'il est appelé, et cela peut causer des erreurs. Je pense qu'il ne réévalue que la portion main() du script et pas le reste (ie: ça reste déclaré, mais aucun changement ne sera fait) lorsqu'il l'active. Donc là, GetLastPCSpeaker() ça choppera jamais le dernier PC qui a parlé, mais plus le premier _________________ #nwnights-fr @ irc.darkmyst.org TitanQuest-FR |
Revenir en haut | ![]() ![]() ![]() ![]() |
Cassin Papa-poule(t) & poissard intemporel ![]() Messages: 7471 Localisation: 6 bis rue de la Couveuse, Poulailler 39b |
OK... Donc je vais devoir revoir tous mes scripts
![]() Bon, par contre je viens d'essayer en déclarant les variables à l'intérieur du void main(), ça ne marche pas plus ![]() ![]() Pourtant je crois me souvenir qu'avant que je ne perde mon hak et donc mon module ( ![]() ![]() _________________ Aventure ! Camaraderie ! Et acier sur acier ! Les ingrédients légendaires ! Hein Bouh ? http://cassin1306.spaces.live.com |
Revenir en haut | ![]() ![]() ![]() ![]() |
Baldurien L'homme qui chutait sur le macadam ![]() Messages: 14070 Localisation: Quadran Alpha |
bah
![]() ![]() suffit de stocker une réfèrence locale à l'objet et pof ! _________________ #nwnights-fr @ irc.darkmyst.org TitanQuest-FR |
Revenir en haut | ![]() ![]() ![]() ![]() |
uuvvww Blademaster ![]() Messages: 2187 Localisation: (regarde autour de lui) Dans quel état j'erre ? |
Baldurien a écrit : La différence ?
... Ce que je veux dire en gros, c'est qu'en variable globale c'est pas intelligent c'est à éviter car tu ne sais pas quand est appelé ce bout de code. Tu ne sais même pas s'il est appelé, et cela peut causer des erreurs. Je pense qu'il ne réévalue que la portion main() du script et pas le reste (ie: ça reste déclaré, mais aucun changement ne sera fait) lorsqu'il l'active. Donc là, GetLastPCSpeaker() ça choppera jamais le dernier PC qui a parlé, mais plus le premier ![]() J'imagine que ce système fonctionne comme un language de programmation classique ... Si c'est bien le cas, j'ai donc du mal à comprendre tes arguments ![]() Tu pourras préciser ? _________________ ![]() |
Revenir en haut | ![]() ![]() ![]() |
Baldurien L'homme qui chutait sur le macadam ![]() Messages: 14070 Localisation: Quadran Alpha |
bah
je sais pas en fait ![]() ![]() en php encore mais là ![]() _________________ #nwnights-fr @ irc.darkmyst.org TitanQuest-FR |
Revenir en haut | ![]() ![]() ![]() ![]() |


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