Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- GetPlayerAimedBodyPart include by Dinnozor
- Detects if you shoot the head/arm/leg/torso of a player !
- Feel free to share but please don't remove credits.
- */
- #include <a_samp>
- #define BP_HEAD 1
- #define BP_BODY 0
- #define BP_ARM 3
- #define BP_LEG 2
- forward Float:Distance(Float:xA,Float:yA,Float:zA,Float:xB,Float:yB,Float:zB);
- forward OnPlayerHeadshot(playerid,targetid,weaponid);
- forward OnPlayerLegshot(playerid,targetid,weaponid);
- forward OnPlayerArmshot(playerid,targetid,weaponid);
- public Float:Distance(Float:xA,Float:yA,Float:zA,Float:xB,Float:yB,Float:zB)
- {
- new Float:Dist=floatsqroot((xB-xA)*(xB-xA)+(yB-yA)*(yB-yA)+(zB-zA)*(zB-zA));
- return Dist;
- }
- stock GetPlayerAimedBodyPart(playerid, targetid, Float:range,weapon)
- {
- new Float:Dist,Float:AngleD, Float:xv,Float:yv,Float:zv,Float:xc,Float:yc,Float:zc,Float:xt,Float:yt,Float:zt,Float:X2,Float:Y2,Float:Z2;
- new Float:AngleP;
- GetPlayerPos(targetid,X2,Y2,Z2);
- GetPlayerCameraPos(playerid,xc,yc,zc);
- GetPlayerCameraFrontVector(playerid,xv,yv,zv);
- GetPlayerFacingAngle(targetid,AngleP);
- xt=range*xv+xc;
- yt=range*yv+yc;
- zt=range*zv+zc;
- switch(weapon)
- {
- case 34:AngleD=0;
- case 33:AngleD=3;
- case 30,31:AngleD=4;
- case 22..24:AngleD=6;
- case 25..27:AngleD=4;
- default:AngleD=6;
- }
- if(GetPlayerSpecialAction(targetid)==1)
- {
- if(Z2-0.1<=range*floattan(AngleD,degrees)+zt) return BP_HEAD;
- else if((Z2-0.55<=zt+range*floattan(AngleD,degrees))&&floatabs(0.3*floatcos(-AngleP,degrees)+X2-xt)<=0.2&&floatabs(-0.3*floatsin(-AngleP,degrees)+Y2-yt)<=0.2) return BP_ARM;
- }
- else if(GetPlayerState(playerid)!=1)
- {
- if(Z2+0.4<=range*floattan(AngleD,degrees)+zt) return BP_HEAD;
- }
- else
- {
- if(Z2+0.5<=range*floattan(AngleD,degrees)+zt) return BP_HEAD;
- else if(Z2-0.3>=zt+range*floattan(AngleD,degrees)) return BP_LEG;
- else if((Z2-0.2<=zt+range*floattan(AngleD,degrees))&&floatabs(0.27*floatcos(-AngleP,degrees)+X2-xt)<=0.2&&floatabs(-0.27*floatsin(-AngleP,degrees)+Y2-yt)<=0.2) return BP_ARM;
- }
- return BP_BODY;
- }
- public OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid)
- {
- new Float:Xt,Float:Yt,Float:Zt;
- GetPlayerPos(playerid,Xt,Yt,Zt);
- if(issuerid!=INVALID_PLAYER_ID)
- {
- new Float:xc,Float:yc,Float:zc,Float:DistC;
- GetPlayerCameraPos(issuerid,xc,yc,zc);
- DistC=Distance(xc,yc,zc,Xt,Yt,Zt);
- switch(GetPlayerAimedBodyPart(issuerid,playerid,DistC,weaponid))
- {
- case 1:OnPlayerHeadshot(issuerid,playerid,weaponid);
- case 2:OnPlayerLegshot(issuerid,playerid,weaponid);
- case 3:OnPlayerArmshot(issuerid,playerid,weaponid);
- //Create a call back for torso shots if you want : use default here
- }
- }
- return 1;
- }
- public OnPlayerHeadshot(playerid,targetid,weaponid)
- {
- //Put whatever you want in these callbacks
- return 1;
- }
- public OnPlayerLegshot(playerid,targetid,weaponid)
- {
- return 1;
- }
- public OnPlayerArmshot(playerid,targetid,weaponid)
- {
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement