I feel like I remember this being done before in what is probably a more efficient method but I figured I'd post this here regardless for feedback or something. Some of the code is adapted from weapon_chainsaw
function vectorClosestPointAngle(%vector, %startPoint, %point)
{
	%vN = vectorNormalize(%vector);
	%v2 = vectorSub(%point, %startPoint);
	%dot = vectorDot(%vN, vectorNormalize(%v2));
	
	%closestPoint = vectorAdd(%startPoint, vectorScale(%vN, %dot * vectorLen(%v2)));
	%angle = mACos(%dot);
	
	return %closestPoint SPC %angle;
}
function Player::getDamageLocation(%obj, %position)
{
	if(%obj.getDatablock().shapeFile !$= "base/data/shapes/player/m.dts")
		return 0;
	// Some information about who we just shot
	%scale = getWord(%obj.getScale(), 2);
	
	// vectors
	%forwardVector = %obj.getForwardVector();				  // direction the bot is facing
	%sideVector = vectorCross(%forwardVector, %obj.getUpVector());  // vector facing directly to the sides of the bot
	
	// points
	%centerPoint = %obj.getWorldBoxCenter();						// middle reference point
	%CPR = vectorClosestPointAngle(%sideVector, %centerPoint, %position);	// where we are on the side-to-side vector
	%closestPoint = getWords(%CPR, 0, 2);							// closest point to where our round hit on the side-to-side vector
	%angle = mRadToDeg(getWord(%CPR, 3));							// angle from the reference point. 90 is center, 0 is right, 180 is left.
	%distanceFromCenter = vectorDist(%closestPoint, %centerPoint);		// distance from the reference point to the side-to-side vector. 0 is center, anything above .4 is an arm.
	
	%zLocation = getWord(%position, 2);					// Z position of our impact
	%zWorldBox = getword(%obj.getWorldBoxCenter(), 2);	// Where the middle of our player is on the z axis
	
	if(%zLocation > %zWorldBox - 3.3 * %scale)
	{
		return "head";
	}
	else if(%zLocation > %zWorldBox - 4.5 * %scale)
	{
		if(%distanceFromCenter < (0.4 * %scale))
		{
			return "torso";
		}
		else
		{
			if(%angle < 90)
			{
				return "rarm";
			}
			else
			{
				return "larm";
			}
		}
	}
	else
	{
		if(%angle < 90)
		{
			return "rleg";
		}
		else
		{
			return "lleg";
		}
	}
}
Essentially you just call %player.getDamageLocation(%pos);, with %pos referring to where the bullet hit, and it returns either head, torso, rarm, larm, rleg or lleg depending on where it hit