Please login or register.

Login with username, password and session length
Advanced search  

News:

Latest WME version: WME 1.9.1 (January 1st, 2010) - download

Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Messages - YO

Pages: 1 [2] 3
16
Technical forum / Re: NPC and objects
« on: October 27, 2010, 07:44:16 PM »
I dont know how to make a global NPC, in book.script only write this:
Code: [Select]
var NPC = Scene.GetNode("NPC");
////////////////////////////////////////////////////////////////////////////////
on "Take"
{
  actor.Talk("blah");
  molly2.Talk("blah");
}

how i wrote that, its very dificult to me
XD



17
Technical forum / NPC and objects
« 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)
Code: [Select]
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
Code: [Select]
on "Take"
{
  actor.Talk("blah");
  NPC.Talk("blah");
}
but NPC don´t talk anything

can you help me?
thanks

18
Foro técnico / Re: Como hago que hable el personaje?
« 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

19
Foro técnico / Re: Como hago que hable el personaje?
« on: October 22, 2010, 03:50:20 PM »
mmm cosa que me a pasado un poco rara, en vez de en el scene_init al cocinero lo he puesto en el salero, ya sabes yo pruebo mil cosas asta que sale lo que yo quiero.... pues bien cuando lo ponia en el scene_init yo iba a coger el salero y le habia puesto que el NPC hablara pues me daba fallo, asi que lo puse todo el script del cocinero en el salero, ahora solo me deja cogerlo si el cocinero esta en modo Active= false de otra forma el tio no me deja cogerlo, se hace asi o hay alguna otra forma?¿?¿? ahora el cocinero funciona bien pero me parece raro que tenga que ponerlo en el salero para que no me deje cogerlo, nose.... ya me diras

20
Foro técnico / Re: Como hago que hable el personaje?
« on: October 21, 2010, 08:01:23 PM »
cierto, y la verdad es que estoy aprendiendo bastante, por lo demas sigo esperimentando pero siempre me produce fallos, esto de no saber programar es lo que tiene

21
Foro técnico / Re: Como hago que hable el personaje?
« on: October 21, 2010, 04:25:07 PM »
Lo del cocinero muchisimas gracias, ya funciona bien y desaparece y todo, pero solo funciona si entro en la habitacion, si no entro el tio no se mueve, bueno creo, si no entro no lo veo, jejeje, me gustaria que pasase a la despensa, y como que da de comer a un bicho, pero que lo haga siempre, vamos, que si yo estoy en la cocina y el se va, vaya a la despensa yo y lo vea alli,
mas cosas que para mi son quebraderos de cabeza, jeje ahi van
-me gustaria que algun personage campara a sus anchas por el castillo, es decir, que vaya a su bola cambiando de habitaciones, pero que aunque el actor o sea el jugador no este ahi, el personaje vaya de sala en sala tipo Lure of the tempress que tiene muchos NPC que andan a sus anchas por la calle entran en los bares etc...
-no consigo lo siguiente, tengo una habitacion, en la que para salir he de usar una llave en la cerradura, pues bien, cojo la llave de un hueco, ese hueco desaparece, bien, uso la llave en la cerradura, bien, abro la puerta, bien, sigo mi camino, hasta ahi todo bien, pero ahora bien, la llave la destruyo, entonces vuelvo a la habitacion y la entity hueco vuelve a estar, y puedo volver a coger la llave, se reinicia la habitacion, no guarda los estados, y he mirado en el tutorial con el libro y no veo nada referente a ello, y su libro no se vuelve a poner en la mesa...yo incluso puedo coger llave incluso con una llave en el inventario, dios cuantos problemas.........
-otra cosa mas, sigo en la cocina, joer cuanto trabajo me esta dando la cocina, cuando coja la sal quiero que solo se pueda cojer cuando el cocinero no este, y si esta que hable y diga x ej. eso es mio... no se algo asi, y si ves tengo un horno, pues quiero que al pulsar el boton rojo se apague el fuego, y si pulso se encienda, he intentado ponerlo pero me da muchos fallos, supongo que sea por variables no se  ::slug bueno seguire probando y dibujando mas escenas, y personajes que eso lo hago bastante rapido, 3dsmax, photoshop y a correr, jejeje, los personajes no esos son 2d todo
gracias por responderme a todo!!!

22
Foro técnico / Re: Como hago que hable el personaje?
« on: October 20, 2010, 03:18:29 PM »
ya funciona!!!! bueno, solo va de una direccion a otra pero un pequeño avance es muy gratificante!!!! he hecho algunos cambios en tu codigo porque me daba ciertos errores
Code: [Select]
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 > 30000) // 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.GoTo(397,547); //Le decimos al cocinero que vaya a la despensa.
                    sitioCocinero = 1; // Marcamos como que esta en la despensa
                }
            }
            if (Game.CurrentTime - tiempoInicio > 40000) // 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
                {
                    tiempoInicio = Game.CurrentTime; // Como han pasado los 40 segundos(30 del evento + 10 en la despensa), ponemos el tiempo a 0
                    NPC.GoTo(469, 530); //Le decimos al cocinero que vaya a la despensa.
                    sitioCocinero = 0; // Marcamos como que esta en la mesa
                }
            }
        }
    }
    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.
}
cambie el walk por un goto y en if (sitiococinero el 2º lo he puesto en =1) ahora solo me falta averiguar como hacer que desaparezca o que cambie a otra escena las 2 cosas me son muy utiles
y luego que si quiero coger la sal me diga que es suya y no pueda cogerla, ire probando cosas
gracias!!!

23
Foro técnico / Re: problema al principio del tutorial (MyScene)
« on: October 20, 2010, 02:25:14 PM »
pero lo estas haciendo directamente en el tutorial? esque para que aparezca en donde eliges los tutoriales tienes que poner codigo, empieza uno nuevo, yo sq no he echo nunca ese tutorial, miro el codigo e intento recrearlo en mi propio juego
XD

24
Foro técnico / Re: problema al principio del tutorial (MyScene)
« on: October 20, 2010, 01:35:08 PM »
prueba a ponerla como startup scene en el programa a la izquierda en el panel en game settings espero ayudarte

25
Foro técnico / Re: Como hago que hable el personaje?
« on: October 20, 2010, 01:09:19 PM »
muchas gracias, lo voy a probar ahora mismo y jugare un poco con el codigo a ver q consigo, esto de no tener ni idea de programar es lo que tiene, a ver si pongo alguna captura para que veas como va el mini proyecto :), yo he probado un codigo que encontre x ahi y me funciona pero.... al hablar al principio iba bien pero no dejaba de hacer las animaciones que el quiere, mientras yo le estoy hablando, y eso no le gusta mucho al programa y me da un error y se quita lo que es el juego, el codigo es este:
Code: [Select]
global Statecocina;
global NPC;
// endless loop

while(true)
{
    // choose a random action
    switch(Random(0, 3))
    {
        case 0:
        // say something and wait
        this.Talk("Que aburrimiento!!!");
        Sleep(2000);
        break;
      
      
        case 1:
      // walk around
      this.GoTo(423, 543);
      Sleep(2000);
      this.GoTo(575, 539);
      Sleep(2000);
      this.GoTo(481, 542);
      break;
      
    case 2:
      // play some animation
      this.PlayAnim("cocinero\dd\machete.sprite");
      break;

    case 3:
      // do nothing for a while
      Sleep(3000);
      break;  
    }
if (selected=)
}

//////////////////////////////////////////////////////////////////////////////////
on "Talk"
{
  walkAround().false;
  actor.GoTo(880 ,700);
  this.GoTo(550, 542);
  Game.Interactive = false;
  // greetings
  if(!Statecocina.TalkedToNPC) actor.Talk("Hello!");
  else actor.Talk("Hi, it's me again.");
  this.Talk("Hello, miss.");

  // set the flag, so that we know we've already talked to him
  Statecocina.TalkedToNPC = true;

  // and let the dialogue begin
  NPCDialogue();

  // restore interactivity
  Game.Interactive = true;
 
}
////////////////////////////////////////////////////////////////////////////////
function NPCDialogue()
{
  var Responses;
  var Selected;

  var Loop = true;

  while(Loop)
  {
    // prepare the sentences
    Responses[0] = "Who are you?";
    Responses[1] = "What are you doing here?";
    Responses[2] = "What can you tell me about the Wintermute Engine?";
    Responses[3] = "I have to go.";

    // fill the response box
    Game.AddResponse(0, Responses[0]);
    Game.AddResponse(1, Responses[1]);
    Game.AddResponse(2, Responses[2]);
    Game.AddResponse(3, Responses[3]);

    // let the player choose one
    Selected = Game.GetResponse();

    // let the actor say the selected sentence
    // (that's why I use the array for storing the sentences)
    actor.Talk(Responses[Selected]);

    // now let the Old Guy reply depending on the selected sentence
    if(Selected==0)
    {
      this.Talk("My name's not important.");
      actor.Talk("Oh... OK");
    }
    else if(Selected==1) this.Talk("I'm here to answer questions about the Wintermute Engine.");
    else if(Selected==2)
    {
      this.Talk("What would you like to know?");
      // go to the second branch of dialogue
      NPCDialogue2();
    }
    else if(Selected==3)
    {
      this.Talk("OK, bye.");
      Loop = false; // we want to end the dialogue
    }
  }
}



////////////////////////////////////////////////////////////////////////////////
function NPCDialogue2()
{
  var Responses;
  var Selected;
  var Loop = true;

  while(Loop)
  {
    // prepare the sentences
    Responses[0] = "What is it?";
    Responses[1] = "Is it any good?";
    Responses[2] = "Why is it called 'Wintermute'?";
    Responses[3] = "That's all I wanted to know about the Wintermute Engine.";

    // fill the response box
    Game.AddResponse(0, Responses[0]);
    Game.AddResponse(1, Responses[1]);
    Game.AddResponse(2, Responses[2]);
    Game.AddResponse(3, Responses[3]);

    // let the player choose one
    Selected = Game.GetResponse();

    // let the actor say the selected sentence
    // (that's why I use the array for storing the sentences)
    actor.Talk(Responses[Selected]);

    // now let the Old Guy reply depending on the selected sentence
    if(Selected==0)
    {
      this.Talk("As far as I know it's a piece of software, that allows you to create you own adventure games.");
      this.Talk("Although I don't understand why would anyone want to do it, since the point&click adventures are dead.");
      actor.Talk("*ahem*");
    }
    else if(Selected==1)
    {
      this.Talk("I dunno. I never used it myself. You'll have to find out yourself.");
      actor.Talk("OK, I'll try.");
    }
    else if(Selected==2)
    {
      this.Talk("Well I don't know for sure...");
      this.Talk("But I think it has something to do with the author's obsession for cyberpunk and that kind of crap.");
      actor.Talk("I *still* don't understand. Oh well, nevermind.");
    }
    else if(Selected==3) Loop = false;
  }
}



////////////////////////////////////////////////////////////////////////////////
si pongo solo lo de while... funciona, bueno funcionaba, ahora no porque habre cambiado algo(vaya lio que tengo :() y si pongo solo lo de on talk tambien funcionaba, pero juntos el programa explota!!! me dice que ha habido un error inesperado y se tiene que cerrar,
como ves lo del dialogo es tal cual el de la demo cambiado por mi cocinero, para que voy a cambiar nada de lo que habla si no se si funciona perderia el tiempo, haber si consigo hacer que el cocinero pueda saltar a otra Room


Uploaded with ImageShack.us
un saludo y muchas gracias por responder, pero viendo que no tengo mucha idea de programar, vamos ninguna, te dare mucha mas guerra!!!

26
Foro técnico / Re: Como hago que hable el personaje?
« on: October 18, 2010, 05:09:58 PM »
vale, muchas gracias, mas problemas que me encuentro.... dios, cuantos hay, un personaje NPC, lo que quiero hacer es un poco chungo, creo, es un cocinero, quiero que esté detras de una mesa, solo se le ve de barriga para arriba, supuestamente, tiene que entrar y salir de la despensa, ir a la mesa, dar golpes con un cuchillo a un objeto, y volver a la cocina, tambien tiene que poder hablarse con el, lo de hablar y que este ahi lo he conseguido como en el tutorial, vamos en la demo esa del juego, pero me encuentro los siguientes fallos y puedo hablar con el, he echo un copia pega del oldguy y le e cambiado todos los parametros necesarios, pero no se como hacer que este a su bola haciendo sus animaciones, supongo que sea algun script chungo o algo asi,
muchas gracias por responder a todo

27
Foro técnico / Re: Como hago que hable el personaje?
« on: October 13, 2010, 01:08:00 PM »
haber me explico, he usado unos png para hacer un sprite de una puerta que se habre y tengo un pasillo con 6 puertas, al colocarlas no ha habido forma de que el mismo sprite lo pusiera en todas las puertas, he hecho png nuevos con el tamaño nuevo, si una era al 100% la otra la e echo en photoshop al 50% y asi, manejando png nuevos, no cogiendo los que ya tenia y escalandoles en el programa en cuestion, lo haces tu asi o se pueden escalar en el mismo wintermute?
gracias por responder

28
Foro técnico / Re: Tengo problemas con el menu
« on: October 08, 2010, 11:18:30 PM »
ya encontre el problema y la solucion me faltaba un script

29
Foro técnico / Tengo problemas con el menu
« on: October 08, 2010, 03:36:55 PM »
Bueno mas que problemas es que directamente le doy boton derecho del raton y no sale nada, no se como ponerlo para que salga ni donde ponerlo,
espero que podais solucionarme el problema
gracias ::slug

30
Foro técnico / Re: Como hago que hable el personaje?
« on: October 07, 2010, 04:10:50 PM »
bueno lo de la primera puerta arreglado, era un fallo de entendimiento entre el programa y yo, despues de amenazarle a confesado como se hacia, jeje, es broma, lo e solucionado poniendo una puerta.sprite en vez de lo que tenia que era puerta.png, me falta averiguar lo de las dimensiones de las puestas

Pages: 1 [2] 3

Page created in 0.051 seconds with 19 queries.