Maybe not to early but the torpedo just keeps flying after it has hit a target (passable = on and my != null)
So why not change the argument in the while loop to:
my.skill1 = 1;
while(my.skill1)
{
...
}
wait(1);
ent_remove(me);

And then in the event function, nothing more than:
my.skill1 = 0;