return vectorScale(vectorNormalize(getWords(vectorSub(%pos1, %pos0), 0, 1)), %force);
Explanation: %pos0 is the position of the player to push away from, %pos1 is the position of the player to push, and %force is how much to push on him.
I prefer not swapping between types arbitrarily. Your code goes from Vector3D to Angle and back to Vector3D, whereas mine consistently uses Vector3D all the way through.