Advertisement
Guest User

Untitled

a guest
Mar 4th, 2011
478
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 2.79 KB | None | 0 0
  1. /********************************************
  2.  * OnPlayerShootPlayer! V:2.0               *
  3.  * Credits: wups,                           *
  4.  * Double-O-Seven for his HS functions      *
  5.  ********************************************/
  6.  
  7. // include
  8. #include <a_samp>
  9. #tryinclude <foreach>
  10.  
  11. // defines
  12. #if defined OPSP
  13.     #endinput
  14. #endif
  15. #define OPSP
  16.  
  17. #if !defined foreach
  18.     #define foreach(%1,%2) for (new %2 = 0; %2 < MAX_PLAYERS; %2++) if (IsPlayerConnected(%2))
  19.     #define __SSCANF_FOREACH__
  20. #endif
  21. // variables
  22. static Float:phealth[MAX_PLAYERS];
  23.  
  24. // forwards
  25. forward OnPlayerShootPlayer(shooter,target,Float:damage);
  26.  
  27. public OnPlayerUpdate(playerid)
  28. {
  29.     static  Float:HP,
  30.             Float:Armour;
  31.     GetPlayerHealth(playerid,HP);
  32.     GetPlayerArmour(playerid,Armour);
  33.     if(HP+Armour < phealth[playerid])
  34.     {
  35.         static
  36.             Float:XZC[14];
  37.         GetPlayerCameraPos(playerid, XZC[10], XZC[11], XZC[12]);
  38.         GetPlayerCameraFrontVector(playerid, XZC[7], XZC[8], XZC[9]);
  39.         GetPlayerPos(playerid, XZC[0], XZC[1], XZC[2]);
  40.  
  41.         foreach(Player,i)
  42.         {
  43.             if(i != playerid && IsPlayerInRangeOfPoint(i, 100.0, XZC[0], XZC[1], XZC[2]))
  44.             {
  45.                 GetPlayerPos(i, XZC[3], XZC[4], XZC[5]);
  46.                 GetDistanceFromPointToLine(XZC[6], XZC[7], XZC[8], XZC[9], XZC[10], XZC[11], XZC[12], XZC[3], XZC[4], XZC[5]);
  47.                 if(XZC[6] < 2.5)
  48.                 {
  49.                     CallLocalFunction("OnPlayerShootPlayer","iif",i,playerid,(phealth[playerid]-HP-Armour));
  50.                     break;
  51.                 }
  52.             }
  53.         }
  54.     }
  55.     phealth[playerid]=HP+Armour;
  56.     return CallLocalFunction("RL_OnPlayerUpdate","i",playerid);
  57. }
  58.  
  59. stock crossp(Float:v1x, Float:v1y, Float:v1z, Float:v2x, Float:v2y, Float:v2z, &Float:output)
  60. {
  61.     new
  62.         Float:c1 = (v1y * v2z) - (v1z * v2y),
  63.         Float:c2 = (v1z * v2x) - (v1x * v2z),
  64.         Float:c3 = (v1x * v2y) - (v1y * v2x);
  65.     output = floatsqroot ((c1 * c1) + (c2 * c2) + (c3 * c3));
  66.     return 0;
  67. }
  68.  
  69. stock GetDistanceFromPointToLine(&Float:distance, Float:line_vector_x, Float:line_vector_y, Float:line_vector_z, Float:line_x, Float:line_y, Float:line_z, Float:point_x, Float:point_y, Float:point_z)
  70. {
  71.     //A line is defined by a point (which is on the line (line_x/y/z)) and a vector which defines the direction (line_vector_x/y/z).
  72.     static Float:output;
  73.     crossp(line_vector_x, line_vector_y, line_vector_z, point_x - line_x, point_y - line_y, point_z - line_z, output);//Cross product of 2 vectors.
  74.     distance = output / floatsqroot ((line_vector_x * line_vector_x) + (line_vector_y * line_vector_y) + (line_vector_z * line_vector_z));
  75.     return 0;
  76. }
  77.  
  78. stock SetPlayerHealthEx(playerid, Float:health)
  79. {
  80.     new Float:armour; GetPlayerArmour(playerid,armour);
  81.     phealth[playerid]=health+armour;
  82.     return SetPlayerHealth(playerid, health);
  83. }
  84.  
  85. #define SetPlayerHealth SetPlayerHealthEx
  86.  
  87. #if defined _ALS_OnPlayerUpdate
  88.     #undef OnPlayerUpdate
  89. #else
  90.     #define _ALS_OnPlayerUpdate
  91. #endif
  92. #define OnPlayerUpdate RL_OnPlayerUpdate
  93. forward RL_OnPlayerUpdate(playerid);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement