Please login or register.

Login with username, password and session length
Advanced search  

News:

This forum provides RSS feed. To query recent posts use this url. More...


Pages: 1 [2]  All

Author Topic: Como hago que hable el personaje?  (Read 13769 times)

0 Members and 1 Guest are viewing this topic.

HelLRaiseR

  • I don't want to make a Monkey Island clone :(
  • Moderator
  • Frequent poster
  • *****
  • Karma: 4
  • Offline Offline
  • Posts: 270
    • View Profile
    • Adventure Box Studios
Re: Como hago que hable el personaje?
« Reply #15 on: October 23, 2010, 02:41:06 AM »

No te entiendo muy bien, pero desde luego poner el control del cocinero en el script de un objeto no es buena idea ya que el script no se ejecutara hasta que no se produzca una interaccion con el objeto, de ahi ponerlo en el scene_init, cuando se inicia la escena.

Lo de que solo te deje coger el salero cuando el cocinero este con el active = false me parece de lo mas extraño, pero vete a saber que andarás haciendo  :D :D :D :D
Logged
Regards,

    Fernando

YO

  • Our first adventure:
  • Lurker
  • *
  • Karma: 0
  • Offline Offline
  • Gender: Male
  • Posts: 32
    • View Profile
Re: Como hago que hable el personaje?
« Reply #16 on: October 23, 2010, 03:42:47 PM »

Por un post anterior deje una imagen de la cocina, hay un salero y quiero cogerlo pero mientras el cocinero este en la cocina no deberia de poder cogerlo, tipico puzzle, hacer algo para que el NPC se vaya y puedas coger algo,

he puesto al cocinero en el salero porque cuando lo ponia en el scene_init, funcionaba bien pero si yo queria que hablase el cocinero cuando iba a coger el salero me da un error, que no me dice cual es, al poner el cocinero en el salero, no me da ningun error yo voy con mi actor a coger el salero y el ejecuta la accion de caminar y decirme no lo toques, y no lo cojo, cuando se va a la despensa, o sea, NPC.Active=false yo puedo coger el salero, ahh y el cocinero me aparece desde el principio, sin que yo aga nada, o sea, funciona todo bien pero no en el Scene_init si no en la entity salero, a mi me parece muy raro que no funcione el codigo en el scene init mira te pongo el codigo que tengo puesto en el salero.script:
Code: [Select]
global Statecocina;


////////////////////////////////////////////////////////////////////////////////

var NPC = Scene.LoadActor("cocinero\cocinero.actor");
NPC.SkipTo(469, 569);

// scene state


////////////////////////////////////////////////////////////////////////////////
// setup scene according to state variables
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.PlayAnim("cocinero\dd\machete.sprite");
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.
}


on "Take"
{
  if (NPC.Active==true)
{
Game.Interactive=false;
actor.GoToObject(this);
    actor.TurnTo(DI_UP);
  //
    NPC.GoTo(550, 542);
NPC.Talk("Eh, TU!!!!");
NPC.Talk("No me toques la sal que la necesito");
Game.Interactive=true;
    }
else
{
actor.GoToObject(this);
    actor.TurnTo(DI_UP);
 ////////////
    Game.TakeItem("sal");
    var Entsalero = Scene.GetNode("salero");
    Entsalero.Active = false;
 
}
}
como ves es un poco de tu codigo bueno bastante, y lo he puesto que las animaciones sean un poco aleatorias, para darle un poco de vidilla pero en el scene_init no he puesto nada y eso es lo que me parece muy raro, porque ahora yo no puedo hacer que el cocinero por ejemplo no me deje coger el jamon que hay encima de la mesa, si esto mismo lo pongo en el Scene_init me da errores bueno a parte de que lo de ON "Take" lo dejaria en el salero,
si tu sabes como hacer que poniendo el codigo del cocinero en el Scene_init te diga que no puedes coger el salero te lo agradeceria mucho
Logged
Henry y El libro magico, proximamente sacaremos la demo en español...
Henry and the magic book, demo coming soon in English
Pages: 1 [2]  All
 

Page created in 0.126 seconds with 22 queries.