Hola, estoy creando un juego de aventura grafica, (estilo El Enigma De Aceps de Amstrad) pero sin escribir, todo a base de botones.

Tengo un boton que se llama "examinar" otro que se llama "coger" y otro "dejar"
Necesito crear una lista de objetos (los cuales no seran reales ya que en las pantallas no habran objetos). La idea es que al entrar en X room y le de al boton "examinar" me diga algo como "Veo la linterna y un pedernal".
Luego con el boton "coger" Pueda coger esa linterna o lo que sea y que desaparezca de la room esa (la room tiene que memorizar que ya se a cogido)
Luego si mas tarde suelto los objetos con el boton "dejar" en otras rooms, que la room memorize que se a soltado ahi por si luego vuelvo a esa room y me interesa cogerlo.
Y que a la vez me escriba por la pantalla las acciones "Veo X objeto" "Has cogido X objeto" "Has dejado X objeto"

Todo esto sin tener objetos fisicos dentro de la room ya que en la room solo se vera el fondo... los objetos realmente seran "imaginarios"

Tengo 31 rooms creadas, con los botones, la interfaz y demas... me falta algo asi para poner el juego a funcionar.

¿Me ayuda alguien?
Gracias a todos!



#1 Marzo 28, 2022, 03:47:03 PM Ultima modificación: Marzo 28, 2022, 07:13:48 PM por JohnW
Hola de nuevo, he leido un poco acerca sobre las listas "array" y no consigo llevarlo a cabo.

Lo que he hecho es lo siguiente:

En un objeto control >  evento create: (Defino el inventario del PJ)
[gml]global.invpj[0] = "linterna"
global.invpj[1] = "pedernal"
global.invpj[2] = "anillo"
global.invpj[3] = "espada"
global.invpj[4] = ""[/gml]

En el boton examinar:

Evento create:
[gml]activo = 0;[/gml] Para controlar si pulsamos o no.

Evento Left Button:
[gml]activo = 1;[/gml] Confirmo que hemos pulsado el raton.

Evento Draw GUI:
[gml]if activo = 1 {           
        draw_text(32,32, + string("Tengo ") + string(global.invpj[]));
}[/gml] Me muestra mi inventario por pantalla.

El problema es que me lo muestra asi:
[gml]Veo { { linterna,pedernal,anillo,espada, },  }[/gml] Me muestra los signos { } y los espacios dnd no tengo nada.


¿Alguien me ayuda please?

Ese es el formato del string de los arrays, para mostrarlo de la manera que quieres deberias generar una string propia a tu gusto.

Para hacerlo primero tenemos que saber el tamaño del array, tener una string vacia, un array temporal y un contador para dicho array. Vamos a pasar el array del inventario al array temporal, exceptuando los espacios vacios:

[gml]if activo == 1 {
   var Length = array_length_1d(global.invpj),
      String = "",
      Temp_Array,
      c = 0;

   for (var i=0;i<Length;++i){
      if is_string(global.invpj) && global.invpj!="" {
         Temp_Array[c] = global.invpj;
         c++;
      }
   }
}[/gml]
Ahora tomamos el tamaño del array temporal y creamos la string agregando cada elemento del array, y los separamos con una y si es el penultimo elemento, o una coma si no.

[gml]if activo == 1 {
   var Length = array_length_1d(global.invpj),
      String = "",
      Temp_Array,
      c = 0;

   for (var i=0;i<Length;++i){
      if is_string(global.invpj) && global.invpj!="" {
         Temp_Array[c] = global.invpj;
         c++;
      }
   }

   Length = array_length_1d(Temp_Array);
   for(var i = 0; i < Length; ++i){
      String += Temp_Array;
      if i == Length-2 String += " y ";
      else if i < Length-2 String += ", ";
   }

   draw_text(32,32,"Tengo " + String);
}[/gml]
Con eso el texto se varia de esta forma:

CitarTengo linterna, pedernal, anillo y espada

Para tu pregunta original, pienso que lo mejor sería tener variables que indiquen donde estan los objetos, cada vez que presiones examinar checar si el objeto esta en la misma room que tu y mencionarlo si es así. Con eso dicho, es perfectamente posible usar objetos aunque estos no se dibujen en el room, podrias usar rooms permanentes, cuando tomas un objeto lo eliminas, y cuando de lo dejas lo creas en la room nueva, asi cuando presionas examinar te fijas si los objetos existen en la room o no.

#3 Marzo 28, 2022, 11:22:48 PM Ultima modificación: Marzo 28, 2022, 11:27:59 PM por JohnW
Muchisimas gracias Void !!

Lo habia solucionado temporalmente de esta manera:
[gml]if activo == 1 {
for ( var i = 0 ; i < 5 ; ++i)
    {
    draw_text(400,550+i*20,+global.invpj);
    }[/gml]
Asi no me salian los signos raros, aunque no me gusta porque no funcionaba del todo bien, me hacia espacios dobles entre palabras.

Ahora he probado tu codigo y me gusta muchisimo!! Y esa idea de las comas y del "y" si es palabra final es genial.

Aunque ahora no se muy bien si servira todo esto para lo que quiero hacer te explico:

Resulta que estaba intentando poner en los "creation code" de cada room... su propio inventario es decir:
[gml]Room 1 > creation code
inv=[0];
inv=[1];

Room 2 > creation code
inv=[0];
inv=[1];[/gml]

Y desde el boton no me deja acceder si no las pongo como global.inv, el problema de ponerlo global es que al pulsar el boton mirar me mostraria todas las globales independientemente en la room que me encuentre.
Y ademas tendria que poner en el boton mirar el mismo codigo que me has pasado pero repetido por XX veces segun rooms tenga con global.inv

Asi que, de que otra manera podria hacerlo?

Por cierto, una vez me muestra los objetos del inventario, al cambiar de room se siguen viendo los textos de la array. ¿Se pueden borrar cada vez que cambias de room?

Muchas gracias de nuevo

Para que se deje de mostrar el texto cambia la variable activo de nuevo a 0.

El Creation Code de un room no es un buen lugar para controlar que items hay en un room, si el room no es persistente entonces se ejecutará cada vez que entres al room, lo que significa que aún si ya tomaste el item de un room cuando vuelvas lo volverá a generar. Y si el room es persistente el código se ejecutara una sola vez cuando entres al room por primera vez, así que no podrás controlar cambios como dejar otro objeto en el room.

De verdad te sugiero que uses objetos para controlar que items hay en cada room, puedes usar un único objeto que sea populado desde el Creation Code de un room persistente, de esta manera puedes accesar su contenido mientras estas en el room, cualquier cambio que se realize en su lista de items se mantendrá cuando salgas y vuelvas al room y cada room tendrá una lista de items propia.

Te dejo un pequeño ejemplo.

Cita de: Void en Marzo 29, 2022, 11:44:36 AM
Para que se deje de mostrar el texto cambia la variable activo de nuevo a 0.

El Creation Code de un room no es un buen lugar para controlar que items hay en un room, si el room no es persistente entonces se ejecutará cada vez que entres al room, lo que significa que aún si ya tomaste el item de un room cuando vuelvas lo volverá a generar. Y si el room es persistente el código se ejecutara una sola vez cuando entres al room por primera vez, así que no podrás controlar cambios como dejar otro objeto en el room.

De verdad te sugiero que uses objetos para controlar que items hay en cada room, puedes usar un único objeto que sea populado desde el Creation Code de un room persistente, de esta manera puedes accesar su contenido mientras estas en el room, cualquier cambio que se realize en su lista de items se mantendrá cuando salgas y vuelvas al room y cada room tendrá una lista de items propia.

Te dejo un pequeño ejemplo.

No me deja abrir el archivo, me sale el error de steam.

Otra cosa, he creado un "input text" basico, con la intencion de usar una ventana de comandos. La idea es que al escribir "X" comando te haga la misma funcion que el boton mirar.
Lo tengo creado asi:
[gml]Evento create:
keyboard_string = "";[/gml]

[gml]Evento Step:
if keyboard_check_pressed(vk_enter){
    Unlock = keyboard_string;
}[/gml]

[gml]Evento Draw:
draw_set_color(c_orange);
draw_text(550,950,keyboard_string + "|");

if keyboard_check_pressed(vk_enter){
    Unlock = keyboard_string
    if Unlock == "mirar"{
    draw_text(32,100,global.invpj);
}else{
    draw_text(32,100,"No comprendo");
    }keyboard_string = "";
}[/gml]

Con esto me surgen 2 problemas... el primero es que me salta el error:
[gml]Push :: Execution Error - Variable Get 100002.i(100029, -2147483648)
at gml_Object_inputBox_DrawEvent_1 (line 7) -     draw_text(32,100,global.invpj);[/gml]

Se ve que no puede entrar a la lista "array" a leerme esos objetos igual que hace el boton mirar.
Y el segundo error que tengo, es que al escribir algo... el mensaje por ejemplo "No comprendo" Me sale por pantalla pero al segundo se borra... cuando tendria que permanecer en pantalla hasta que cambies de room a otra.

Ahora mirare la manera que tu dices de crear objetos por pantalla y ponerlos en invisible... para que no se vean y aver si asi consigo mejores resultados.

#6 Marzo 29, 2022, 04:49:36 PM Ultima modificación: Marzo 29, 2022, 05:15:01 PM por JohnW
Hola de nuevo,
he probado a copiar el codigo que me pasaste en un script... y desde el inputbox cargarlo al escribir "mirar" pero no hace nada.
[gml]draw_set_color(c_lime);
draw_set_font(Fpantalla);

draw_text(550,950,"[Consola]> "+keyboard_string);

if keyboard_check_pressed(vk_enter){
    if Unlock == "mirar"{
    script_execute(inventariopj);     
}else{
    draw_text(550,900,">No comprendo");}
    keyboard_string = "";
}[/gml]

Aunque me dado cuenta que si primero pulso el boton "mirar" y luego escribo en el inputtext "mirar" Si que me ejecuta el script, pero si no pulso el boton y escribo de primeras "mirar" no me carga nada.

Cita de: JohnW en Marzo 29, 2022, 02:49:07 PM
No me deja abrir el archivo, me sale el error de steam.
El ejemplo fue hecho en la ultima version de GMS1, v1.4.9999. Si estas usando una versión anterior probablemente no podrás verlo, pero no se cual es el error de steam al que te refieres.

Cita de: JohnW en Marzo 29, 2022, 02:49:07 PM
Con esto me surgen 2 problemas... el primero es que me salta el error:
[gml]Push :: Execution Error - Variable Get 100002.i(100029, -2147483648)
at gml_Object_inputBox_DrawEvent_1 (line 7) -     draw_text(32,100,global.invpj);[/gml]

Se ve que no puede entrar a la lista "array" a leerme esos objetos igual que hace el boton mirar.
Y el segundo error que tengo, es que al escribir algo... el mensaje por ejemplo "No comprendo" Me sale por pantalla pero al segundo se borra... cuando tendria que permanecer en pantalla hasta que cambies de room a otra.

El primer error te sale porque la variable i  en global.invpj no ha sido definida, cambiala por un número o agrega un bucle for que pase por los elementos del array.

El segundo problema es que el estas dibujando el texto dentro del if keyboard_check_pressed, asi que solo se dibujara durante el step en que presiones la tecla, agrega un variable que mantenga el texto a escribir y dibuja el texto fuera del if.

[gml]var String = "";

if keyboard_check_pressed(vk_enter){
    Unlock = keyboard_string
    if Unlock == "mirar"{
    String = string(global.invpj[0]);
}else{
    String = "No comprendo";
    }keyboard_string = "";
}
draw_text(32,100,String)[/gml]

Cita de: JohnW en Marzo 29, 2022, 04:49:36 PM
Aunque me dado cuenta que si primero pulso el boton "mirar" y luego escribo en el inputtext "mirar" Si que me ejecuta el script, pero si no pulso el boton y escribo de primeras "mirar" no me carga nada.
Lo unico que se me ocurre acá es que hayas copiado el código completo, incluyendo el if activo == 1, si solo cambias activo a 1 cuando le haces click al boton entonces el script solo funcionará despues de que hayas hecho click, o cambias esa parte o haces que activo tambien cambie a 1 cuando escribes "mirar."

#8 Marzo 29, 2022, 08:21:35 PM Ultima modificación: Marzo 29, 2022, 09:23:59 PM por JohnW
Hola de nuevo, siento ser molesto.

He probado lo que me dices.
Escribir mirar y que entre al array a buscar... me funciona solo que me muestra el primer objeto, (Ahora mirare de crear un for para recorrer todo)
Pero haciendo lo que me dices, anulamos por completo el codigo que me hisciste del array con el boton "mirar" y suyo seria que al escribir "mirar" funcionara igual. Por eso intentaba copiarlo todo a un script y desde el inputtext cargar dicho script. Pero no se hacerlo.

El problema de que desaparece el mensaje despues de pulsar enter me sigue pasando. He probado de todas las maneras, incluso creando alarmas, timers creados por mi.... y nada funciona. Cuando apreto el enter se borra tanto el contenido del "array" que me muestra, como el "No comprendo" en caso de error.

[gml]draw_set_color(c_lime);
draw_set_font(Fpantalla);
draw_text(550,950,"[Consola]> "+keyboard_string + cursor);

var String = "";

if keyboard_check_pressed(vk_enter){
    Unlock = keyboard_string
    if Unlock == "mirar"{
    draw_text(550,900,">Correcto");
    for (var i=0;i<5;i+=1){
    String = string(global.invpj);}
}else{
    draw_text(550,900,">No comprendo");
    }keyboard_string = "";
}
draw_text(32,100,String)[/gml]

Añadi un ciclo FOR, no se porque pero solo me muestra el ultimo objeto de la lista array en vez de todos, pero repito, haciendo esto... no sale igual que cuando apretas el boton "mirar" con el codigo que me hiciste.

Si dibujas un texto dentro de un if solo se dibujara mientras el if sea cierto, en este caso tu if checka si enter fue presionado, y eso solo sera cierto en el step en que fue presionado. Si quieres que el texto permanesca en la pantalla debe dibujarse fuera de ese if.

Pero tambien cometi un error con el código que te pase en el post anterior, la variable String en el evento Draw no puede ser local, necesita ser una variable de instancia iniciada desde el evento create.

Para lo que quieres hacer, pon en un script este código basado en el que te pase antes:

[gml]var Length = array_length_1d(global.invpj),
    String = "",
    Temp_Array,
    c = 0;

for (var i=0;i<Length;++i){
    if is_string(global.invpj) && global.invpj!="" {
        Temp_Array[c] = global.invpj;
        c++;
    }
}

Length = array_length_1d(Temp_Array);
for(var i = 0; i < Length; ++i){
    String += Temp_Array;
    if i == Length-2 String += " y ";
    else if i < Length-2 String += ", ";
}
return String [/gml]

Llama el script mirar_inventario o algo así.

Luego cambia tu código de manera que dentro del if se cambie la variable String según lo que quieras escribir, y se dibuje fuera de él. Usa el script que acabas de crear para adquirir la lista de items.

[gml]draw_set_color(c_lime);
draw_set_font(Fpantalla);
draw_text(550,950,"[Consola]> "+keyboard_string + cursor);

if keyboard_check_pressed(vk_enter){
    Unlock = keyboard_string
    if Unlock == "mirar"{
    String = ">Correcto#";
    String += "Veo " + mirar_inventario();
}else{
    String = ">No comprendo";
    }keyboard_string = "";
}
draw_text(550,900,String)[/gml]

Recuerda declarar String en el evento create como una cadena vacia

[gml]String = ""[/gml]

Cuando quieras borrar el texto dibujado simplemente vuelve a cambiar String a una cadena vacia.

#10 Marzo 29, 2022, 11:34:45 PM Ultima modificación: Marzo 29, 2022, 11:43:24 PM por JohnW
Muchas gracias!!
Me estas ayudando muchisimo con este proyecto!

Ahora me surge la duda:
Con este codigo creado, si quisiera poner un comando mas digamos "examinar" para examinar la room en la que me encuentro, teniendo en cuenta que tengo 31 rooms...

¿Seria posible que ese comando "examinar" pudiera examinar cada room, y decirme que objetos hay?

Con objetos me refiero a listas array no a objetos reales...

Yo la idea que tenia para esto era:
Crear un script como ese para cada room llamados "examinarroom1" "examinarroom2" etc... luego en el comando "examinar" del inputbox decirle algo como...
Si escribes examinar, y estas en la room 1 pues examina "examinarroom1", etc...

Es un poco tedioso y largo de hacer... pero no se me ocurre por ahora otra forma de hacerlo.

¿Es muy dificil lograr eso con menos codigo?
Teniendo en cuenta que tengo que añadir mas comandos, como "coger X objeto" etc...

Y la otra cosa es:
Quiero poner el comando "Coger X objeto" si estas en una room que haya un objeto.
Entonces los objetos de las rooms pertenecerian a diferentes arrays... cada array para una room.
Y al escribir "coger X objeto" tendria que sacar el objeto de esa array de la room y ponerla en la array del inventario del pj siempre que haya espacio y en caso de que no, decir "No puedes llevar mas objetos"

Claro que luego abria que añadir el comando "Dejar X objeto" y que hiciera lo mismo pero a la inversa, sacarlo del array del PJ y meterlo en la array de room actual.

No se si esto que pido ya es mas complicado... o deberia hacerse de otra manera que no sean arrays.

El ejemplo que hice justo mostraba como hacer eso. Bueno, al menos la parte de examinar los items en cada room. Pero ya que no puedes verlo, la idea es esta:

Crea un objeto llamado obj_inventario_room, en su evento create crea un array llamado inv:

[gml]inv[0] = 0[/gml]

Ahora, en el Creation Code de cada room crea una instancia de obj_inventario_room, y agregale a su array los items que hay originalmente en la room, por ejemplo:

[gml]var Inst = instance_create(0,0,obj_inventario_room);
with Inst {
    inv[0] = "linterna";
   inv[1] = "pedernal";
}[/gml]

Para ver que items hay en el room se usa el mismo código que para ver el inventario del jugador, pero viendo al array en obj_inventario_room.

Para tomar un item de la room se busca si hay espacio en el inventario del jugador y si lo hay se elimina del array de obj_inventario_room y se agrega al array del jugador.

Para dejar un item se elimina del array del jugador y se agrega al array de obj_inventario_room.

Aunque un room no tenga items inicialmente debe tener una instancia de obj_inventario_room. Los rooms deben ser persistentes.

Siguiendo esas reglas se puede usar código que funcionará en cualquier room.

#12 Marzo 30, 2022, 02:59:26 PM Ultima modificación: Marzo 30, 2022, 03:05:51 PM por JohnW
Gracias de nuevo la verdad que soy patoso con esto... voy programando a medias porque me quedo atascado sin saber ver mas alla.

Aver si lo he hecho bien:
En las 31 rooms, las he marcado como "Persistente" y en Creation Code de cada una de ellas he puesto esto:
[gml]var Inst = instance_create(0,0,obj_inventario_room);[/gml]
En las rooms que por defecto tiene objetos he puesto esto:
[gml]var Inst = instance_create(0,0,obj_inventario_room);
with Inst {
    inv[0] = "linterna";
    inv[1] = "pedernal";
}[/gml]
He creado el objeto "obj_inventario_room":
[gml]inv[0] = 0;[/gml]
He creado un script llamado "mirarinventarioroom" con el mismo codigo del pj pero cambiando el array:
[gml]var Length = array_length_1d(inv),
    String = "",
    Temp_Array,
    c = 0;

for (var i=0;i<Length;++i){
    if is_string(inv) && inv!="" {
        Temp_Array[c] = inv;
        c++;
    }
}

Length = array_length_1d(Temp_Array);
for(var i = 0; i < Length; ++i){
    String += Temp_Array;
    if i == Length-2 String += " y ";
    else if i < Length-2 String += ", ";
}
return String[/gml]

Y aqui me viene el primer problema que no se hacer... he colocado el comando "mirar" en el inputbox, antes del else, despues del else, incluso copiando todo el codigo debajo con el nuevo comando. Pero no se hacerlo y me da error.
Ahora lo tengo asi:
[gml]if keyboard_check_pressed(vk_enter){
    Unlock = keyboard_string
    if Unlock == "inventario"{
    String = "Tengo " + mirarinventariopj();
}   if Unlock == "mirar"{
    String = "Veo " + mirarinventarioroom();
}
else{
    String = ">No comprendo";
    }keyboard_string = "";
}
draw_text(550,900,String)[/gml]

Me da 2 errores, el primero es en el script nuevo:
[gml]Push :: Execution Error - Variable Get 100001.inv(100006, -2147483648)
at gml_Script_mirarinventarioroom (line 1) - var Length = array_length_1d(inv),[/gml]
El segundo es logicamente en el inputbox porque no se añadirlo bien:
[gml]stack frame is
gml_Script_mirarinventarioroom (line 1)
called from - gml_Object_inputBox_DrawEvent_1 (line 10) -     String = "Veo " + mirarinventarioroom();[/gml]

Respecto a lo de coger y soltar los items del inv pj a los inv room supongo que se hace asi no?:

Si en la room 4 tengo:
[gml]var Inst = instance_create(0,0,obj_inventario_room);
with Inst {
    inv[0] = "linterna";
    inv[1] = "pedernal";
}[/gml]
Y quiero pasar la linterna del inv al global.inpj sera asi:

En el comando coger linterna:
[gml]array_delete(inv, linterna, 1);     //Para borrarlo del inv de la room
array_push(global.invpj, linterna);   //Para añadirlo al global.invpj del PJ[/gml]

Y luego en el comando dejar linterna al reves:
[gml]array_delete(global.invpj linterna, 1);     //Para borrarlo del inv de la room
array_push(inv, linterna);   //Para añadirlo al inv de la room[/gml]

Voy bien encaminado?

Ahora para que me diga que el personaje no puede llevar nada mas (El limite del PJ es 5) ya no sabria hacerlo.
Y otra duda que me surge de todo esto, los "inv" que he puesto en las rooms... cada vez que se suelte un objeto, ese inventario va creciendo solo? Es decir puedes soltar objetos infinitos y el array crece asignando una id a cada uno.

El error te sale porque estas buscando el array inv del objeto que llama el script, no del objeto obj_inventario_room. Cambia el código del script de esta manera:

[gml]var Length = array_length_1d(obj_inventario_room.inv),
    String = "",
    Temp_Array,
    c = 0;

for (var i=0;i<Length;++i){
    if is_string(obj_inventario_room.inv) && obj_inventario_room.inv!="" {
        Temp_Array[c] = obj_inventario_room.inv;
        c++;
    }
}

Length = array_length_1d(Temp_Array);
for(var i = 0; i < Length; ++i){
    String += Temp_Array;
    if i == Length-2 String += " y ";
    else if i < Length-2 String += ", ";
}
return String[/gml]

Con eso el script buscará dentro del obj_invetario_room.

Ahora, para mover items entre inventarios, GMS 1 no tiene las funciones array_delete y array_push, estas fueron introducidas en GMS 2.3. Acá dejo scripts equivalentes:

[gml]///array_push(array,value)
argument0[array_length_1d(argument0)] = argument1;
return argument0;[/gml]

[gml]///array_delete(array,index,number)
var temp_array,
    Length = array_length_1d(argument0)
    c = 0;
for (var i = 0; i<Length;++i){
    if i<argument1 && i > argument1+argument2-1
    temp_array[c] = temp_array;
    c++;
}
return temp_array;[/gml]

[gml]///array_find(array,value)
var Length = array_length_1d(argument0);
for(var i=0;i<Length;++i){
    if argument0 == argument1 return i;
}
return -1;[/gml]

Vas a usar array_find para encontrar si un elemento existe dentro de un array y obtener su posición. Tambien puedes usarlo para saber si hay espacio dentro del inventario del jugador.

Por ejemplo, si quieres tomar un item:

[gml]var Pos = array_find(global.invpj,"")
if  Pos != -1 {
obj_inventario_room.inv = array_delete(obj_inventario_room.inv,array_find("Nombre del item"),1)
global.invpj[Pos] = "Nombre del item"
String = "Tomas " + "Nombre del item"
}
else String = "No tengo espacio para tomar " + "nombre del item"[/gml]

Si quieres dejar un item:

[gml]var Pos = array_find(global.invpj,"Nombre del item")
if  Pos != -1 {
obj_inventario_room.inv = array_push(obj_inventario_room.inv,"Nombre del item")
global.invpj[Pos] = ""
String = "Dejas " + "Nombre del item"
}
else String = "No tengo " + "nombre del item"[/gml]

Recuerda, cuando quieras referenciar el inventario del room, tienes que usar obj_inventario_room.inv, solo inv te va a dar error.


#14 Marzo 30, 2022, 08:08:15 PM Ultima modificación: Marzo 30, 2022, 08:23:12 PM por JohnW
Cambie el script por ese pero al escribir mirar me sigue dando los errores estos:
[gml]Push :: Execution Error - Variable Get -7.Temp_Array(100005, -2147483648)
at gml_Script_mirarinventarioroom (line 13) - Length = array_length_1d(Temp_Array);
############################################################################################
--------------------------------------------------------------------------------------------
stack frame is
gml_Script_mirarinventarioroom (line 13)
called from - gml_Object_inputBox_DrawEvent_1 (line 10) -     String = "Veo " + mirarinventarioroom();[/gml]

Perdon modifico... me sigue dando error... pero el error me lo da en las rooms dnd no tengo objetos.. en las que tengo objetos me funciona bien.
Y al poner el comando mirar,... deja de funcionar el comando inventario.

[gml]var Pos = array_find(global.invpj,"")
if  Pos != -1 {
obj_inventario_room.inv = array_delete(obj_inventario_room.inv,array_find("Nombre del item"),1)
global.invpj[Pos] = "Nombre del item"
String = "Tomas " + "Nombre del item"
}
else String = "No tengo espacio para tomar " + "nombre del item"[/gml]

Luego este codigo me dice que la funcion "array_find" Unknown function or script
El "array_push" me pone lo mismo.