I know you said it was pseudocode, but to shed some more light on it, I altered some things.

Problems. Revised Code:
Code:

function hitEvent()
{
if(event_type == event_entity)
{
if(you == player)
{
player.health -= 50; //reduce player health
}
ent_remove(me);
}
if(event_type == event_block)
{
ent_remove(me);
}
return;
}

action arrowFly
{
var arrowCounter=0;
my.enable_block = on;
my.enable_entity = on;
my.event = hitEvent;
my.passable = on;
while(arrowCounter < 100) //play with this (arrow's flight time)
{
my.skill20 = 10; //play with this (arrow's speed)
my.skill21 = 0;
my.skill22 = 0;
move_mode = ignore_passable;
ent_move(my.skill20,nullvector); //or use c_move
if(vec_dist(my.x,you.x) < 50)
{
my.passable = off;
}
wait(1);
arrowCounter += 1; //arrowCounter must increment to prevent dead loop
}
ent_remove(me);
}

action arrowBox
{
var counter=0; // counter has initial value of zero
while(1) // continue firing indefinitly
{
if(counter == 50) //play with this number(amt of time b/t firing an arrow
{
you = ent_create(arrowMDL,my.x,arrowFly); //create new arrow
}
counter += 1;
if(counter >= 50) // if counter is GREATER than 50 (or equal), reset
{
counter = 0;
}
wait(1);
}
}




Making the world better, one mouse click at a time. -- DETAILS -- version:.... commercial 6.31.4/WED V6.269 OS:......... Windows XP pro processor:. 2.8 GHz P4 RAM:....... 1 GB