por lo que escuche el script que pido es facil pero de script no emntiendo un karajo y no tengo tiempo de aprender bue aca va lo que necesito: QUE UN PNJ (UN CAMPESINO) SE ACERQUE AL PJ Y LE DIGA ALGO DESPUES QUE SE VALLA A LA MIERDA Y DESAPARESCA
mensajero_ 1 es la conversacion
timy_talk es el pj
esto va en alpercibir
gracias al que me lo dio (no me acuerdo el nom,bre)
si ve esto qeu lo publique que fue el
void main()
{
object oPC = GetLastPerceived();
object oNPC = OBJECT_SELF;
//si declaras las variables seran mas rapidas de usar.
if(GetIsPC(oPC))
{
AssignCommand(oNPC, ActionStartConversation(oPC, "mensajero_1");
// Te faltaba decir quien recibe la orden (pnj) de iniciar la conversacion.
}
}
[/code:1:c3f5ba7e1b]
Esto hace que el pnj hable con el pj cuando lo vea.
Ahora para que desaparezca, deberas de poner esto en la ultima linea de la conversacion.
[code:1:c3f5ba7e1b]
void main()
{
DestroyObject(OBJECT_SELF);
}
[/code:1:c3f5ba7e1b]
Asi cuando el pj termine de hablar con el pnj, este desaparecera del modulo.
Hola a todos, ya tengo la respuesta a mi pregunta d arriba, aunq no he utilizado el mismo Script…es el siguiente…bueno mejor lo explico:
1º he creado una transaccion de area, para q cuando se pise esa transacccion el NPC se acerque e inicie una comversacion…para q esto suceda solo tienes q poner esto en la pestaña d Scripts del area d transaccion… pues en el apartado de OnEnter (cuando pisas el aread d transacion) pones este Script:
void main()
{
string sTag = “Tag del NPC q va ha hablarte”;
object oNPC = GetLocalObject(GetArea(OBJECT_SELF),”Tag de la comversacion” + sTag);
object oPC = GetEnteringObject();
if(GetIsPC(oPC) &&
GetLocalInt(oPC,”NW_L_Init” + GetTag(oNPC)) == FALSE &&
IsInConversation(oNPC) == FALSE)
{
AssignCommand(oPC,ClearAllActions());
AssignCommand(oNPC,ClearAllActions());
AssignCommand(oNPC,ActionMoveToObject(oPC));
AssignCommand(oNPC,ActionStartConversation(oPC));
}
}
Si pones esto cuando pises dicha area se te acercara el NPC y comenzara la comversacion…Luego en OnExit, pones esto para q cuando salgas de la dicha area de transaccion el NPC se vaya a un punto del area( esto a mi no me va aunq me conformo con q se acerqe a hablarte, aunq si veis en q fallo me lo decis plis), el Script es el siguiente:
void main()
{
string sTag = “Tag del NPC”;
object oExit = GetExitingObject();
if(GetTag(oExit) == sTag)
{
AssignCommand(oExit,ClearAllActions());
AssignCommand(oExit,ActionMoveToObject(GetNearestObjectByTag(“Tag del punto de Waypoint a dnd quieres q vaya(creo q es aki donde falla)” + sTag)));
}
}
Por ultimo para cuando estes en el area de transiccion q el te diga la comversacion ( creo q el espera en su respawn a q entres para hablarte )
pones esto y ya estara hecho:
void main()
{
SetLocalObject(GetArea(OBJECT_SELF),”Tag de la Comversacion” + GetTag(OBJECT_SELF),OBJECT_SELF);
}
Asi el NPC se acercara ha hablarte cuando entres en su zona d transacion y SE SUPONE ( a mi no me va) q cuando salgas d este se ira a una zona d el area en la q estas…
PD:Si em podeis ayudar con lo de q se vaya al punto indicado os lo agradeceria
Gracias y ChaO
Una cosa q se me olvido mencionra arriba, es q el dicho script q digo, lo saqe de la campaña del NWN , en concreto en el prologo, con el Pj de Pavel.
y una duda q tenia q tb se me olvio mencionar, hay un tag (creo q es un tag) q no encontre lo q era,vamos q no se dnd esta ese objeto, comveracion o lo q sea.
La etiqeta era NW_L_Init, lo encontrais en el Script de OnEnter.
Gracias , creo q ya he dicho todo
Hola Cherno. Creo que tengo la respuesta a tu problema, el de que el personaje vuelva al punto de ruta.
Prueba de modificar el script de On Exit, cambiando en la línea:
AssignCommand(oExit,ActionMoveToObject(GetNearestObjectByTag(“Tag del punto de Waypoint a dnd quieres q vaya(creo q es aki donde falla)” + sTag)));
Por ésta otra:
AssignCommand(oExit,ActionMoveToObject(GetObjectByTag(“Tag del punto de Waypoint a dnd quieres q vaya(creo q es aki donde falla)” + sTag)));
Como verás es la misma pero en vez de GetNearestObjectByTag, pon GetObjectByTag. Así lo que haces es decirle que vaya exactamente al punto que le indiques.
No te aseguro nada, aunque yo lo hice así y funciona.
También lo puedes poner en la festaña de finalizar diálogo normal e interrumpido de la conversación en vez del OnExit del Punto de ruta. Suerte y espero que te funcione.
puedo observar varios fallos en tu script.
entre ellos puedo observar que usas ActionStartConversation() y no usas el argumento de la resref de la conversacion por lo tanto inicia la conversacion predefinida en el slot conversation. Al igual que tambien metes en una variable el tag de la conversacion, y posteriormente no lo usas para nada, entonces para que lo declaras?
yo haria lo siguiente
[code:1:dcbf296f19]
void main()
{
object oPC=GetLastPerceived();
object oNPC=OBJECT_SELF;
int nVariable=GetLocalInt(oNPC,"VISTO");
int nEvent=GetLastPerceptionSeen(); //el onPerception tiene dos partes Heard y Seen entonces solo se acercara si lo ha visto y no oido.
if(nEvent==TRUE && !nVariable) {
ActionMoveToObject(OPC);
SetLocalObject(oNPC,"VISTO",1);
ActionStartConversation(oPC,"BLUERESREF");
}
}[/code:1:dcbf296f19]
Uso una variable local para tener en cuenta que no se inicie el dialogo dos veces si se cruza con el dos veces o mas.
bueno me pasaron un aparte del script
pa que el pnj vea al pj y hable con el 1 sola ves:
if (GetIsPC(GetLastPerceived()) && GetLocalInt(OBJECT_SELF, “timy_talk”) == 0)
{
ActionMoveToObject(GetLastPerceived());
ActionStartConversation(GetLastPerceived(), “mensajero_1”);
SetLocalInt(OBJECT_SELF, “timy_talk”, 1);
}
mensajero_ 1 es la conversacion
timy_talk es el pj
esto va en alpercibir
gracias al que me lo dio (no me acuerdo el nom,bre)
si ve esto qeu lo publique que fue el
[code:1:c3f5ba7e1b]
void main()
{
object oPC = GetLastPerceived();
object oNPC = OBJECT_SELF;
//si declaras las variables seran mas rapidas de usar.
if(GetIsPC(oPC))
{
AssignCommand(oNPC, ActionStartConversation(oPC, "mensajero_1");
// Te faltaba decir quien recibe la orden (pnj) de iniciar la conversacion.
}
}
[/code:1:c3f5ba7e1b]
Esto hace que el pnj hable con el pj cuando lo vea.
Ahora para que desaparezca, deberas de poner esto en la ultima linea de la conversacion.
[code:1:c3f5ba7e1b]
void main()
{
DestroyObject(OBJECT_SELF);
}
[/code:1:c3f5ba7e1b]
Asi cuando el pj termine de hablar con el pnj, este desaparecera del modulo.
como se hace eso Gonar? yo he puesto en OnPeception eso que has puesto tu y no me pirula…
tengo que poner algo mas o q debo hacer?
Saludos y asias por todo
Cherno
Hola a todos, ya tengo la respuesta a mi pregunta d arriba, aunq no he utilizado el mismo Script…es el siguiente…bueno mejor lo explico:
1º he creado una transaccion de area, para q cuando se pise esa transacccion el NPC se acerque e inicie una comversacion…para q esto suceda solo tienes q poner esto en la pestaña d Scripts del area d transaccion… pues en el apartado de OnEnter (cuando pisas el aread d transacion) pones este Script:
void main()
{
string sTag = “Tag del NPC q va ha hablarte”;
object oNPC = GetLocalObject(GetArea(OBJECT_SELF),”Tag de la comversacion” + sTag);
object oPC = GetEnteringObject();
if(GetIsPC(oPC) &&
GetLocalInt(oPC,”NW_L_Init” + GetTag(oNPC)) == FALSE &&
IsInConversation(oNPC) == FALSE)
{
AssignCommand(oPC,ClearAllActions());
AssignCommand(oNPC,ClearAllActions());
AssignCommand(oNPC,ActionMoveToObject(oPC));
AssignCommand(oNPC,ActionStartConversation(oPC));
}
}
Si pones esto cuando pises dicha area se te acercara el NPC y comenzara la comversacion…Luego en OnExit, pones esto para q cuando salgas de la dicha area de transaccion el NPC se vaya a un punto del area( esto a mi no me va aunq me conformo con q se acerqe a hablarte, aunq si veis en q fallo me lo decis plis), el Script es el siguiente:
void main()
{
string sTag = “Tag del NPC”;
object oExit = GetExitingObject();
if(GetTag(oExit) == sTag)
{
AssignCommand(oExit,ClearAllActions());
AssignCommand(oExit,ActionMoveToObject(GetNearestObjectByTag(“Tag del punto de Waypoint a dnd quieres q vaya(creo q es aki donde falla)” + sTag)));
}
}
Por ultimo para cuando estes en el area de transiccion q el te diga la comversacion ( creo q el espera en su respawn a q entres para hablarte )
pones esto y ya estara hecho:
void main()
{
SetLocalObject(GetArea(OBJECT_SELF),”Tag de la Comversacion” + GetTag(OBJECT_SELF),OBJECT_SELF);
}
Asi el NPC se acercara ha hablarte cuando entres en su zona d transacion y SE SUPONE ( a mi no me va) q cuando salgas d este se ira a una zona d el area en la q estas…
PD:Si em podeis ayudar con lo de q se vaya al punto indicado os lo agradeceria
Gracias y ChaO
Cherno
Una cosa q se me olvido mencionra arriba, es q el dicho script q digo, lo saqe de la campaña del NWN , en concreto en el prologo, con el Pj de Pavel.
y una duda q tenia q tb se me olvio mencionar, hay un tag (creo q es un tag) q no encontre lo q era,vamos q no se dnd esta ese objeto, comveracion o lo q sea.
La etiqeta era NW_L_Init, lo encontrais en el Script de OnEnter.
Gracias , creo q ya he dicho todo
ChaO
Cherno
Hola Cherno. Creo que tengo la respuesta a tu problema, el de que el personaje vuelva al punto de ruta.
Prueba de modificar el script de On Exit, cambiando en la línea:
AssignCommand(oExit,ActionMoveToObject(GetNearestObjectByTag(“Tag del punto de Waypoint a dnd quieres q vaya(creo q es aki donde falla)” + sTag)));
Por ésta otra:
AssignCommand(oExit,ActionMoveToObject(GetObjectByTag(“Tag del punto de Waypoint a dnd quieres q vaya(creo q es aki donde falla)” + sTag)));
Como verás es la misma pero en vez de GetNearestObjectByTag, pon GetObjectByTag. Así lo que haces es decirle que vaya exactamente al punto que le indiques.
No te aseguro nada, aunque yo lo hice así y funciona.
También lo puedes poner en la festaña de finalizar diálogo normal e interrumpido de la conversación en vez del OnExit del Punto de ruta. Suerte y espero que te funcione.
puedo observar varios fallos en tu script.
entre ellos puedo observar que usas ActionStartConversation() y no usas el argumento de la resref de la conversacion por lo tanto inicia la conversacion predefinida en el slot conversation. Al igual que tambien metes en una variable el tag de la conversacion, y posteriormente no lo usas para nada, entonces para que lo declaras?
yo haria lo siguiente
[code:1:dcbf296f19]
void main()
{
object oPC=GetLastPerceived();
object oNPC=OBJECT_SELF;
int nVariable=GetLocalInt(oNPC,"VISTO");
int nEvent=GetLastPerceptionSeen(); //el onPerception tiene dos partes Heard y Seen entonces solo se acercara si lo ha visto y no oido.
if(nEvent==TRUE && !nVariable) {
ActionMoveToObject(OPC);
SetLocalObject(oNPC,"VISTO",1);
ActionStartConversation(oPC,"BLUERESREF");
}
}[/code:1:dcbf296f19]
Uso una variable local para tener en cuenta que no se inicie el dialogo dos veces si se cruza con el dos veces o mas.