Guest User

Untitled

a guest
Aug 21st, 2011
463
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.23 KB | None | 0 0
  1. #include <a_samp>
  2. #define PRESSED(%0) \
  3. (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
  4. #define RELEASED(%0) \
  5. (((newkeys & (%0)) != (%0)) && ((oldkeys & (%0)) == (%0)))
  6. new Float:HP[MAX_PLAYERS];
  7. new pUpdate[MAX_PLAYERS];
  8.  
  9. forward OPSP_OnPlayerUpdate(playerid);
  10. public OPSP_OnPlayerUpdate(playerid)
  11. {
  12. pUpdate[playerid]++;
  13. if(!(pUpdate[playerid] %= 10)) GetPlayerHealth(playerid, HP[playerid]);
  14. new Keys[3]; GetPlayerKeys(playerid, Keys[0], Keys[1], Keys[2]);
  15. if(Keys[0] & KEY_FIRE){
  16. if(IsPlayerAim(playerid)){
  17. FindOnWhoIShot(playerid);
  18. return 1;
  19. }
  20. }
  21. return 1;
  22. }
  23.  
  24. forward OnPlayerShotPlayer(playerid, target, Float:damage);
  25.  
  26. forward FindOnWhoIShot(playerid);
  27. public FindOnWhoIShot(playerid)
  28. {
  29. if(IsPlayerAim(playerid))
  30. {
  31. new i = 0, players = GetMaxPlayers();
  32. while(i < players)
  33. {
  34. new Float:HPP;
  35. GetPlayerHealth(i, HPP);
  36. if(!IsPlayerConnected(i) || i == playerid || HP[i] == HPP)
  37. {
  38. i++;
  39. continue;
  40. }
  41. new Float:Pos[3];
  42. GetPlayerPos(i, Pos[0], Pos[1], Pos[2]);
  43. if(IsPlayerAimingAt(playerid, Pos[0], Pos[1], Pos[2], 3))
  44. {
  45. OnPlayerShotPlayer(playerid, i, HP[i] - HPP);
  46. GetPlayerHealth(i, HP[i]);
  47.  
  48. }
  49. i++;
  50. }
  51. }
  52. }
  53.  
  54. stock IsPlayerAim(playerid)
  55. {
  56. new animname[32];
  57. GetAnimationName(GetPlayerAnimationIndex(playerid),animname,32,animname,32);
  58. if(strfind(animname,"GUN_STAND",true) != -1) return true;
  59. else if( strfind(animname,"COLT45_FIRE",true) != -1 ) return true;
  60. return false;
  61. }
  62.  
  63. stock Float:GetPointAngleToPoint(Float:x2, Float:y2, Float:X, Float:Y) {
  64.  
  65. new Float:DX, Float:DY;
  66. new Float:angle;
  67.  
  68. DX = floatabs(floatsub(x2,X));
  69. DY = floatabs(floatsub(y2,Y));
  70.  
  71. if (DY == 0.0 || DX == 0.0) {
  72. if(DY == 0 && DX > 0) angle = 0.0;
  73. else if(DY == 0 && DX < 0) angle = 180.0;
  74. else if(DY > 0 && DX == 0) angle = 90.0;
  75. else if(DY < 0 && DX == 0) angle = 270.0;
  76. else if(DY == 0 && DX == 0) angle = 0.0;
  77. }
  78. else {
  79. angle = atan(DX/DY);
  80.  
  81. if(X > x2 && Y <= y2) angle += 90.0;
  82. else if(X <= x2 && Y < y2) angle = floatsub(90.0, angle);
  83. else if(X < x2 && Y >= y2) angle -= 90.0;
  84. else if(X >= x2 && Y > y2) angle = floatsub(270.0, angle);
  85. }
  86.  
  87. return floatadd(angle, 90.0);
  88. }
  89.  
  90. stock GetXYInFrontOfPoint(&Float:x, &Float:y, Float:angle, Float:distance) {
  91. x += (distance * floatsin(-angle, degrees));
  92. y += (distance * floatcos(-angle, degrees));
  93. }
  94.  
  95. Float:DistanceCameraTargetToLocation(Float:CamX, Float:CamY, Float:CamZ, Float:ObjX, Float:ObjY, Float:ObjZ, Float:FrX, Float:FrY, Float:FrZ)
  96. {
  97. new Float:TGTDistance;
  98. TGTDistance = floatsqroot((CamX - ObjX) * (CamX - ObjX) + (CamY - ObjY) * (CamY - ObjY) + (CamZ - ObjZ) * (CamZ - ObjZ));
  99. new Float:tmpX, Float:tmpY, Float:tmpZ;
  100. tmpX = FrX * TGTDistance + CamX;
  101. tmpY = FrY * TGTDistance + CamY;
  102. tmpZ = FrZ * TGTDistance + CamZ;
  103. return floatsqroot((tmpX - ObjX) * (tmpX - ObjX) + (tmpY - ObjY) * (tmpY - ObjY) + (tmpZ - ObjZ) * (tmpZ - ObjZ));
  104. }
  105.  
  106. stock IsPlayerAimingAt(playerid, Float:x, Float:y, Float:z, Float:radius)
  107. {
  108. new Float:camera_x,Float:camera_y,Float:camera_z,Float:vector_x,Float:vector_y,Float:vector_z;
  109. GetPlayerCameraPos(playerid, camera_x, camera_y, camera_z);
  110. GetPlayerCameraFrontVector(playerid, vector_x, vector_y, vector_z);
  111. //
  112. new Float:vertical, Float:horizontal;
  113. //
  114. switch (GetPlayerWeapon(playerid))
  115. {
  116. case 34,35,36:
  117. {
  118. if (DistanceCameraTargetToLocation(camera_x, camera_y, camera_z, x, y, z, vector_x, vector_y, vector_z) < radius) return true;
  119. return false;
  120. }
  121. case 30,31: {vertical = 4.0; horizontal = -1.6;}
  122. case 33: {vertical = 2.7; horizontal = -1.0;}
  123. default: {vertical = 6.0; horizontal = -2.2;}
  124. }
  125. //
  126. new Float:angle = GetPointAngleToPoint(0, 0, floatsqroot(vector_x*vector_x+vector_y*vector_y), vector_z) - 270.0;
  127. new Float:resize_x, Float:resize_y, Float:resize_z = floatsin(angle+vertical, degrees);
  128. GetXYInFrontOfPoint(resize_x, resize_y, GetPointAngleToPoint(0, 0, vector_x, vector_y)+horizontal, floatcos(angle+vertical, degrees));
  129. //
  130. if (DistanceCameraTargetToLocation(camera_x, camera_y, camera_z, x, y, z, resize_x, resize_y, resize_z) < radius) return true;
  131. return false;
  132. }
Advertisement
Add Comment
Please, Sign In to add comment