Saludos Comunidad GM

, de nuevo soy yo

.
Esta vez estaba programando un objeto el cual pudiera localizar la llave de una mazmorra y llevarte hacia ella, y si no existia la llave, te llevara hacia la escalera. El problema es que a veces aparece el objeto y a veces no. Estoy convencido de que eso es por el codigo que uso el cual les dejo a continuación.
Create Event:
camino = path_add();
global.rejilla = mp_grid_create(0,0,room_height/8,room_width/8,16,16);
mp_grid_add_instances(global.rejilla,obj_bloque,false);
if instance_exists(obj_llave)
{objetivo = obj_llave}
if instance_exists(obj_escalera)
{objetivo = obj_escalera}
if (!instance_exists(obj_llave) and !instance_exists(obj_escalera))
{instance_destroy()
}
mp_grid_path(global.rejilla,camino,x,y,objetivo.x,objetivo.y,true);
alarm[0] = 1;
Alarm 0 Event:
global.rejilla = mp_grid_create(0,0,room_height/8,room_width/8,16,16);
mp_grid_add_instances(global.rejilla,obj_bloque,false);
if instance_exists(obj_llave)
{objetivo = obj_llave}
if instance_exists(obj_escalera)
{objetivo = obj_escalera}
if (!instance_exists(obj_llave) and !instance_exists(obj_escalera))
{instance_destroy()}
mp_grid_path(global.rejilla,camino,x,y,objetivo.x,objetivo.y,true);
path_start(camino,4,0,true);
alarm[0] = 5;
Step Event:
if (mp_grid_path(global.rejilla,camino,x,y,objetivo.x,objetivo.y,true) && distance_to_point(objetivo.x,objetivo.y) > 30)
{
path_start(camino,4,0,true);
}
else
{
path_end();
instance_destroy();
}
depth = -y
Podeis decirme que tengo mal? Se los agradeceria muchisimo