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 - bamyito

Pages: 1 [2] 3 4
16
Ruta relativa corregida, y variables globales entrada corregidas. Y la maldita basura sigue desapareciendo cuando salgo y vuelvo de la scene...  >:(

He intentado hacer otro caso de objetos que se combinan, cambian los sprites de determinados objetos de la scene y obtengo otros objetos diferentes. Y seguro que me estoy equivocando en una chorrada, pero no funciona.
lo que me gustaría que me dijeseis es: ¿cual es el mejor método para solucionar estas "interacciones"? Yo he usado el método por el cual conseguí encender la fuente, que cambiase de sprite, usar un objeto con ella y demás. Luego lo probé en la basura, y ya conoceis los resultados. Pues bien, ahora he probado con una chimenea, y me da errores en las partes que lo tengo dividido para que diga y haga cosas diferentes dependiendo de su sprite (al igual que hacía con la fuente), en este caso, en las funciones "on jarrolleno" y "on lookAt". El resto de órdenes sí que funcionan bien.
Code: [Select]
#include "scripts\base.inc"


////////////////////////////////////////////////////////////////////////////////
on "LookAt"
{
 Game.Interactive = false;
 
  switch(this.GetSprite())    //  Establecemos el "sprite" de la fuente como variable a comparar.
  {
  case "scenes\new_scene\fuegoon.sprite":    // Si la fuente tiene su "sprite" por defecto.
  actor.TurnTo(this);
   actor.Talk("El fuego ese está muy fuerte.");
break;    // ¡Línea importante! Nunca la olvides.

  case "scenes\new_scene\fuegooff.sprite":    // Si la fuente ya tiene su otro "sprite".
  actor.TurnTo(this);
actor.Talk("Solo han quedado algunas ascuas en el fondo.");
break;
  }
   Game.Interactive = true;
}
////////////////////////////////////////////////////////////////////////////////
on "Take"
{
  actor.TurnTo(this);
  actor.Talk("Si, claro que si. ahora mismo lo cojo.");
  actor.Talk("¿Con la mano o con la boca, Torrente?");
}
////////////////////////////////////////////////////////////////////////////////
on "Talk"
{
  actor.TurnTo(this);
  actor.Talk("Fueguecito fueguecito, mira que estás calentito.");
}


////////////////////////////////////////////////////////////////////////////////
on "LeftClick"
{
  actor.GoToObject(this);
}
on "jarrolleno"
{
 Game.Interactive = false;
 actor.GoToObject(this);

  switch(this.GetSprite())    //  Establecemos el "sprite" de la fuente como variable a comparar.
  {
  case "scenes\new_scene\fuegoon.sprite":    // Si la fuente tiene su "sprite" por defecto.
    actor.Talk("Ahí va.");
actor.PlayAnim("actors\molly\ur\take1.sprite");
    this.SetSprite("scenes\new_scene\fuegooff.sprite");    // Asignarle otro "sprite".
Game.DropItem("jarrolleno");
Game.TakeItem("jarro");
actor.PlayAnim("actors\molly\ur\take2.sprite");
actor.Talk("Ala, el fuego apagado.");
break;    // ¡Línea importante! Nunca la olvides.

  case "scenes\new_scene\fuegooff.sprite":    // Si la fuente ya tiene su otro "sprite".
    actor.Talk("Ya está suficientemente bien apagado.");
break;
  }
   Game.Interactive = true;
}

Igual es que hay otro método mas práctico para hacer esto mismo. de todas formas, os dejo tambien el script de la fuente, en el que me basé, que este sí que funciona a las mil maravillas:
Code: [Select]
#include "scripts\base.inc"


////////////////////////////////////////////////////////////////////////////////
on "LookAt"
{
  Game.Interactive = false;    // Que el juego deje de ser interactivo (opcional).

  switch(this.GetSprite())    //  Establecemos el "sprite" de la fuente como variable a comparar.
  {

  case "scenes\BUS\fuente.sprite":    // Si la fuente tiene su "sprite" por defecto.
     actor.Talk("Es una fuente apagada. Tiene un botón.");
    break;    // ¡Línea importante! Nunca la olvides.

  case "scenes\BUS\fuenteon.sprite":    // Si la fuente ya tiene su otro "sprite".
    actor.Talk("¡Mirala que bonica ella, hechando aguica y tó!");
break;
  }
 
  Game.Interactive = true;
}


////////////////////////////////////////////////////////////////////////////////
on "Take"
{
  actor.GoToObject(this);    // Que el actor vaya a él (opcional).
  Game.Interactive = false;    // Que el juego deje de ser interactivo (opcional).

  switch(this.GetSprite())    //  Establecemos el "sprite" de la fuente como variable a comparar.
  {

  case "scenes\BUS\fuente.sprite":    // Si la fuente tiene su "sprite" por defecto.
    actor.Talk("Encendiendo motores...");
    this.PlaySound("scenes\BUS\stream-3.wav",true);    // Que la fuente reproduzca el sonido y que lo repita.
    this.SetSprite("scenes\BUS\fuenteon.sprite");    // Asignarle otro "sprite".
    actor.Talk("¡Funciona de maravilla!");
break;    // ¡Línea importante! Nunca la olvides.

  case "scenes\BUS\fuenteon.sprite":    // Si la fuente ya tiene su otro "sprite".
    actor.Talk("Mejor la vuelvo a dejar como estaba antes.");
    this.StopSound();    // Detener el sonido que estaba reproduciendo.
    this.SetSprite("scenes\BUS\fuente.sprite");    // Devolverle su "sprite" anterior.
break;
  }

  Game.Interactive = true;
  }
 
////////////////////////////////////////////////////////////////////////////////
on "Talk"
{
  actor.Talk("Fuentecita fuentecita, ¿quien es de todas la mas fresquita?");
}


////////////////////////////////////////////////////////////////////////////////
on "LeftClick"
{
  actor.Talk("¡¡Ya voy!!");
  actor.GoToObject(this);
}
on "jarro"
{
actor.GoToObject(this);    // Que el actor vaya a él (opcional).
  Game.Interactive = false;    // Que el juego deje de ser interactivo (opcional).

  switch(this.GetSprite())    //  Establecemos el "sprite" de la fuente como variable a comparar.
  {

  case "scenes\BUS\fuente.sprite":    // Si la fuente tiene su "sprite" por defecto.
    actor.Talk("No tiene agua.");
break;    // ¡Línea importante! Nunca la olvides.

  case "scenes\BUS\fuenteon.sprite":    // Si la fuente ya tiene su otro "sprite".
    actor.Talk("Leno, por favor.");
   Game.DropItem("jarro");
Game.TakeItem("jarrolleno");
actor.Talk("¡Agüita fresquita pa la nena!");
break;
  }

  Game.Interactive = true;
}

17
Foro técnico / Re: Compilando.
« on: January 17, 2011, 05:14:14 PM »
Yeah! Ya no hay problemas de compilación ni errores en la consola. La basura sigue dando sus contratiempos (exactamente los mismos que antes, vaya), pero seguimos hablando de eso por el otro hilo. ;D

18
Foro técnico / Re: Compilando.
« on: January 17, 2011, 03:38:15 PM »
Rutas relativas... ¿eso quiere decir que solo debo poner la dirección a partir de "data/scenes/..."? ???

mensaje editado: como yo pensaba, no sé hacerlo. me siento como un inutil...
Un poco de ayuda, plis.

19
Foro técnico / Re: Compilando.
« on: January 17, 2011, 12:39:29 AM »
Vale, acabo de darme cuenta de un mensaje que me manda la consola de errores cuando entro en la escena del bus:

Quote
0:37:18:  WARNING: Referencing absolute path 'c:\documents and settings\eduardo\mis documentos\wme projects\pruebaaa\data\scenes\bus\scr\scene_init.script'. The game will NOT work on another computer.
0:37:18:  WARNING: Referencing absolute path 'c:\documents and settings\eduardo\mis documentos\wme projects\pruebaaa\data\scenes\bus\scr\scene_init.script'. The game will NOT work on another computer.

No sé si tendrá relación con el problema de las entradas, pero no sé por qué me da a mi que si. ???

20
Foro técnico / Juegos/ejemplos con el código libre.
« on: January 16, 2011, 09:14:32 PM »
Buenas a todos. Aquí estoy de nuevo, para pediros mas favores.

Si me pudierais dar unas direcciones de juegos descargables que tengan el código manipulable os lo agradecería muchisimo. He probado con The white chamber, pero en lugar del código este que usamos nosotros (o al menos yo) salen unos recuadritos de 3 letras muy extraños, que puede que sean el código, pero yo de ahí no puedo copiar las lineas que me interesan ni borrar otras para probar los efectos... no sé si me explico.
 ::slug ::slug ::slug ::slug ::slug ::slug ::slug ::slug ::slug ::slug ::slug ::slug ::slug ::slug ::slug ::slug ::slug ::slug ::slug ::slug ::slug ::slug ::slug ::slug

21
Foro técnico / Re: Compilando.
« on: January 16, 2011, 09:09:47 PM »
A ver si no me equivoco demasiado ni digo demasiadas tonterías...

Hellraiser, los nombres tienen que estar bien, porque este error solo me ocurre cuando compilo el juego. Si lo pruebo desde el wintermute, funciona a las mil maravillas. Solo me da este error cuando lo compilo y lo pruebo, lo cual no tiene mucho sentido para mi. Pensaba que la "simulación" que hacía wintermute del juego era idéntica al resultado final.

Jose, haría eso si no me hubiese complicado la vida con el tema de las diferentes entradas de una escena a otra. No puedo colocar al actor solo teniendo en cuenta la escena de la que viene, sino tambien la entrada que ha utilizado.

22
Ok. Lo que pasa es que hay 3 regiones desde las que vuelve a la escena de la basura: 2 caminos desde la scene BUS y otra desde la scene new_scene. Te dejo los 3, aunque son casi idénticos:
Camino1
Code: [Select]
#include "scripts\base.inc"

////////////////////////////////////////////////////////////////////////////////
on "LeftClick"
{
actor.GoToObject(this);
global Entrada = "camino1";
Game.ChangeScene("scenes\Room\Room.scene");
}
on "LeftDoubleClick"    // Al darle doble clic izquierdo...
{
global Entrada = "camino1";
 Game.ChangeScene("scenes\Room\Room.scene");    // ...cambiar la escena.
}
Camino2
Code: [Select]
#include "scripts\base.inc"


////////////////////////////////////////////////////////////////////////////////
on "LeftClick"
{
  actor.GoToObject(this);
  global Entrada = "camino2";    // Declarar la variable global "Entrada" y darle el valor "X".
        Game.ChangeScene("scenes\Room\Room.scene");    // Cambiar a la escena B.
}
on "LeftDoubleClick"    // Al darle doble clic izquierdo...
{
 global Entrada = "camino2";
 Game.ChangeScene("scenes\Room\Room.scene");    // ...cambiar la escena.
}
Salida
Code: [Select]
#include "scripts\base.inc"


////////////////////////////////////////////////////////////////////////////////
on "LeftClick"
{
  actor.GoToObject(this);
  global Entrada = "Salida";
Game.ChangeScene("scenes\Room\Room.scene");
}
on "LeftDoubleClick"    // Al darle doble clic izquierdo...
{
global Entrada = "Salida";
 Game.ChangeScene("scenes\Room\Room.scene");    // ...cambiar la escena.
}

23
Foro técnico / Re: Diálogos
« on: January 16, 2011, 08:56:50 PM »
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:
Code: [Select]
#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();
   }
}
}

24
Foro técnico / Re: Compilando.
« on: January 15, 2011, 03:38:24 PM »
Faltaría más. ;D

Code: [Select]
#include "scripts\base.inc"

// here comes the stuff which initializes the scene

global Entrada;
switch(Entrada)
{
 case "Camino1":
 actor.SkipTo(1453, 578);
 actor.Direction = DI_LEFT;
 Scene.SkipTo(actor); break;
 
 case "Camino2":
 actor.SkipTo(1456, 119);
 actor.Direction = DI_DOWNLEFT;
 Scene.SkipTo(actor); break;
 
 default:    // Si la escena anterior no se llama "UnaEscena" ni "OtraEscena" ni "UnaEscenaMas", ejecutar el código siguiente hasta el final.
            actor.SkipTo(400, 400);
            actor.Direction = DI_RIGHT;
}

var Fuente = Scene.GetNode("fuente");    // Crear una variable Fuente que sea tu objeto "fuente", si es que se llama así.

switch(Fuente.GetSprite())    // ¿Qué sprite tiene tu fuente?
{
case "scenes\BUS\fuenteon.sprite":    // Si tiene la animación "fuenteon.sprite"...
Fuente.PlaySound("scenes\BUS\stream-3.wav",true);    // ...que reproduzca su sonido.
}

////////////////////////////////////////////////////////////////////////////////
// scene state
global StateBUS;


// default values
if(StateBUS==null)
{
  StateBUS.Visited = false;
  // add scene states here
}



////////////////////////////////////////////////////////////////////////////////
// setup scene according to state variables



////////////////////////////////////////////////////////////////////////////////
if(!StateBUS.Visited)
{
  StateBUS.Visited = true;

  // this is our first visit in this scene...
}

25
Supongo que te refieres al script scene.init de esta scene. Si no, no sé a qué te refieres. Igual es que me falta un script... :( En cualquier caso, en este scene.init solo modifiqué el tema de las entradas a la scene.
Code: [Select]
#include "scripts\base.inc"

// here comes the stuff which initializes the scene
global Entrada;
switch(Entrada)
{
  case "camino1":  // Si la escena anterior se llamaba "UnaEscena", ejecutar el código siguiente hasta "break;".
            actor.SkipTo(52, 584);    // Llevar al personaje a las coordenadas señaladas (en este caso "40,267").
            actor.Direction = DI_UPRIGHT;    // Poner al personaje mirando hacia arriba (de espaldas al jugador).
            break;
  case "camino2":  // Si la escena anterior se llamaba "UnaEscena", ejecutar el código siguiente hasta "break;".
            actor.SkipTo(19, 108);    // Llevar al personaje a las coordenadas señaladas (en este caso "40,267").
            actor.Direction = DI_DOWNRIGHT;    // Poner al personaje mirando hacia arriba (de espaldas al jugador).
            break;
 case "Salida":  // Si la escena anterior se llamaba "UnaEscena", ejecutar el código siguiente hasta "break;".
            actor.SkipTo(586, 361);    // Llevar al personaje a las coordenadas señaladas (en este caso "40,267").
            actor.Direction = DI_DOWNLEFT;    // Poner al personaje mirando hacia arriba (de espaldas al jugador).
            break;
 default:    // Si la escena anterior no se llama "UnaEscena" ni "OtraEscena" ni "UnaEscenaMas", ejecutar el código siguiente hasta el final.
            actor.SkipTo(400, 400);
            actor.Direction = DI_RIGHT;
}


////////////////////////////////////////////////////////////////////////////////
// scene state
global StateRoom;


// default values
if(StateRoom==null)
{
  StateRoom.Visited = false;
  // add scene states here
}



////////////////////////////////////////////////////////////////////////////////
// setup scene according to state variables



////////////////////////////////////////////////////////////////////////////////
if(!StateRoom.Visited)
{
  StateRoom.Visited = true;

  // this is our first visit in this scene...
}


26
Foro técnico / Re: Diálogos
« on: January 15, 2011, 03:33:31 PM »
ok, gracias. ya funciona bien. Hellraiser me explicó que habia que hacer algo así, pero no lo entendí y lo pasé por alto. Fallo por mi parte.

Ahora me gustaría saber cómo añadir otra opción al dialogo y, que esa opción, me lleve a otras 4 opciones diferentes de estas (por ejemplo), y una de las opciones debe salir de la conversación, o volver al principio y, allí, tener una opción que me valga para salir del dialogo.

otra cosa: para salir de esta conversación, he tenido que pinchar fuera para que el actor se moviera y pusiera fin al diálogo. Para que eso no ocurra, tendría que poner aquello de game.interactive true o false donde convenga, ¿verdad?
Si me lo pudieras explicar un poco, te lo agradecería.

27
Foro técnico / Compilando.
« on: January 14, 2011, 07:53:59 PM »
¡Buenas gente!

Resulta que el otro dia compilé lo poco que tengo hecho para enseñarlo fuera de mi pc como ejemplo. Pues bien, resulta que al ir a la escena BUS (desde los 2 caminos que hay), el actor aparece donde a él le parece bien, cambiando de localización a cada nueva entrada que hago de esta escena (a veces aparece en el centro, otras a la izquierda,... pero nunca en su entrada adecuada). Sin embargo, al ir a las demas escenas (incluso desde la escena BUS) no existe ningún problema. Empieza donde debe.

¿Qué puede estar ocurriendo en esa escena?

28
Foro técnico / Interacciones, cambios de sprite, objetos e inventario.
« on: January 14, 2011, 07:49:41 PM »
No sabía cómo generalizar este post para poder usarlo mas adelante. creo que el título es bastante apropiado. os voy a exponer, de nuevo, el problema de la basura. A ver si a alguien se le ocurre algo... una solución, u otro metodo para resolverlo sin errores. He aquí el script de la basura:
Code: [Select]
#include "scripts\base.inc"


////////////////////////////////////////////////////////////////////////////////
on "LookAt"
{
  Game.Interactive = false;    // Que el juego deje de ser interactivo (opcional).

  switch(this.GetSprite())    //  Establecemos el "sprite" de la fuente como variable a comparar.
  {

  case "scenes\Room\basuraclosed.sprite":    // Si la fuente tiene su "sprite" por defecto.
     actor.Talk("puaj, basura.");
    break;    // ¡Línea importante! Nunca la olvides.

  case "scenes\Room\basuraopen.sprite":    // Si la fuente ya tiene su otro "sprite".
    actor.Talk("Antes he tocado algo muy blando... y húmedo...");
break;
  }

  Game.Interactive = true;
 
}
////////////////////////////////////////////////////////////////////////////////
on "Take"
{
  actor.GoToObject(this);    // Que el actor vaya a él (opcional).
  Game.Interactive = false;    // Que el juego deje de ser interactivo (opcional).

  switch(this.GetSprite())    //  Establecemos el "sprite" de la fuente como variable a comparar.
  {

  case "scenes\Room\basuraclosed.sprite":    // Si la fuente tiene su "sprite" por defecto.
    actor.Talk("A ver qué encuentro...");
 actor.Talk("Un segundo.");
   this.SetSprite("scenes\Room\basuraopen.sprite");    // Asignarle otro "sprite".
  Game.TakeItem("albal");
  actor.Talk("esto podrá serme util. A ver algo más...");
  actor.Talk("...");
  Game.TakeItem("martillo");
    actor.Talk("¡Un martillo y un trozo de papel albal!");
break;    // ¡Línea importante! Nunca la olvides.

  case "scenes\Room\basuraopen.sprite":    // Si la fuente ya tiene su otro "sprite".
    actor.Talk("Bastante he buscado ya. ¿No crees?");
break;
  }

  Game.Interactive = true;
  }
////////////////////////////////////////////////////////////////////////////////
on "Talk"
{
  actor.Talk("¿saldrá el bicho de barrio sésamo?");
}
////////////////////////////////////////////////////////////////////////////////
on "LeftClick"
{
  actor.Talk("¡¡Ya voy!!");
  actor.GoToObject(this);
}
Siempre comienzo las pruebas en la escena en la que está la basura. Pues bien:

1º- Si abandono la scene y vuelvo, la basura ha desaparecido >:(, con todos sus sprites, objetos y letreros en el ratón.

2º- Si no abandono la escena, la basura funciona estupendamente: La observa de diferentes formas dependiendo de su sprite, la usa y coge los objetos sin problemas, añadiendolos al inventario y no permitiéndome volver a cogerlos de la basura, cambia el sprite como debe,... en fin, todo estupendo ;D. Pero en cuanto salgo de la scene y vuelvo, ocurre lo mismo que en el caso 1: desaparece, y ya no puedo ni observarla, ni marcarla con el ratón ni nada. >:(

¿Qué ocurre?

29
Foro técnico / Diálogos
« on: January 14, 2011, 06:16:37 PM »
Quote
18:15:02:  Compiling script 'scenes\Room\scr\entitiprueba.script'...
18:15:02:    Error@line 57: Variable 'hablar_barco' is referenced but not defined
18:15:02:  Compiling script 'scenes\Room\scr\entitiprueba.script'...
18:15:02:    Error@line 61: Variable 'hablar_coche' is referenced but not defined
18:15:02:  Compiling script 'scenes\Room\scr\entitiprueba.script'...
18:15:02:    Error@line 79: Variable 'hablar_barco' is referenced but not defined
18:15:02:  Compiling script 'scenes\Room\scr\entitiprueba.script'...
18:15:02:    Error@line 83: Variable 'hablar_barco' is referenced but not defined
18:15:02:  Compiling script 'scenes\Room\scr\entitiprueba.script'...
18:15:02:    Error@line 92: Variable 'hablar_coche' is referenced but not defined
18:15:02:  Compiling script 'scenes\Room\scr\entitiprueba.script'...
18:15:02:    Error@line 96: Variable 'hablar_coche' is referenced but not defined

Code: [Select]
#include "scripts\base.inc"


////////////////////////////////////////////////////////////////////////////////
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"
{
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";

    // Creamos el cuadro de conversación con las frases que hemos preparado
    Game.AddResponse(0, Responses[0]);
    Game.AddResponse(1, Responses[1]);

    // 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");
}

}
}
}

Abreviando: En el script del bicho amarillo me da esos errores al intentar probar el juego. Sustituí el "personaje" por "this", ya que ese es el personaje que habla en mi ejemplo. Corregí tambien un actor.Talkt(Responses[Selected]); eliminando la T despues de Talk (que supuse que estaba de más), e hice la llamada a la función dialogo en la opción Talk.

¿Qué falla?

30
Foro técnico / Re: Empezando y con problemas.
« on: January 12, 2011, 03:53:41 PM »
Buf, eso de separar las dudas va a estar complicado, porque conforme me van saliendo, voy preguntando, pero intentaré organizarme para el próximo post, y abriré varios, intentando organizar mis dudas por secciones. Este es el último post que pongo de manera "desorganizada".

Acabo de probar tu diálogo (o sea, copio la función al final del script, y lo llamo desde on talk), y resulta que me da un error de sintaxis en la linea 60, que coincide con la linea 20 en tu codigo. No sé por qué será. Pensaba que el error me lo daría al intentar encontrar el nombre del actor, pero ha fallado antes. XD

Y un último problema que me ha surgido: he probado a compilar el juego completo. resulta que, al ir a una de las scenes (BUS concretamente), el personaje no se coloca donde debe. sin embargo, cuando lo pruebo desde el wintermute, va perfecto. Con el resto de escenas no me da problemas: el personaje acaba donde debe. ¿a qué puede deberse esto? Pensaba que el resultado final y la "simulación" del wintermute serían idénticas...

Pages: 1 [2] 3 4

Page created in 0.045 seconds with 23 queries.