rdemo.pwn 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. #include <a_samp>
  2. #define COLOR_WHITE 0xFFFFFFAA
  3. new status, rocket, usingrocket[MAX_PLAYERS], vehicle, player, timer;
  4. #define PRESSED(%0) \
  5. (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
  6. forward DestroyThisObject(objectid);
  7. forward SetRocketRotation();
  8. public OnFilterScriptExit()
  9. {
  10. DestroyObject(rocket);
  11. KillTimer(timer);
  12. }
  13. public OnPlayerCommandText(playerid, cmdtext[])
  14. {
  15. if (strcmp(cmdtext, "/attachr", true)==0)
  16. {
  17. if(IsPlayerAdmin(playerid))
  18. {
  19. if(status == 1)
  20. {
  21. DestroyObject(rocket);
  22. status = 0;
  23. usingrocket[playerid] = 0;
  24. //KillTimer(timer);
  25. }
  26. else
  27. {
  28. status = 1;
  29. usingrocket[playerid] = 1;
  30. vehicle = GetPlayerVehicleID(playerid);
  31. player = playerid;
  32. rocket = CreateObject(18848,0,0,0,0,0,0);
  33. AttachObjectToVehicle(rocket, vehicle, 0, -2, -1, 0, 0, 0);
  34. SendClientMessage(playerid, 0xFFFFFFAA, "Rocket Installed");
  35. timer = SetTimer("SetRocketRotation", 50, true);
  36. }
  37. }
  38. }
  39. return 0;
  40. }
  41. public SetRocketRotation()
  42. {
  43. AttachObjectToVehicle(rocket, vehicle, 0, -2, -1, 0, 0, (-GetRocketFacingAngle(player)));
  44. }
  45. Float:GetRocketFacingAngle(playerid)
  46. {
  47. new Float:X, Float:Y, Float:Z;
  48. GetPlayerPos(playerid, X, Y, Z);
  49. new
  50. Float:fPX, Float:fPY, Float:fPZ,
  51. Float:fVX, Float:fVY, Float:fVZ,
  52. Float:object_x, Float:object_y;
  53. // Change me to change the scale you want. A larger scale increases the distance from the camera.
  54. // A negative scale will inverse the vectors and make them face in the opposite direction.
  55. const
  56. Float:fScale = -5.0;
  57. GetPlayerCameraPos(playerid, fPX, fPY, fPZ);
  58. GetPlayerCameraFrontVector(playerid, fVX, fVY, fVZ);
  59. object_x = fPX + floatmul(fVX, fScale);
  60. object_y = fPY + floatmul(fVY, fScale);
  61. new Float:angle = GetAngleBetweenPoints(object_x, object_y, X, Y);
  62. return angle;
  63. }
  64. Float:GetAngleBetweenPoints(Float:X1,Float:Y1,Float:X2,Float:Y2)
  65. {
  66. new Float:angle=atan2(X2-X1,Y2-Y1);
  67. if(angle>360)angle-=360;
  68. if(angle<0)angle+=360;
  69. return angle;
  70. }