script para que un Pnj salga corriendo
Hola: Como hago para que al hablar con una personay que al finalizar el diálogo se marche corriendo. También me gustaría saber como hago para que al abrirse una puerta al hablar con un Pnj le aparezca una frase, para conruniuar con un diálogo. Ej. Una persona está encarcelada. Entre rejas hablas un diálogo. al rescatarla y abrirle la puerta vuelves hablar con ella y sale otro diálogo. Al finalizarlo se va corriendo.
Activos en NWN
Los más activos en Scripting
Subforos
Neverwinter Nights
A ver, para que salga corriendo primero tienes que definir hacia dónde sale corriendo. Esto puedes hacerlo colocando un punto de ruta en el mapa y asignándole de etiqueta lo que prefieras, para el ejemplo le voy a llamar “DESTINO”. Luego, en el diálogo, donde pone [FINALIZAR DIÁLOGO] colocas como “acción emprendida” el siguiente script, más o menos:
at_correr_destino:
void main()
{
object oPC = GetPCSpeaker();
object oCorredor = GetNearestObjectByTag(“corredor”,oPC);
object oBanderaDestino = GetObjectByTag(“DESTINO”);
Y bueno, tienes que alterar las etiquetas a tu gusto, pero más o menos debería ir.
En cuanto al segundo caso, es un poco más fácil, tienes que hacer que cuando se abra la puerta una variable del personaje encarcelado cambie de valor. Por ejemplo, en el guión OnOpen de la puerta podrías poner el script:
void main() {
object oEncarcelado = GetObjectByTag(“Encarcelado”);
SetLocalInt(oEncarcelado, “liberado”, 1);
}
Luego, te vas al archivo de la conversación con el preso, y allí escribes los dos diálogos: una rama de la conversación con él encarcelado y la otra con el preso ya liberado. Y en la primera rama pones como script de “El texto aparece cuando…” algo parecido a lo siguiente:
int StartingConditional() {
object oEncarcelado = GetObjectByTag(“Encarcelado”);
if(GetLocalInt(oEncarcelado, “liberado”) == 0)
retun TRUE;
return FALSE;
}
De esta manera, creo que no tendrías muchos problemas.
Un saludo.
[/quote]
Como dice Imri, es mejor explicar debidamente como proceder para hacer un script que no darle hecho para copiar y pegar, eso es lo peor porque no se aprende.
En mi opinion, los scripts de Auron no estan mal pero yo los haria de otra manera, me explico:
No entiendo els entido que tiene ese AssignCommand(). Ademas ese script lo que haria es que el PNJ se pone a correr y se quedaria ahi pantao en el wp “destino”.
Tendras que hacer un DestroyObject(OBJECT_SELF), o si lo quieres en otro sitio pues ActionJumpToPoint. Pero hazlo todo con Acciones, pues asi no te hara una cosa sin que acabe la otra, sino puedes calcular los segundos que tarda en llegar al WayPoint y hacer que se destruya al pasar esos segundos (esto va bien porque si hay alguna puerta o algo en medio pues que no se quede ahi atrancao).
El scrtip de la variable esta bién.. bueno hay 1 pequeño error de sintaxi con el “retun TRUE;” seria “retu[b:4a082840c8]r[/b:4a082840c8]n TRUE;” y el “return FALSE;”, deberia ir fuera del condicional, sino no tiene sentido.
[color=red:3101bef1ef] Contestando a lagarto [/color:3101bef1ef]
Permitidme que me salga un poco del tema…
[quote:3101bef1ef]Como dice Imri, es mejor explicar debidamente como proceder para hacer un script que no darle hecho para copiar y pegar, eso es lo peor porque no se aprende.[/quote:3101bef1ef]
Pues es muy probable que no le falte razón a Imri, pero el hombre pidió un script, y yo le di un script. Ahora bien, los scripts que puse son muy básicos así que xavi debería experimentar con ellos y ampliarlos un poco más. Por ejemplo, haciendo que el personaje desaparezca al llegar a DESTINO o salte (jump) a otra área del módulo, como comentas.
[quote:3101bef1ef]No entiendo els entido que tiene ese AssignCommand()[/quote:3101bef1ef]
Lo pongo para asignar la acción en cuestión al corredor, pero igual no hace falta. No sé mucho de scripting, y me apunté a este foro para aprender y preguntar dudas. Dime qué es lo que no entiendes.
[quote:3101bef1ef]El scrtip de la variable esta bién.. bueno hay 1 pequeño error de sintaxi con el “retun TRUE;” seria “return TRUE;” y el “return FALSE;”, deberia ir fuera del condicional, sino no tiene sentido.[/quote:3101bef1ef]
Bueno, vale. Suelo poner “retun” en vez de “return”, aunque me esfuerzo por evitarlo. En cuanto al “return FALSE”, aunque por la indentación no se aprecie, está verdaderamente fuera del if.
Un saludo.
PD: Por cierto, ¿cómo hacéis para hacer las indentaciones en el código que mostráis en el foro?
[/quote]
Bueno esta respuesta parecia un poco de pike, pero lo que escribi no era pa joder.. solo era un comentario.
No se que quiere decir “indentacion” pero creo que te refieres al [ code ][ /code ] (sin espacios)
Lo de assign comando dije que no entendia pq lo habias puesto, porque en ese script no s necesario.
Pero yo lo que te digo no es que sea verdad… quiza me equivoque io jeje.. io tb estoy aqui aprendiendo eh
[color=red:ff50f04a6b]Respondiendo a Lagarto[/color:ff50f04a6b]
Nada nada. Estoy muy enfadado y …
Bueno, es BROMA
Gracias por lo [ code ][ /code ] (sin espacios) .
Y por último, una duda que quiero aclarar:
[quote:ff50f04a6b]Lo de assign comando dije que no entendia pq lo habias puesto, porque en ese script no s necesario. [/quote:ff50f04a6b]
Yo entiendo que SÍ hay que usar el AssignCommand, ya que el script se está ejecutando sobre el diálogo. Entiendo que si no se pone, es como si ordenases ejecutar la acción al diálogo, y evidentemente no queremos que el diálogo se eche a correr.
Un saludo.[/quote]
op… quiza si -_- pensaba que el assigncommand era pa anular la action queue.. pf no se ia lo mirare