I have one in my mod, I'm not going to release it because it's not public.
It's very simple though, just check if the player clicks LMB, check if he is holding a SDPistol, and check who's in range / who he is aiming at. |
else if ((newkeys & KEY_FIRE))
{
if(IsACop(playerid) && GetPlayerWeapon(playerid) == 23)
{
new Float:X,Float:Y,Float:Z,Float:pX,Float:pY,Float:pZ;
GetPlayerPos(playerid, pX,pY,pZ);
for(new i=0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if(IsPlayerInRangeOfPoint(i,10, pX,pY,pZ))
{
GetPlayerPos(i, X,Y,Z);
if(IsPlayerAimingAt(playerid, X,Y,Z,1))
{
TogglePlayerControllable(i, 0);
ApplyAnimation(i, "CRACK", "crckdeth2", 4.0, 1, 0, 0, 0, 0);
SetTimerEx("Unfreezeply",7000,0,"i",i);
}
}
}
}
}
}
forward Unfreezeply(playerid);
public Unfreezeply(playerid)
{
ClearAnimations(playerid);
TogglePlayerControllable(playerid, 1);
}
Float:DistanceCameraTargetToLocation(Float:CamX, Float:CamY, Float:CamZ, Float:ObjX, Float:ObjY, Float:ObjZ, Float:FrX, Float:FrY, Float:FrZ)
{
new Float:TGTDistance;
// get distance from camera to target
TGTDistance = floatsqroot((CamX - ObjX) * (CamX - ObjX) + (CamY - ObjY) * (CamY - ObjY) + (CamZ - ObjZ) * (CamZ - ObjZ));
new Float:tmpX, Float:tmpY, Float:tmpZ;
tmpX = FrX * TGTDistance + CamX;
tmpY = FrY * TGTDistance + CamY;
tmpZ = FrZ * TGTDistance + CamZ;
return floatsqroot((tmpX - ObjX) * (tmpX - ObjX) + (tmpY - ObjY) * (tmpY - ObjY) + (tmpZ - ObjZ) * (tmpZ - ObjZ));
}
stock IsPlayerAimingAt(playerid, Float:x, Float:y, Float:z, Float:radius)
{
new Float:cx,Float:cy,Float:cz,Float:fx,Float:fy,Float:fz;
GetPlayerCameraPos(playerid, cx, cy, cz);
GetPlayerCameraFrontVector(playerid, fx, fy, fz);
return (radius >= DistanceCameraTargetToLocation(cx, cy, cz, x, y, z, fx, fy, fz));
}