Buenos dias, tardes o noches  :D

Estoy haciendo un pequeño inventario usando constructor en vez de arrays, que funciona de maravilla, el problema es que quiero que el personaje sostenga el item en la mano y estoy teniendo problemas al obtener la id, no se si no la estoy guardande desde el costuct a la ds_list o de la ds_list al instance_create_layer
(La idea es que se visualice el primer slot del inventario para probar que funciona primero, después iré agregando cosas)

Tengo el constructor en un script
[gml]function Cherry() : Item() constructor{
   name = "Cherry";
   price = 5;
   sprite = spr_Cherry;
   objet = obj_Cherry;[/gml]

y en obj_player el inventario
ebento create:
[gml]//Inventario
inventory = ds_list_create();

heldItem = instance_create_layer(x, y, "instances", obj_ItemHand);
hand = obj_ItemHand;[/gml]

evento step:
[gml]if(hand != heldItem){
   hand = heldItem;
   var i = 0;
   var _item = inventory[| i];
   instance_create_layer(x, y, "Instances", _item.objet);[/gml]

y me tira esto de error:
Variable <unknown_object>.objet(100009, -2147483648) cannot be resolved.
at gml_Object_obj_Player_Step_0 (line 66) -        instance_create_layer(x, y, "Instances", _item.objet);

Muchas gracias de antemano  ;D


En el código que pones en ningún momento estas agregando elementos a la lista. Cuando tratas de tomar el valor de una posición en una lista y la posición está vacía el GM regresa el valor undefined.

Es por eso que el error te pone que no puede resolver la variable, estás pidiendo el valor de undefined.objet, que desde el punto de vista del programa no tiene ningún sentido.

Agrega código que se asegure de que la lista no este vacía antes de tomar elementos de ella o asegúrate de que la lista siempre tenga al menos un elemento.

Muchas gracias

Podría intentar cargar en la ds_list el obj_Itemhandle(es un objeto vacío) para que no este vacía y luego en el obj_Player poner un evento collicion a un obj_itemParent y que este lo cargue a la ds_list reemplazando al obj_Itemhandle en esa posición, o es mejor colocar un if que revise que esa posición no este vacía? ???

Es tu juego, eres tú el que tiene que decidir que solución es mejor para tu caso, personalmente me iria por un if ya que parece ser la solución más simple, pero también hay que tomar en cuenta que cambios es probable que ocurran a futuro en tu juego para determinar que es más útil y adaptable.

Haciendo esto me quedo una duda, el inventario esta dentro de obj_player, por ende si la instancia de obj_player es borrada toda información del inventario se perdería?

PD: en el evento step creo la intancia que se crea ilimitadamente pero al colocar un limitador (un variable que guarda la instancia creada y chequea si la pación actual contiene la misma id no se ejecuta) no me ejecuta el intance_create_layer.