Shouldn't you ask first whether the player still has the shield?
Like this:

action delete_shield()
{
if(layer.shield == 1)
{
mouse_map=pointer_pcx;
my = ent_create(shield_mdl,player.x,NULL);
show_pointer=0;
player.shield =0;
}
while (player == null) {wait (1);}


my.enable_click = on;
my.event = shield_init;

}