Archives des forums MMO/MMORPG > Neverwinter Nights > NWN - Maskado > Comment faire parler un cadavre ?
Comment faire parler un cadavre ?
Par Cassin le 16/7/2002 à 15:09:04 (#1813487)
Je suppose que le script est à mettre dans le OnUse de l'objet (après l'avoir rendu Useable).
Reste maintenant le problème du script lui-même (membre de la Quiche Ltd inside ;) )...
En jetant un oeil dans les fonctions j'en entrevois deux qui pourraient convenir : BeginConversation et ActionStartConversation.
Bon, vous allez dire que je n'ai qu'à tester les deux pour savoir laquelle marche, mais ensuite il me faut donc déclarer les variables et là ça coince toujours... :doute:
Pour BeginConversation on aint BeginConversation(string sResRef=", object oObjectToDialog=OBJECT_INVALID)
et pour ActionStartConversation on avoid ActionStartConversation(object oObjectToConverseWith, string sDialogResRef=", int bPrivateConversation=FALSE)
Que dois-je déclarer ? Et comment ?
(merci de ne pas me donner de réponse toute faite, ce n'est pas en regardant forger qu'on devient forgeron ;) )
Par Grunk le 16/7/2002 à 15:20:10 (#1813517)
le nom de la conversation c est le nom du fichier sous lequel tu l as sauvegardé sans le .extension
le oPC correspond a l objet defini par le joueur qui va parler a ton cadavre, a toi de voire comment le recuperer.
Par Cassin le 16/7/2002 à 15:45:08 (#1813650)
void main()
{
object oPC=GetLastSpeaker();
BeginConversation ("darren",oPC);
}
mais il ne se passe rien lorsque je clique sur le corps. Le script se compile et je n'ai aucun message d'erreur.
Alors, est-ce que je me suis trompé en déclarant oPC, ou bien ce script n'est pas à mettre dans le OnUsed de l'objet ? :doute:
(ou alors j'ai fais une autre erreur quichière ? :D)
Par Gargantuel le 16/7/2002 à 15:51:15 (#1813691)
object oPC=GetLastSpeaker();
Ca n'est pas la bonne fonction a lancer.
Tu es sur un onused donc tu dois utiliser la fonction qui permet de récuperer l'utilisateur de l'objet en cours.
A savoir : GetLastUsedBy()
Ceci dit, je ne sais pas si on peut faire parler un cadavre...
Tiens nous au courant :)
Par mobidique le 16/7/2002 à 15:55:02 (#1813717)
J'ai dit une connerie ayez ?
Mob'.
Par Grunk le 16/7/2002 à 15:55:07 (#1813719)
Par Amaranthe le 16/7/2002 à 15:56:43 (#1813729)
Regarde l'initialisation de ton oPC... GetLastSpeaker() soit le dernier a avoir... ?
Est ce bien ce Pc la que tu veux récupérer ?
Amaranthe.
P.S. J'apprecie bcp la facon dont tu demandes de l'aide. Cf la leçon numéro Six pour les quiches, sortie ce jour ;)
Par Cassin le 16/7/2002 à 15:59:54 (#1813754)
En outre dans l'help c'est indiqué queReturns OBJECT_INVALID if it is called by something other than a placeable or a door.
Qu'est-ce que ça veut dire, "si l'objet est appelé par autre chose qu'un placeable ou une porte" ? L'objet peut être appelé par un PJ, OK, ou par un PNJ, mais par quoi d'autre ? :doute:
Argh, je nage, c'est pas encore demain la veille où je donnerais ma démission du Club des Quiches ! :mdr:
EDIT : Houlà, y'a eu pas mal de réponses pendant que je testais ! ;)
- Oui, j'ai justement essayé de reprendre le script de la porte qui parle du chapter2 (je ne savais pas pour le reste, j'en suis pas encore là ! :D), mais ça ne marche pas... :(
- Je ne peux pas non plus faire coucher un NPC, vu que le lit n'est pas lui-même un placeable, il fait partit du tileset CityInterior, j'ai fait une "Barracks Room" (ou un truc du genre), avec des lits superposés, mais ils ne sont pas sélectionnables, donc on ne peux pas les rendre useable... :(
Par mobidique le 16/7/2002 à 16:11:32 (#1813824)
Provient du message de Cassin
j'ai fait une "Barracks Room" (ou un truc du genre), avec des lits superposés, mais ils ne sont pas sélectionnables, donc on ne peux pas les rendre useable... :(
Et tu as pu quand même poser ton plague victim sur un lit :doute: Enfin peu importe ... perso je suis pour les solutions simples rapide et de bon gout. Dans l'hypothèse ou ma suggestion est réalisable, de 1°) il y a au bout des barracks un pièce qui peut fort bien servir d'infirmerie ou de lieu de quarantaine pour un malade et de 2°) entre faire un script compliqué et faire un dortoir à la main mon choix est fait, je vote pour le dortoir avec des lits useable pour dormir dessus et d'ailleurs c'est ce que j'ai fait au bout du compte ... l'interieur barracks n'ayant pas des portes coïncidant avec le tile barracks du tile rural :eek:
M'enfin d'un autre coté c'est sûr que tu vas apprendre kkchose à vouloir le faire comme ça, c'est sûr ...
Mob'.
Par Gargantuel le 16/7/2002 à 16:11:36 (#1813826)
Par Gargantuel le 16/7/2002 à 16:12:30 (#1813830)
Par Gargantuel le 16/7/2002 à 16:12:30 (#1813831)
object oPC = GetLastUsedBy();
if (GetIsPC(oPC))
{
....
}
Comme ca tu seras sur :)ERROR: PARSING VARIABLE LIST.
Je comprends pas ce qu'il se passe. Montre nous le source stp.
Par Adalorn le 16/7/2002 à 17:11:56 (#1814122)
ActionStartConversation(oPlayer, "darren",TRUE), comme ça tu as une convers privée, en plus, BeginConversation ne sert pas à ça :
// Use this in an OnDialog script to start up the dialog tree.
// - sResRef: if this is not specified, the default dialog file will be used
// - oObjectToDialog: if this is not specified the person that triggered the
// event will be used
c'est pour quelqu'un à qui tu peux phisiquement parler!!!
Par Cassin le 16/7/2002 à 17:42:04 (#1814301)
Et tu as pu quand même poser ton plague victim sur un lit
Ben oui, tu le met en dessous et tu fais F5 pour rafraîchir, et hop, magique, il saute au-dessus du lit ! :D
Mais dans un sens tu as raison, je ne sais pas si le PJ pourra lui parler s'il est sur le lit du dessus, et vu qu'on pas le mettre entre deux... :doute:
l'interieur barracks n'ayant pas des portes coïncidant avec le tile barracks du tile rural
Oui, c'est très con d'ailleurs, mais bon...
citation :
ERROR: PARSING VARIABLE LIST.
Je comprends pas ce qu'il se passe. Montre nous le source stp.
Voilà ce que j'ai en tout et pour tout pour l'instant (sachant que je n'ai pas pu y bosser depuis tout à l'heure)
void main()
{
object oPC=GetlastUsedBy();
BeginConversation ("darren",oPC);
}
en plus, BeginConversation ne sert pas à ça :
// Use this in an OnDialog script to start up the dialog tree.
J'avais remarqué ça, mais je m'étais dit, "bah, si ça se trouve ça marchera quand même" :D
Bon, je bosserais dessus ce soir si j'ai le temps et je vous tiens au courant demain.
Par Adalorn le 16/7/2002 à 17:45:17 (#1814320)
Par Fed le 16/7/2002 à 18:02:41 (#1814408)
Il ne faut pas écrire GetlastUsedBy mais GetLastUsedBy
Le langage de script est sensible à la casse des charactères :)
Par Cassin le 16/7/2002 à 19:19:40 (#1814832)
Ton erreur est la :
Il ne faut pas écrire GetlastUsedBy mais GetLastUsedBy
Le langage de script est sensible à la casse des charactères
Je m'en suis aperçut en voulant le remplacer ;)
Bon, c'est imppec, ça marche ! Merci tous, encore une fois !
Voilà le script, que je vas aller mettre dans la liste des scripts qui marchent :void main()
{
object oPC = GetLastUsedBy();
if (GetIsPC(oPC))
{
ActionStartConversation(oPC, "NomDeLaConversation",TRUE);
}
}
Et comme je m'en doutais, je peux plus parler au personnage lorsqu'il est sur le lit, il est inaccessible.
J'ai donc placé un trigger, comme suggéré (j'y avais pensé également) et placé le script sur le OnEnter, mais ça ne marchait pas, il ne se passait rien.
Après quelques tatonnements j'ai trouvé la fonction GetEnteringObject au lieu de GetLastUsedBy et ça marche.
Désolé de refaire remonter ce thread
Par BlackWings le 17/8/2002 à 11:06:25 (#1973984)
void main()
{
object chaise;
object oPC = GetLastUsedBy();
//le tag de la chaise
chaise = GetObjectByTag("TroneKlepen");
//fait agir l'object le plus proche de la chaise cad le joueur
//l'action est de s'assoir
AssignCommand(GetNearestObject(OBJECT_TYPE_CREATURE,chaise,1),ActionSit(chaise));
//Le trone parle seulement au PC qui s'est assis sur lui
ActionStartConversation(oPC,"cs_trone_tl",TRUE);
}
Dans le onUsed de mon trone.
Le PC ne s'asseoit plus depuis que j'ai mis:
//Le trone parle seulement au PC qui s'est assis sur lui
ActionStartConversation(oPC,"cs_trone_tl",TRUE);
Mais la conversation elle ne se déclenche pas non plus.
Dans End Conversation Script, à normal j'ai mis le script suivant:
void main()
{
object oPC = GetLastUsedBy();
AssignCommand(oPC, JumpToLocation(GetLocation(GetWaypointByTag("WpTemple" ))));
}
Une :eureka: ??
Par BlackWings le 17/8/2002 à 11:57:35 (#1974141)
Quand j'ai installer les banc à partir du blueprint. Je les ai mis un par un.
Le premier à droite de la porte et le second à gauche.
Si je souhaite m'asseoir sur celui de droite (le premier) alors il va va s'asseoir sur celui de gauche(le deuxieme posé).
Par contre si je souhaite m'asseoir sur celui de gauche, alors là, il s'asseoir sur le bon, celui de gauche.
Il semblerait donc que le getNearest fonctionne mais que le toolset considère le dernier posé comme le seul banc valable. pourtant ils sont identiques :(
Par Kemay le 17/8/2002 à 12:23:29 (#1974257)
void main()
{
object oChair = GetObjectByTag("TroneKlepen");
object oPC = GetLastUsedBy();
if( GetSittingCreature(oChair) == OBJECT_INVALID )
{
AssignCommand(oPC,ActionStartConversation(oChair,"cs_trone_tl",TRUE));
AssignCommand(oPC,ActionSit(oChair));
}
}
Pour le teleport, si tu utilise un Waypoint pour obtenir une localisation tu as meilleur temps d'utiliser JumpToObject que JumpToLocation :void main()
{
AssignCommand(GetPCSpeaker(), JumpToObject(GetWaypointByTag("WpTemple")));
}
Par Kemay le 17/8/2002 à 12:33:31 (#1974293)
Quand j'ai installer les banc à partir du blueprint. Je les ai mis un par un.
Je comprends pas bien ce que tu appelles "installer à partir du blueprint".Si je souhaite m'asseoir sur celui de droite (le premier) alors il va va s'asseoir sur celui de gauche(le deuxieme posé).
Par contre si je souhaite m'asseoir sur celui de gauche, alors là, il s'asseoir sur le bon, celui de gauche.
Il semblerait donc que le getNearest fonctionne mais que le toolset considère le dernier posé comme le seul banc valable. pourtant ils sont identiques
Il y a effectivement des problèmes avec les fonctions GetNearest... mais à priori pas dans ce genre de conditions. De toute façon, tu n'as pas besoin d'utiliser GetNearestObject pour faire s'asseoir un PJ sur un banc :
Dans l'event onUsed de tes bancs :void main()
{
object oChair = OBJECT_SELF;
object oPC = GetLastUsedBy();
if( GetSittingCreature(oChair) == OBJECT_INVALID )
AssignCommand(oPC,ActionSit(oChair));
}
Par BlackWings le 17/8/2002 à 12:36:27 (#1974301)
Il fallait y penser :)
Par BlackWings le 17/8/2002 à 16:54:08 (#1975289)
Et voilà!
Mon trône lance une conversation en fonction de la classe du PC.
Si le PC est un moine il le téléporte vers une autre zone sur un Waypoint.
Le PC est alors assis sur le trône au moment de la téléportation.
Le Waypoint est en plein milieu de la zone.
Le PC y apparaît bien... seulement une demi seconde avant de réapparaître sur un mur de la même zone, position assis... mais assis sur rien.
Je peux le déplacer ensuite et il tombe du mur directement...
Mais, snif alors :( , pourquoi qu'il est sur ce mur?
j'ai tenté de lui faire un move sur un second waypoint en face du premier, histoire de le mettre debout. Rien n'y fait, il se retrouve assis comme une quiche sur le mur :sanglote:
Cà fait 2h que je cherche et je trouve toujours pas où est le problème.
Please HEELLLPP :sanglote: :sanglote: :D
Par Jedaï le 17/8/2002 à 21:22:20 (#1976383)
edit : oups désolé j'avais pas vu la deuxième page
Par Jedaï le 17/8/2002 à 21:28:39 (#1976409)
Par BlackWings le 18/8/2002 à 20:23:45 (#1980495)
AssignCommand(oPC,ClearAllAction());
Après ActionSit();
:D
JOL Archives 1.0.1
@ JOL / JeuxOnLine