La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
La date/heure actuelle est 22/09/2024 00:04:10


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
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 : 13/09/2003 16:43:25 Sujet du message : GetLastSpeaker... comprend pas un truc

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 Very Happy).

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 Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
finipe
Grand Sage du Conseil
Inscrit le: 11 Fév 2003
Messages: 519
Localisation: Nantes
Répondre en citant
Posté le : 13/09/2003 17:02:00 Sujet du message :

Voilà ce que dit le lexicon :


Citation :
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.
Description :
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 Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
Baldurien
L'homme qui chutait sur le macadam
Inscrit le: 12 Sep 2002
Messages: 14065
Localisation: Quadran Alpha
Répondre en citant
Posté le : 13/09/2003 22:14:31 Sujet du message :

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 Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur 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 : 14/09/2003 19:32:31 Sujet du message :

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 Embarassed)


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



Bon, j'essaierais de creuser ça demain si j'en 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
 
Baldurien
L'homme qui chutait sur le macadam
Inscrit le: 12 Sep 2002
Messages: 14065
Localisation: Quadran Alpha
Répondre en citant
Posté le : 14/09/2003 20:06:45 Sujet du message :

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 Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur 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 : 15/09/2003 10:46:58 Sujet du message :

OK... Donc je vais devoir revoir tous mes scripts Very Happy


Bon, par contre je viens d'essayer en déclarant les variables à l'intérieur du void main(), ça ne marche pas plus Sad, donc j'en conclue que GetLastSpeaker est une fonction assez inutile Very Happy, et que je vais devoir faire un script par PNJ...

Pourtant je crois me souvenir qu'avant que je ne perde mon hak et donc mon module (Embarassed) j'avais fais des scripts de ce genre, avec GetLastSpeaker, et qu'ils marchaient...
_________________
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
 
Baldurien
L'homme qui chutait sur le macadam
Inscrit le: 12 Sep 2002
Messages: 14065
Localisation: Quadran Alpha
Répondre en citant
Posté le : 15/09/2003 13:01:52 Sujet du message :

bah Smile ça se construit sinon hein Wink

suffit de stocker une réfèrence locale à l'objet et pof !
_________________
#nwnights-fr @ irc.darkmyst.org TitanQuest-FR
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
uuvvww
Blademaster
Inscrit le: 19 Déc 2002
Messages: 2187
Localisation: (regarde autour de lui) Dans quel état j'erre ?
Répondre en citant
Posté le : 15/09/2003 13:57:32 Sujet du message :


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
Surprised Hum ...

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 Shocked

Tu pourras préciser ?
_________________
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Baldurien
L'homme qui chutait sur le macadam
Inscrit le: 12 Sep 2002
Messages: 14065
Localisation: Quadran Alpha
Répondre en citant
Posté le : 15/09/2003 14:10:09 Sujet du message :

bah

je sais pas en fait Smile mais les variables globales sont à éviter comme la peste Smile

en php encore mais làSmile
_________________
#nwnights-fr @ irc.darkmyst.org TitanQuest-FR
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur 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 49.601ms