Hola, estoy haciendo un sistema de inventario, en el cual quiero guardar items.

Por ejemplo 1 manzana.
El problema que tengo es que ese item tiene atributos, como ser el estado. Por ejemplo si yo quisiera vender una manzana desde mi inventario, diferente sería si su estado es "fresca" contra "podrida".
Entonces dependiendo del atributo se daría mas o menos oro.
Lo que no se me figura es cómo hacer para guardar un item que tenga atributos.


Había pensado ir guardando los items por nombre, ya que son únicos. Entonces al colisionar, se iría llenando el array. Pero como digo, necesitaria guardar tambien los atributos, porque son varios dentro de un objeto. como ser el precio, el estado, tamaño.


Yo usaria arrays, probablemenete ya usas algo como item[id] con valor 0 o false si no lo tienes y con 1 o true para cuando si lo tienes, para ese ejemplo piedes extender el valor, por ejemplo si la manzana es el id 4 entonces item[4] = 0; es que no tienes manzana, item[4] =1; es que tienes manzana fresca e item[4] = 2; es que tienes manzana podrida.
Si no tienes ids de referencia para los items te lo recomiendo enormemente y si necesitas poner X cantidad de manzanas puedes usar una variable cantidad para cada slot.
Y ahora es cuando viene el chulo de las listas dinamicas y te dice un ejemplo mejor xdddd pero de mientras... xd
[spoiler="ola k ase clickarme o k ase"]la imagen no se quita xD
[/spoiler]

Gracias por la respuesta,
Pero la verdad quería evitar eso, puesto que de cierta manera se pierde un poco  la legibilidad del codigo, al tener que apuntar una lista aparte, en papel, para saber que índice le corresponde a qué cosa. Mas bien quisiera agarrar un objeto en concreto y preguntar sobre su estado.

De todas maneras me diste una gran idea, creo que voy a agrupar todas las variables dentro de un array, y luego, si se puede usarla dentro de la grilla. A ver que tal me va, cualquier cosa voy a seguir preguntando.

lo que tienes que hacer es usar objetos y herencia, por ejemplo


base_item

EV_CREATE
{
estado = B;//B = Bueno, M= malo, p= Podrido, G = con gusanos
costo = 0;
img = noone;
... y todos las demas propiedades que necesites
}

creas otro objeto que tenga como padre a base_item

obj_manzana_item
EV_CREATE
{
inherith_event(); //no recuerdo bien el nombre va algo asi
estado = "B";
costo=100;
img = sprite_manzana;
...etc,etc.
}

NOTA1: tu objeto base puede tener una alarma que se ejecuta cuando compra, etc, esos eventos los tendran Tambien, los items hijos.
NOTA2: estos objetos los puedes meter en una lista, esa lista la transformas en texto y ese texto lo metes en un arcihvo INI, asi es como usualmente hago mis inventarios con items persistentes.
Es Mejor No Saber Porque Funciona, Que Saber El Porque No Funciona...
Tienes alguna duda con "Game Design" o de videojuegos en general, contactamente mas facil en twitter @pavulzavala

A la final opte por la solucion chapucera, que fue ocultar los items que iba agarrando, puesto que Game Maker, solo acepta, dos tipos de datos en sus estructuras: numero y cadena

La verdad debería poder almacenar punteros.
Ya mucho tenía con que no se pueden hacer estructuras de datos.

Cita de: somnus en Noviembre 16, 2018, 07:11:52 PM
lo que tienes que hacer es usar objetos y herencia, por ejemplo


base_item

EV_CREATE
{
estado = B;//B = Bueno, M= malo, p= Podrido, G = con gusanos
costo = 0;
img = noone;
... y todos las demas propiedades que necesites
}

creas otro objeto que tenga como padre a base_item

obj_manzana_item
EV_CREATE
{
inherith_event(); //no recuerdo bien el nombre va algo asi
estado = "B";
costo=100;
img = sprite_manzana;
...etc,etc.
}
Si, esa jerarquía la hice, hice una clase abstracta para items y de ahi fui heredando.
Iba a almacenarlos en archivos de texto y todo, pero pensé que podría significar un costo bastante elevado en tiempo de ejecucion al estar usando el disco duro constantemente al abrir archivos, y ni hablar de procesar las cadenas para obtener los atributos. Eso sin contar el trabajo de programar todo eso, para que eventualmente se ejecute mas lento XD

Ud cono los enums? son estructuras de datos al estilo C. Aunque dice que no se pueden modificar los datos una vez creados, es decir son inmutables, tal ves le sirven para definir las características de los objetos, no se.
Cita de: Fenris78Si un tema os resulta de interes y veis que hay poca información, la mejor solucion no es quejarse o pedir sin pensar, sino sugerir algo bien planteado o aportarlo vosotros mismos.
Cita de: CalioSomos desarrolladores independientes y, por lo tanto, no tenemos por qué guiarnos por las tendencias del mercado.

También los utilicé, de hecho los uso para determinar el estado y el tipo de objeto.
Pero hay atributos que son variables, como el precio, que depende del estado.


Y si de un principio en vez de poner un numerito y que sea inmutable no se puede poner una variable? (ignorancia ON)
[spoiler="ola k ase clickarme o k ase"]la imagen no se quita xD
[/spoiler]

Eso se puede hacer con las macros, incluso en las macros se pueden poner funciones, listas, mapas, etc.
Cita de: Fenris78Si un tema os resulta de interes y veis que hay poca información, la mejor solucion no es quejarse o pedir sin pensar, sino sugerir algo bien planteado o aportarlo vosotros mismos.
Cita de: CalioSomos desarrolladores independientes y, por lo tanto, no tenemos por qué guiarnos por las tendencias del mercado.

Lo que intento hacer es una grilla 4 x 5, donde cada elemento es un item con atributos:
-nombre
-estado
-precio_venta
-tipo

Basicamente estoy haciendo un inventario, en el que al pasar el mouse por encima me muestre estos datos de ahi arriba.

Yo podría colocar numeros que significasen cada objeto:
0 = manzana normal
1 = manzana en mal estado
2 = cuchara
3 = frasco vacio

Lo que sucede es que quiero que mi inventario sea escalable, en el caso anterior debiera de alguna manera verificar si es cada cosa:

if (item == 0)
     mensaje("esta es una manzana en buen estado")
if (item == 1)
   mensaje("esta manzana esta mala")


Lo que quiero hacer, es algo mas automatizado, acorde vaya creciendo el juego y eventualmente agregando nuevos items. Lo ideal sería simplemente obtener el item y mostrar sus atributos

var item = ds_grid_value(grilla_inventario, i, j);
mensaje(item.estado)
mensaje(item.precio)
mensaje(item.descripcion)

Y las ds_* solo aceptan cadenas o numeros.

De verdad que no entiendo tu problema, solo puedes poner cadenas o numeros... Entonces que pretendes poner si no es ni cadena ni numero??? :S
[spoiler="ola k ase clickarme o k ase"]la imagen no se quita xD
[/spoiler]


Si es el nombre de un objeto es una cadena, si es una instancia en especifico seria un numero(su id)
Lo que podes hacer es usar una ds_grid, donde cada fila es un objeto diferente, y las columas serian sus atributos.
Esto seria para guardar los datos, ahora para mostrarlos  en pantalla podrias crear un objeto y darle las propiedades guardadas en la grilla.