Bienvenue sur JeuxOnLine - MMO, MMORPG et MOBA !
Les sites de JeuxOnLine...
 

Panneau de contrôle

Recherche | Retour aux forums

JOL Archives

[Script] Faire parler n'importe quel objet

Par Daynos le 14/10/2002 à 14:45:22 (#2333413)

Posté par Cassin :


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)

Je me suis planté d'endroit pour poster :D

Par coolstar le 11/11/2002 à 12:16:50 (#2533367)

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

...


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)

Utiliser ton script, Coolstar, peut avoir des conséquences innattendues, par exemple je me demande comment réagit un NPC auquel une porte s'adresse....
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)

Provient du message de coolstar
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)

je savais bien que je dirais une connerie... :D


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)

Plus fort faire parler un objet sans utiliser de OnUsed sans mettre l'objet en usable et sans utiliser de trigger ...

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)

Pour moi faire systématiquement une vérif "GetIsPC" lorsqu'on lance une conversation par un script est un bon réflexe à prendre...

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)

ceci dit le test n'est pas nécessaire si l'on fait un GetFirstPC ...

Par coolstar le 22/11/2002 à 11:17:18 (#2617624)

Tant qu'on y est les gars... sauriez-vous comment faire parler les Objets de l'Equipement en les Sélectionnant ? (Epées/Objets divers/Objets mystérieux... comme dans Planescape par exemple...) :confus:

:merci:

Par mobidique le 22/11/2002 à 11:26:43 (#2617689)

Y m'semblais que tu avais déjà eu la réponse ou alors je l'ai lue autre part ... Il faut je crois passer par la notion de unic power ... Pour cela regarder comment le dialogue avec la DM wand du DM helper est foutue, ça devrait pas être dur a reproduire.

Par coolstar le 22/11/2002 à 23:15:46 (#2623224)

Huummm... désolé, j'avais pas saisi la première fois que ma question avait été abordée... mais après relecture... k! :D


Merci à Jedaï... et à toi aussi mobi. :merci:

JOL Archives 1.0.1
@ JOL / JeuxOnLine