Advertisement
Guest User

[SAMP] GetPlayerAimedBodyPart by Dinnozor

a guest
Dec 31st, 2012
476
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.98 KB | None | 0 0
  1. /*
  2.  
  3. GetPlayerAimedBodyPart include by Dinnozor
  4.  
  5. Detects if you shoot the head/arm/leg/torso of a player !
  6.  
  7. Feel free to share but please don't remove credits.
  8.  
  9. */
  10.  
  11. #include <a_samp>
  12.  
  13. #define BP_HEAD 1
  14. #define BP_BODY 0
  15. #define BP_ARM 3
  16. #define BP_LEG 2
  17.  
  18. forward Float:Distance(Float:xA,Float:yA,Float:zA,Float:xB,Float:yB,Float:zB);
  19.  
  20. forward OnPlayerHeadshot(playerid,targetid,weaponid);
  21. forward OnPlayerLegshot(playerid,targetid,weaponid);
  22. forward OnPlayerArmshot(playerid,targetid,weaponid);
  23.  
  24.  
  25.  
  26. public Float:Distance(Float:xA,Float:yA,Float:zA,Float:xB,Float:yB,Float:zB)
  27. {
  28.     new Float:Dist=floatsqroot((xB-xA)*(xB-xA)+(yB-yA)*(yB-yA)+(zB-zA)*(zB-zA));
  29.     return Dist;
  30. }
  31.  
  32. stock GetPlayerAimedBodyPart(playerid, targetid, Float:range,weapon)
  33. {
  34.     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;
  35.     new Float:AngleP;
  36.     GetPlayerPos(targetid,X2,Y2,Z2);
  37.     GetPlayerCameraPos(playerid,xc,yc,zc);
  38.     GetPlayerCameraFrontVector(playerid,xv,yv,zv);
  39.     GetPlayerFacingAngle(targetid,AngleP);
  40.     xt=range*xv+xc;
  41.     yt=range*yv+yc;
  42.     zt=range*zv+zc;
  43.    
  44.     switch(weapon)
  45.    
  46.     {
  47.         case 34:AngleD=0;
  48.         case 33:AngleD=3;
  49.         case 30,31:AngleD=4;
  50.         case 22..24:AngleD=6;
  51.         case 25..27:AngleD=4;
  52.         default:AngleD=6;
  53.        
  54.        
  55.     }
  56.     if(GetPlayerSpecialAction(targetid)==1)
  57.    
  58.     {
  59.         if(Z2-0.1<=range*floattan(AngleD,degrees)+zt) return BP_HEAD;
  60.         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;
  61.        
  62.        
  63.     }
  64.     else if(GetPlayerState(playerid)!=1)
  65.    
  66.     {
  67.         if(Z2+0.4<=range*floattan(AngleD,degrees)+zt) return BP_HEAD;
  68.        
  69.        
  70.     }
  71.     else
  72.    
  73.     {
  74.         if(Z2+0.5<=range*floattan(AngleD,degrees)+zt) return BP_HEAD;
  75.         else if(Z2-0.3>=zt+range*floattan(AngleD,degrees)) return BP_LEG;
  76.         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;
  77.        
  78.        
  79.        
  80.     }
  81.     return BP_BODY;
  82. }
  83.  
  84. public OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid)
  85. {
  86.     new Float:Xt,Float:Yt,Float:Zt;
  87.     GetPlayerPos(playerid,Xt,Yt,Zt);
  88.     if(issuerid!=INVALID_PLAYER_ID)
  89.     {
  90.        
  91.         new Float:xc,Float:yc,Float:zc,Float:DistC;
  92.         GetPlayerCameraPos(issuerid,xc,yc,zc);
  93.         DistC=Distance(xc,yc,zc,Xt,Yt,Zt);
  94.        
  95.         switch(GetPlayerAimedBodyPart(issuerid,playerid,DistC,weaponid))
  96.         {
  97.             case 1:OnPlayerHeadshot(issuerid,playerid,weaponid);
  98.             case 2:OnPlayerLegshot(issuerid,playerid,weaponid);
  99.             case 3:OnPlayerArmshot(issuerid,playerid,weaponid);
  100.             //Create a call back for torso shots if you want : use default here
  101.            
  102.         }
  103.        
  104.     }
  105.     return 1;
  106. }
  107.  
  108. public OnPlayerHeadshot(playerid,targetid,weaponid)
  109. {
  110.     //Put whatever you want in these callbacks
  111.     return 1;
  112. }
  113.  
  114. public OnPlayerLegshot(playerid,targetid,weaponid)
  115. {
  116.    
  117.     return 1;
  118. }
  119.  
  120. public OnPlayerArmshot(playerid,targetid,weaponid)
  121. {
  122.    
  123.     return 1;
  124. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement