Spanish forum > Foro técnico

Duda("como añadir un nivel")

(1/2) > >>

ciberspace:
me esplico:
Cuando acabes un nivel, dependiendo de los item que tengas te de una referencia de texto y numero
para poder usarla en el segundo nivel.

ej agua bote llaves   4fr56
ej llaves bote           rrf45

como relacionar los item con series alfanumericas y vicebersa.

ciberspace:
Dando palos de ciego:

#include "scripts\base.inc"

var cod;
cod[0] = "A";
cod[1] = "B";
cod[2] = "C";
cod[3] = "D";
cod[4] = "1";
cod[5] = "2";
cod[6] = "3";
cod[7] = "4";
cod[8] = "5";
////////////////////////////////////////////////////////////////////////////////
on "LeftClick"
{
for(var i=0; i<Game.TotalNumItems; i=i+1)
{
  var Item = Game.QueryItem(i);
  Game.Msg(Item.Name);
  var sino = Game.IsItemTaken(i);
  Game.Msg(sino);
  Sleep(100);

}

}

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

se puede posicionar el testo en otro punto de la pantalla, no en 0,0

HelLRaiseR:
No se si te entiendo muy bien, normalmente, en las AG, el cambio de nivel, se hace cuando se han conseguido ciertos objetivos y eso siempre es por programación, es decir el guión inicial contempla que si has hecho esto y esto y llevas los objetos x e y te doy acceso a una nueva serie de escenarios y te puedo dejar volver o no a los anteriores.

Por lo que intuyo, tu quieres cambiar de nivel cuando se den ciertas circunstancias independientemente de los objetos que se lleven ¿no es asi?

Independientemente del uso de los objetos y de que luego puedas tener problemas si no llevas algún objeto que necesites en el nivel siguiente, para generar este texto (dinos para que es, que me resulta curioso), lo que veo que estas intentando hacer en el código que has puesto puede servir siempre que los objetos no cambien de orden cuando el jugador coja uno y lo deje en distinta posición y no olvidemos las combinaciones, por ejemplo. No se como maneja el indice WME internamente (la variable i en el ejemplo que has puesto), asi que yo en tu lugar usaría Item.NAme para refereirme al objeto.

Lo que puedes hacer es crear un array con los objetos y las correspondencias y calcular la cadena cuando la necesites, asi siempre seguirás el orden de tu array, no el que pueda usar WME (que desconozco si es fijo o no), pero como además en algún lado tienes que almacenar el trozo de cadena que se corresponde a cada objeto, te da igual. Me explico:


--- Code: ---var objs = new Array();
objs[0] = new Array("agua", "AG");
objs[1] = new Array("bote", "BT");
objs[2] = new Array("llaves", "LL");

--- End code ---

Una vez que tienes este array con todos los objetos que necesites usar en al composición de la cadena, lo cotejas con el inventario y si están en el compones la cadena


--- Code: ---var cadena;

// Nos recorremos nuestra lista de pares objeto - cadena
for(var i=0; i<objs.Lenght; i=i+1)
{
  var objeto = objs[i];  // Cogemos cada objeto
  // Buscamos nuestro objeto en los objetos del inventario
  for(var idx=0; idx<Game.TotalNumItems; idx=idx+1)
  {
     var Item = Game.QueryItem(idx); // Cogemos el objeto del juego
     var sino = Game.IsItemTaken(idx);  // Comprobamos si lo tenemos en el inventario
     if (sino) // Si está en el inventario
     {
       if (Item.Name == objeto[0]) // Si el objeto que estamos comprobando (de nuestra lista) es el objeto que está en el inventario
       {
           cadena = cadena + objeto[1]; // añadimos la subcadena del objeto de nuestra lista a la cadena final
       }
     }
  }
}
Game.Msg(cadena);
Sleep(100);

--- End code ---

Suponiendo que los tres objetos del ejemplo estuvieran en el inventario, esto debería hacer que "cadena" valiese "AGBTLL", no he probado el código, lo he puesto de cabeza, asi que puede tener algún error.

A ver si te sirve, si no pues ponlo aqui y vemos a ver

ciberspace:
Gracias por la información ya te dire si funciona el codigo.


Me parece un codigo más aceptable el que me indicas y no dejarlo en manos del indice WME.

De momento e probado con esto y parece que funciona,no es aleatorio pero me parece simple:

actor.Active = false;
var cod;
////////////// cargo los item en la bariable cod
for(var i=0; i<Game.TotalNumItems; i=i+1)
{
cod = Game.QueryItem(i);
}
///////////////////////

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

for( i=0; i<Game.TotalNumItems; i=i+1)
   {
   var Item = Game.QueryItem(i);
   var sino = Game.IsItemTaken(cod);
   //Game.Msg(Item.Name +" "+ sino);
   //Sleep(300);
   if(sino == "yes")
     {
      var EntDrawer = Scene.GetNode(i);
      EntDrawer.Active = true;
      var EntDra = Scene.GetNode(i+"A");
      EntDra.Active = false;
     }
   }



Se entiende que los Getnode se llaman <numero>A

HelLRaiseR:
Hmm, en la variable cod no estás cargando los Items, estas cargando el último item, ten en cuenta que igualas cod al item de Game.QueryItem(i) cada vez que das una pasada con el bucle, con lo que en cada pasada se sustituye el anterior item que tuvieses en cod por el nuevo, hasta que deje de dar pasadas, con lo que se quedaría el último.

De todas formas ¿Por que no nos explicas bien que quieres hacer? es que no termino de entenderlo.

Navigation

[0] Message Index

[#] Next page

Go to full version