Efectivamente, de programación no sabía nada. Y sí, algo estoy aprendiendo gracias a ustedes. Tengo un par de amigos por aquí que me tienen prometidas unas cuantas tardes para enseñarme lo básico en cuanto a programación. Mientras, intentaré seguir avanzando poco a poco, con la ayuda de ustedes (si no os agoto antes).
Creo que, basicamente, tengo dominados los dialogos (menudo atrevimiento por mi parte decir esto), pero hay 2 factores que no controlo y están un poco aleatorios:
Resulta que, si pincho en cualquier sitio mientras habla mi actor, se va allí y se termina la conversación. Si lo hago mientras habla el otro personaje, mi actor se va allí, pero la conversación continúa.
-¿Cómo hago para que el actor no se mueva mientras dialogamos aunque pinche en el escenario?
-¿Cómo podría hacer para que se pueda mover siempre, durante todo el dialogo, sin que éste se acabe? (esta segunda opción es solo por curiosidad, ya que no le veo mucha utilidad práctica).
-¿Cómo hago para que el dialogo no se corte cuando hago click en cualquier sitio mientras mi actor habla?
Os dejo el código, por si os ayuda a entenderme:
#include "scripts\base.inc"
var hablar_coche = false;
var hablar_barco = false;
var hablar_mar = false;
var hablar_viento = false;
////////////////////////////////////////////////////////////////////////////////
on "LookAt"
{
actor.GoToObjectAsync(this); // comenzar a caminar hacia él,
Sleep(250); // esperar una décima de segundo
actor.Reset(); // y dejar de caminar.
actor.Talk("Si tenemos suerte, estoy mirando hacia el bicho en cuestión.");
actor.Talk("¡¡Y EFESTIVAMENTE!!");
}
////////////////////////////////////////////////////////////////////////////////
on "Take"
{
actor.Talk("No llego.");
}
////////////////////////////////////////////////////////////////////////////////
on "Talk"
{
actor.TurnTo(this);
Dialogo();
}
////////////////////////////////////////////////////////////////////////////////
on "LeftClick"
{
actor.GoToObject(this);
}
////////////////////////////////////////////////////////////////////////////////
function Dialogo()
{
var Responses;
var Selected;
var Loop = true;
while(Loop)
{
// preparamos las frases, hablar_barco y hablar_coche lo usamos para saber si ya ha hecho la pregunta con anterioridad y cambiar la foma de hacerla
// en función de si se ha hablado o no
// Se entiende que previamente estas variables estan declaradas globalmente e inicializadas a false, o sea:
// global hablar_barco = false; // y lo mismo con hablar_coche
// De esta forma, la primera vez que se ejecute el código, se dice la primera frase y se indica que ya se ha hablado para que las sucesivas veces
// Salga lo de "Vuelveme a contar"
if (!hablar_barco)
Responses[0] = "Hablame del barco";
else
Responses[0] = "Vuelveme a contar lo del barco";
if (!hablar_coche)
Responses[1] = "Hablame del coche";
else
Responses[1] = "Vuelveme a contar lo del coche";
Responses[2] = "Hablemos de más cosas";
Responses[3] = "Hasta luego, Lucas";
// Creamos el cuadro de conversación con las frases que hemos preparado
Game.AddResponse(0, Responses[0]);
Game.AddResponse(1, Responses[1]);
Game.AddResponse(2, Responses[2]);
Game.AddResponse(3, Responses[3]);
// Ahora lo presentamos en pantalla para que el jugador seleccione una, el resultado se almacena en Selected
Selected = Game.GetResponse();
// El actor repite lo que hemos seleccionado
actor.Talk(Responses[Selected]);
// Ahora el personaje contesta en función de la pregunta que se ha hecho y si ya se habia hecho antes o no
if(Selected==0) // Pregunta de los barcos
{
if (!hablar_barco)
{
this.Talk("Los barcos flotan");
hablar_barco=true;
}
else
{
this.Talk("Como ya te dije, los barcos flotan, excepto si tienen un agujero, claro");
}
}
if(Selected==1) // Pregunta de los coches
{
if (!hablar_coche)
{
this.Talk("Los coches van rodando");
hablar_coche=true;
}
else
{
this.Talk("Como ya te dije, los coches van rodando, excepto por cuestiones de gasolina, pinchazos y similares, por supuesto");
}
}
if(Selected==2) // mas opciones
{
this.Talk("Deacuerdo. hablemos de otra cosa.");
Loop = false;
Dialogo2();
}
if(Selected==3) // Despedida
{
this.Talk("Ta luego, cocodrilo");
Loop = false;
}
}
}
//////////////////////////////////////////////////////////////////////////////////////////
function Dialogo2()
{
var Responses;
var Selected;
var Loop = true;
while(Loop)
{
// preparamos las frases, hablar_barco y hablar_coche lo usamos para saber si ya ha hecho la pregunta con anterioridad y cambiar la foma de hacerla
// en función de si se ha hablado o no
// Se entiende que previamente estas variables estan declaradas globalmente e inicializadas a false, o sea:
// global hablar_barco = false; // y lo mismo con hablar_coche
// De esta forma, la primera vez que se ejecute el código, se dice la primera frase y se indica que ya se ha hablado para que las sucesivas veces
// Salga lo de "Vuelveme a contar"
if (!hablar_mar)
Responses[0] = "Hablame del mar, marinero";
else
Responses[0] = "Vuelveme a contar lo del mar";
if (!hablar_viento)
Responses[1] = "Hablame del viento";
else
Responses[1] = "Vuelveme a contar lo del viento";
Responses[2] = "me encantaría que me dieras un objeto";
Responses[3] = "mejor hablemos de lo que hablabamos antes";
// Creamos el cuadro de conversación con las frases que hemos preparado
Game.AddResponse(0, Responses[0]);
Game.AddResponse(1, Responses[1]);
Game.AddResponse(2, Responses[2]);
Game.AddResponse(3, Responses[3]);
// Ahora lo presentamos en pantalla para que el jugador seleccione una, el resultado se almacena en Selected
Selected = Game.GetResponse();
// El actor repite lo que hemos seleccionado
actor.Talk(Responses[Selected]);
// Ahora el personaje contesta en función de la pregunta que se ha hecho y si ya se habia hecho antes o no
if(Selected==0) // Pregunta de los barcos
{
if (!hablar_mar)
{
this.Talk("Los barcos flotan en el mar");
hablar_mar=true;
}
else
{
this.Talk("Como ya te dije, los barcos flotan en el mar...");
actor.Talk("...a menos que tengan un agujero.");
this.Talk("Claro.");
}
}
if(Selected==1) // Pregunta de los coches
{
if (!hablar_viento)
{
this.Talk("El viento silba.");
hablar_viento=true;
}
else
{
this.Talk("¿Qué mas quires saber del viento?");
actor.Talk("Su nombre.");
this.Talk("Lo siento, no lo conozco.");
}
}
if(Selected==2) // mas opciones
{
this.Talk("un poco de paciencia, mi querido padawan.");
}
if(Selected==3) // Despedida
{
this.Talk("Como prefieras.");
Loop = false;
Dialogo();
}
}
}