Archives des forums MMO/MMORPG > Neverwinter Nights > NWN - Maskado > [Script] Faire parler n'importe quel objet
[Script] Faire parler n'importe quel objet
Par Daynos le 14/10/2002 à 14:45:22 (#2333413)
Voilà le script pour faire parler n'importe quel objet :
(à mettre dans le OnUsedBy après avoir rendu l'objet "Useable")void main()
{
object oPC = GetLastUsedBy();
if (GetIsPC(oPC))
{
ActionStartConversation(oPC, "NomDeLaConversation",TRUE);
}
}
Le même pour faire parler un trigger :
(à mettre dans le OnEnter)void main()
{
object oPC = GetEnteringObject();
if (GetIsPC(oPC))
{
ActionStartConversation(oPC, "NomDeLaConversation",TRUE);
}
}
compilation réussie
Par Morethil le 26/10/2002 à 18:45:17 (#2413289)
Par coolstar le 11/11/2002 à 12:16:50 (#2533367)
Puis-je me permettre de faire remarquer qu'il m'apparaît un Script identique, mais plus simple à rédiger, pour faire la même chose... :ange:void main()
{
ActionStartConversation(GetLastUsedBy());
}
Sachant qu'au lieu de nommer la Conversation dans le Script, il faut directement la rajouter dans le Dialogue de l'onglet Avancées du-dit Plaçable...
...
Au passage, parce que je croyais que ce Topic concernait une autre question... comment peut-on faire parler un Item dans l'Equipement, comme certains objets de Planscape ??? :confus:
:merci:
Par Jedaï le 11/11/2002 à 14:37:33 (#2534826)
Pour faire parler un item, la seule solution est de lui donner un "Unique Power" et de mettre dans l'event du module OnActivateItem (à peu près...) :
void main()
{
if (GetTag(GetItemActivated()) == "Tag de l'item qui cause")
{
object oPC = GetItemActivator();
AssignCommand(oPC, ClearAllActions());
AssignCommand(oPC, ActionStartConversation(oPC, "Nom de la conversation"));
}
}
A vérifier : l'orthographe des fonctions GetItem...()
Sinon, c'est bien comme ça qu'il faut faire.
Par Morethil le 11/11/2002 à 18:06:43 (#2536792)
Hi!
Puis-je me permettre de faire remarquer qu'il m'apparaît un Script identique, mais plus simple à rédiger, pour faire la même chose... :ange:void main()
{
ActionStartConversation(GetLastUsedBy());
}
Sachant qu'au lieu de nommer la Conversation dans le Script, il faut directement la rajouter dans le Dialogue de l'onglet Avancées du-dit Plaçable...
Le ActionStartConversation fonctionne avec le ResRef de la conversation, et si le ResRef ne fonctionne pas, la fonction prend la conversation dans l'onglet "conversation".
Donc la manière la plus simple (et sûr) d'avoir la bonne conversation, c'est de la nommer directement. En plus ça évite d'aller aussi configurer l'onglet conversation après avoir rédigé la conversation. Même si souvent on le fait quand même pour assurer.
Pour le if (GetIsPC) c'est une habitude a prendre a mon avis. Un PNJ peux toujours se retrouver "par hasard" sur ton trigger, ou ouvrant une porte, par exemple en courrant derrière un PJ. Même si c'est exceptionnel.
Et en plus, il y a aussi le probleme du MJ. Si le MJ veux passer une porte avec un PNJ qu'il possaide par exemple. ou même directement ?
De plus en general ce genre de trigger a un LocalInt qui fait qu'il n'est activé qu'une seule fois. Le faire activer par accident par le MJ, ou un PNJ, c'est un coup a gâcher un module pour un truc bête : une ligne de commande.
Par coolstar le 11/11/2002 à 19:39:50 (#2537591)
Merci les gars j'ai compris le message... c votre expérience qui parle... :merci:
Par mobidique le 21/11/2002 à 23:59:29 (#2615801)
Application : faire parler un pnj qui n'est pas présent dans la pièce, ou plutôt qui n'est pas visible dans la pièce où se trouvent les pj, parce que le PNJ est sur un corridor surplombant la salle où se trouve les pj (c'est clair :o ?), faire donc parler ce PNJ à la suite de l'extermination de ses chiens de garde ...
Autres applications : au déclenchement d'un piège, à l'acquisition d'un objet
En pratique:
Je fait ma conversation et je la sauvegarde sous le nom de "spip". Je met un placable invisible object, je l'appelle Spip Le Jaune (le nom du PNJ) et je lui donne comme tag SpipInvisible. L'objet n'est pas en usable donc va rester invisible. Dans l'onglet advanced je lui colle une vignette pour la conversation, je le met en faction commoner. Par acquis de conscience je lui met comme conversation "spip". Je génère les chiens de garde par un encounter. Je met ce script sur le OnExhausted de l'encounter :void main()
{
object oFM = GetFirstFactionMember(GetFirstPC());
while(GetIsObjectValid(oFM)){
AssignCommand(
GetObjectByTag("SpipInvisible"),
DelayCommand(5.0f,
FloatingTextStringOnCreature("Des bruits de pas se font entendre
depuis la salle en surplomb ...",oFM, FALSE)
)
);
oFM = GetNextFactionMember(oFM);
}
oFM = GetFirstFactionMember(GetFirstPC());
AssignCommand(
GetObjectByTag("SpipInvisible"),
DelayCommand(7.0f,
ActionStartConversation(oFM,"spip")));
}
ca marche :D ... par contre ... si kkun peut me dire pourquoi un AssignCommand d'un DelayCommand marche alors qu'un DelayCommand d'un AssignCommant marche pas :doute:
Par Cassin le 22/11/2002 à 9:07:45 (#2616869)
Dans mon module en entrant dans une zone un loup se met à suivre le joueur. Un peu plus loin, un PNJ accourt vers lui dès qu'il le voit et lui parle (script sur OnPerceived)... Et ben sans le GetIsPC j'ai eu la surprise de voir le PNJ discuter le bout de gras... avec le loup ! :mdr:
En fait le dialogue s'est déroulé en "SpeakOneLinerConversation" (enfin, un truc du genre quoi ;) ), et le loup répondait à la place du joueur (la première réplique possible quand il y avait des choix) !
C'est fort, mais bon, c'était pas tellement l'effet recherché ! :D
Par mobidique le 22/11/2002 à 10:06:44 (#2617153)
Par coolstar le 22/11/2002 à 11:17:18 (#2617624)
:merci:
Par mobidique le 22/11/2002 à 11:26:43 (#2617689)
Par coolstar le 22/11/2002 à 23:15:46 (#2623224)
Merci à Jedaï... et à toi aussi mobi. :merci:
JOL Archives 1.0.1
@ JOL / JeuxOnLine