Something like this?

Code:
VECTOR ptFarAway, ptOnCamera;
vec_set(&ptFarAway,  vector(mouse_cursor.x, mouse_cursor.y, camera->clip_far));
vec_set(&ptOnCamera, vector(mouse_cursor.x, mouse_cursor.y, camera->clip_near));

c_trace(&ptOnCamera, &ptFarAway, ...);

VECTOR ptHit;
vec_set(&ptHit, hit->x);

ENTITY* bullet = ent_create("bullet.mdl", &ptOnCamera, objBullet);
vec_set(bullet->skill1, &ptFarAway);

void objBullet ()
{
   wait(1); // wait until skill1,2,3 are filled with destination
   
   while (1)
   {
      VECTOR destination;
      vec_set(&destination, my->skill1); //2,3

      // fly to destination
      
      // if to near, break

      wait(1);
   }
   
   ptr_remove(my);
}