This is not complex but in fact simple, you only need to add the player position to the particles own movement in the particle function. Like this:

...
vec_set(p.x,p.skill_x);
vec_add(p.x,my.x);
...

and then you move the particle with its skill_x/y/z instead of its x/y/z vector.