I haven't tested it, but it should work.
//Quickly whipped up, mostly stolen from Tier Tactical but allows for more ease of use
//Zack0Wack0 9:46 AM 13/01/2011
//Example (you can make the damage values different, obviously):
//datablock ProjectileData(YourProjectile)
//{
// ...
// directDamage = 25;
// directHeadshotDamage = 50;
// directHeadShotDamageType = $DamageType::YourWeaponHeadshot;
// ...
//};
if($Support_Headshots >= 0.1)
return;
$Support_Headshots = 0.1;
package Support_Headshots
{
function ProjectileData::damage(%this,%obj,%col,%fade,%pos,%normal)
{
if(%this.directDamage <= 0)
return;
%damageType = $DamageType::Direct;
if(%this.directDamageType)
%damageType = %this.directDamageType;
%scale = getWord(%obj.getScale(),2);
%directDamage = mClampF(%this.directDamage,-100,100)*%scale;
if(%col.getType() & $TypeMasks::PlayerObjectType)
{
%colScale = getWord(%col.getScale(),2);
if(getWord(%pos, 2) > (getWord(%col.getWorldBoxCenter(), 2)-3.3)*%colScale)
{
%directDamage = %this.directHeadshotDamage;
%damageType = %this.directHeadshotDamageType;
if(isObject(critProjectile))
{
%col.spawnExplosion(critProjectile,%colScale);
if(isObject(%col.client))
%col.client.play2d(critRecieveSound);
}
if(isObject(%obj.client.player))
{
if(isObject(critProjectile))
{
serverplay3d(critFireSound,%obj.client.player.getHackPosition());
if(isObject(%obj.client))
%obj.client.play2d(critHitSound);
}
}
}
%col.damage(%obj,%pos,%directDamage,%damageType);
}
else
{
%col.damage(%obj,%pos,%directDamage,%damageType);
}
}
};
activatePackage(Support_Headshots);
Put directHeadshotDamage and directHeadshotDamageType in your projectile. You would make directHeadshotDamage larger then the normal directDamage of course.