Vale, mis preguntas van a ir divididas en 3 apartados esta vez:
Caja que no se borra, bicho amarillo no-dialogante y
basura que desaparece.Caja que no se borra
#include "scripts\base.inc"
////////////////////////////////////////////////////////////////////////////////
on "LookAt"
{
actor.GoToObject(this);
actor.Talk("Anda! una cajita azul!");
}
////////////////////////////////////////////////////////////////////////////////
on "Take"
{
actor.GoToObject(this);
actor.Talk("pa la saca.");
Game.TakeItem("caja");
}
////////////////////////////////////////////////////////////////////////////////
on "Talk"
{
actor.GoToObject(this);
actor.Talk("Cajita cajita, vaya que eres feita.");
}
////////////////////////////////////////////////////////////////////////////////
on "LeftClick"
{
actor.GoToObject(this);
}
////////////////////////////////////////////////////////////////////////////////
on "martillo"
{
actor.GoToObject(this);
actor.Talk("DESTROY!!");
Game.DropItem("martillo");
Game.DeleteItem(this);
Game.TakeItem("jarro");
actor.Talk("¡Bien! ahora tengo un jarrico.");
}
Este es el código que utilizo en la caja como objeto de la scene, y me funciona estupendamente por ahora, asi que ni me planteo resumirlo.
Si utilizo el martillo sobre la caja estando ésta sobre la mesa, las acciones se realizan sin ningún problema (habla, desaparece martillo, desaparece caja, obtengo jarro y habla de nuevo).
#include "scripts\base.inc"
////////////////////////////////////////////////////////////////////////////////
on "LookAt"
{
actor.Talk("Una caja azul MUY bien cerrada.");
}
////////////////////////////////////////////////////////////////////////////////
on "Take"
{
Game.SelectedItem = "caja";
}
////////////////////////////////////////////////////////////////////////////////
on "Talk"
{
actor.Talk("¿Hay alguien dentro?");
}
on "martillo"
{
actor.Talk("DESTROY!!");
Game.DropItem("martillo");
Game.TakeItem("jarro");
actor.Talk("¡Bien! ahora tengo un jarrico.");
Game.DeleteItem("caja");
}
Este es el código que tiene la caja como objeto del inventario (ya lo puse anteriormente). Como ves, la linea
[Game.DeleteItem("caja");] está la última de toda la línea, ya que si no, esa es la última acción que realiza. Si, por ejemplo, la colocase antes de
[Game.TakeItem("jarro");], lo cual sería ideal, las 2 lineas que quedan (
[take jarro] y [actor talk]) no se realizarían
. Lo cual, no tiene mucho sentido para mi.
Bicho amarillo no-dialogante
#include "scripts\base.inc"
////////////////////////////////////////////////////////////////////////////////
on "LookAt"
{
actor.Talk("¿un bicharraco amarillo flotando?");
this.Talk("El coco.");
actor.Talk("Qué sitio mas raro.");
}
////////////////////////////////////////////////////////////////////////////////
on "Take"
{
actor.Talk("No llego.");
}
////////////////////////////////////////////////////////////////////////////////
on "Talk"
{
actor.Talk("Hola coco.");
this.Talk("Hola Tarzana, ¿cómo estás?");
Game.AddResponse(0, "Tururú");
Game.AddResponse(1, "Flufluturutú");
Game.AddResponse(2, "Debería irme");
var Res = Game.GetResponse();
actor.Talk("bueno chico, aquí te quedas.");
this.Talk("Venga Tarzana, feliz navidad.");
}
////////////////////////////////////////////////////////////////////////////////
on "LeftClick"
{
actor.GoToObject(this);
}
Este código pertenece a un bicho flotante amarillo. Pues bien, hay dos cosas que me gustaría solucionar en su código.
1º- Que, cuando le dé (por ejemplo) a observar bicho, el personaje se vuelva hacia el bicho
(que lo mire), pero que no avance hasta él (esto ya sé hacerlo sin problemas).
2º- Con este código en el comando hablar, consigo que el personaje y el actor hablen al principio (cada uno diga una frase) y al final de la conversación. Sin embargo, no sé qué codigo poner para que puedan mantener una conversación (que el bicho conteste a mis preguntas, se habran nuevas ramas de diálogo dependiendo de la opción que yo haya escogido, etc). He intentado usar el codigo que viene en el tutorial, pero nada. No funciona ni lo mas mínimo.
Basura que desaparece
#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
. 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.
Espero no agobiar demasiado, ni ser demasiado exigente con ustedes. Hace poco pensaba que jamás coseguiría mezclar objetos del inventario, ni encender la fuente ni poder llenar una jarra de agua con la fuente encendida. Y ahora puedo hacerlo. Asi que cualquier solución que podais encontrar a cualquiera de estos problemas es bien recibida.
Muchas gracias por vuestra paciencia.
¡Feliz navidad!