7
« on: October 27, 2010, 03:39:52 PM »
Hi, (sorry but my english is not very good) I'm new here and I have a few weeks trying to create a game, my problems are several, some of these are:
- How do I make a NPC that is in a room to react and do not let me pick up an object? or how to make an NPC speak if I pick up an object, I try some code but no one runs well, the NPC has a code in Scene_init like this:(thanks to HelLRaiseR for the code)
var NPC = Scene.LoadActor("actors\molly2\molly2.actor");
NPC.SkipTo(300, 300);
var cocineroOcupado = false; // Para saber si el cocinero
var tiempoInicio = 0;
var sitioCocinero = 0; // 0 esta en la mesa, 1 esta en la despensa
while (true) // Este bucle se va a repetir siempre.
{
if (NPC.Ready) // Esto comprueba si un actor esta en su evento Idle, o sea no esta haciendo nada como andar, hablar u otra cosa
{
if(cocineroOcupado == false)
{
// Puesto que entramos aqui, el cocinero no esta haciendo nada, o sea, esta en la animacion idle, cortando sus cosas en la mesa.
cocineroOcupado = true; // Le ponemos como ocupado para que no salte el evento constantemente.
tiempoInicio = Game.CurrentTime; // Inicializamos el tiempo inicial, que es desde donde empezamos a contar para lanzar el evento cada x tiempo.
}
else
{
if (Game.CurrentTime - tiempoInicio > 10000) // Ya estando ocupado entrara por aqui y comprobamos si han pasado los 30 segundo, tiene puesto 30.000 porque WME cuenta en milisegundos.
{
if (sitioCocinero == 0) // Si el cocinero esta en la mesa
{
NPC.Direction=DI_UP;
NPC.GoTo(485,525); //Le decimos al cocinero que vaya a la despensa.
NPC.Active = false;
Sleep(3000);
NPC.Direction=DI_DOWN;
NPC.Active = true;
sitioCocinero = 1; // Marcamos como que esta en la despensa
}
}
if (Game.CurrentTime - tiempoInicio > 20000) // Ya estando ocupado entrara por aqui y comprobamos si han pasado los 30 segundo, tiene puesto 30.000 porque WME cuenta en milisegundos.
{
if (sitioCocinero == 1) // Si el cocinero esta en la mesa
{
switch(Random(0, 2))
{
case 0:
// say something and wait
NPC.Talk("Que asco de vida!!! todo el dia cocinando!!!");
Sleep(100);
break;
case 1:
// walk around
NPC.GoTo(300,550);
Sleep(100);
NPC.GoTo(590,550);
Sleep(100);
break;
case 2:
// play some animation
NPC.GoTo(534, 535); //Le decimos al cocinero que vaya a la despensa.
NPC.GoTo(469, 569);
Sleep(100);
break;
}
tiempoInicio = Game.CurrentTime;
sitioCocinero = 0;
}
}
}
}
else
{
cocineroOcupado = false; // Si el cocinero esta haciendo algo como andar o hablar lo ponemos ocupado para que esto no interfiera con los eventos de WME.
}
Sleep(100); // Hacemos una parada, esto es importante para darle tiempo a WME para que procese otros eventos, si no se embucla y se cuelga.
}
the code works but if I want the NPC says something if I take an object the program give me an error
the book.script is
on "Take"
{
actor.Talk("blah");
NPC.Talk("blah");
}
but NPC don´t talk anything
can you help me?
thanks