Advertisement
Guest User

Petroltank explosion [FIXED BUG]

a guest
Jul 28th, 2011
1,721
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 9.12 KB | None | 0 0
  1. /*
  2.     SA-MP Exploding Petroltank Filterscript
  3.     Copyright © 2011 RyDeR`
  4. */
  5.  
  6. #include <a_samp>
  7.  
  8. #define FILTERSCRIPT
  9. #define VERSION "v0.1.0"
  10.  
  11. public OnFilterScriptInit()
  12. {
  13.     printf("\n » Petrolcap Explosion [" VERSION "] (by RyDeR`) has been loaded. \n");
  14.     return 1;
  15. }
  16.  
  17. public OnFilterScriptExit()
  18. {
  19.     printf("\n » Petrolcap Explosion [" VERSION "] (by RyDeR`) has been unloaded. \n");
  20.     return 1;
  21. }
  22.  
  23. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  24. {  
  25.     #define PRESSED(%0) \
  26.         (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
  27.        
  28.     if(PRESSED(KEY_FIRE) && GetPlayerState(playerid) == PLAYER_STATE_ONFOOT)
  29.     {  
  30.         new
  31.             Float: vehPos[3],
  32.             Float: vehAngle,
  33.             Float: capOffsets[3]
  34.         ;
  35.         for(new vehicleID = 1; vehicleID <= MAX_VEHICLES; ++vehicleID)
  36.         {
  37.             if(GetVehiclePos(vehicleID, vehPos[0], vehPos[1], vehPos[2]))
  38.             {
  39.                 GetVehicleZAngle(vehicleID, vehAngle);
  40.                
  41.                 if(GetPetrolcapOffsets(GetVehicleModel(vehicleID), capOffsets[0], capOffsets[1], capOffsets[2]))
  42.                 {
  43.                     vehPos[0] += (floatcos(vehAngle, degrees) * capOffsets[0]) - (floatsin(vehAngle, degrees) * capOffsets[1]);
  44.                     vehPos[1] += (floatsin(vehAngle, degrees) * capOffsets[0]) + (floatcos(vehAngle, degrees) * capOffsets[1]);
  45.                     vehPos[2] += capOffsets[2];
  46.  
  47.                     if(IsPlayerAimingAtPoint(playerid, vehPos[0], vehPos[1], vehPos[2], 0.1))
  48.                     {
  49.                         SetVehicleHealth(vehicleID, 0.0);
  50.                         CreateExplosion(vehPos[0], vehPos[1], vehPos[2], 0, random(3) + 4.0);  
  51.                        
  52.                         break;
  53.                     }
  54.                 }
  55.             }
  56.         }
  57.     }
  58.     #undef PRESSED
  59.    
  60.     return 1;
  61. }
  62.  
  63. stock Float: GetDistanceCameraToLocation(Float: cam_X, Float: cam_Y, Float: cam_Z, Float: vect_X, Float: vect_Y, Float: vect_Z, Float: dest_X, Float: dest_Y, Float: dest_Z, Float: targetDist = 0.0)
  64. {
  65.     cam_X -= dest_X;
  66.     cam_Y -= dest_Y;
  67.     cam_Z -= dest_Z;
  68.    
  69.     targetDist = floatsqroot(cam_X * cam_X + cam_Y * cam_Y + cam_Z * cam_Z);
  70.    
  71.     cam_X += vect_X * targetDist;
  72.     cam_Y += vect_Y * targetDist;
  73.     cam_Z += vect_Z * targetDist;
  74.    
  75.     return floatsqroot(cam_X * cam_X + cam_Y * cam_Y + cam_Z * cam_Z);
  76. }
  77.  
  78. stock IsPlayerAimingAtPoint(playerid, Float: pos_X, Float: pos_Y, Float: pos_Z, Float: aimRadius)
  79. {
  80.     new
  81.         Float: cam_Pos[3],
  82.         Float: cam_Vect[3]
  83.     ;
  84.     GetPlayerCameraPos(playerid, cam_Pos[0], cam_Pos[1], cam_Pos[2]);
  85.     GetPlayerCameraFrontVector(playerid, cam_Vect[0], cam_Vect[1], cam_Vect[2]);
  86.  
  87.     new
  88.         Float: aimOffset
  89.     ;
  90.     switch(GetPlayerWeapon(playerid))
  91.     {
  92.         case 22, 23, 24, 25, 26, 27, 28, 29, 32, 38: aimOffset = -2.1;
  93.         case 30, 31: aimOffset = -1.3;
  94.         case 33: aimOffset = -0.9;
  95.         case 34: return GetDistanceCameraToLocation(cam_Pos[0], cam_Pos[1], cam_Pos[2], cam_Vect[0], cam_Vect[1], cam_Vect[2], pos_X, pos_Y, pos_Z) < aimRadius;
  96.         default: return 0;
  97.     }
  98.     new
  99.         Float: aimAngle = atan2(cam_Vect[2], floatsqroot(cam_Vect[0] * cam_Vect[0] + cam_Vect[1] * cam_Vect[1])),
  100.         Float: tmpVar
  101.     ;
  102.     cam_Vect[2] = floatcos(aimAngle + (aimOffset * -2), degrees) * floatsin(-(atan2(cam_Vect[1], cam_Vect[0]) + aimOffset + 270.0), degrees);
  103.     tmpVar = floatcos(aimAngle + (aimOffset * -2), degrees) * floatcos(-(atan2(cam_Vect[1], cam_Vect[0]) + aimOffset + 270.0), degrees);
  104.    
  105.     return GetDistanceCameraToLocation(cam_Pos[0], cam_Pos[1], cam_Pos[2], cam_Vect[2], tmpVar, floatsin(aimAngle + (aimOffset * -2), degrees), pos_X, pos_Y, pos_Z) < aimRadius;
  106. }
  107.  
  108. stock GetPetrolcapOffsets(modelID, &Float: aimOffset_X, &Float: aimOffset_Y, &Float: aimOffset_Z)
  109. {
  110.     enum e_PetrolcapData
  111.     {
  112.         e_ModelID,
  113.         Float: e_Offset_X,
  114.         Float: e_Offset_Y,
  115.         Float: e_Offset_Z
  116.     };
  117.     static const
  118.         g_PetrolcapData[][e_PetrolcapData] =
  119.         {
  120.             { 400, -1.100, -2.059, -0.070 },
  121.             { 401, 1.090, -0.939, 0.000 },
  122.             { 402, 1.039, -1.919, 0.140 },
  123.             { 403, -1.450, 0.070, -0.800 },
  124.             { 404, -0.939, -2.359, -0.009 },
  125.             { 405, -1.039, -2.180, -0.039 },
  126.             { 407, -1.110, -3.660, -0.540 },
  127.             { 408, -1.230, 1.299, -0.660 },
  128.             { 409, -0.980, -2.829, 0.119 },
  129.             { 410, -1.019, -1.669, 0.209 },
  130.             { 411, 1.090, -2.099, 0.090 },
  131.             { 412, 0.000, -3.549, -0.170 },
  132.             { 413, -1.049, 0.340, -0.529 },
  133.             { 414, -0.920, -0.740, -0.699 },
  134.             { 415, -1.129, -2.069, 0.019 },
  135.             { 416, -1.350, -2.740, -0.189 },
  136.             { 418, -1.179, -1.769, -0.019 },
  137.             { 418, 1.210, -1.570, -0.079 },
  138.             { 419, -1.080, -1.990, 0.029 },
  139.             { 420, -1.100, -2.150, 0.100 },
  140.             { 421, -1.070, -2.440, -0.170 },
  141.             { 422, -1.080, -0.419, -0.200 },
  142.             { 423, -1.169, -1.899, -0.319 },
  143.             { 424, 0.180, 1.080, 0.430 },
  144.             { 426, -1.100, -2.150, 0.090 },
  145.             { 427, -1.269, -3.200, -0.159 },
  146.             { 428, -1.009, -3.059, -0.490 },
  147.             { 429, 0.990, -2.140, 0.140 },
  148.             { 431, -1.450, -5.469, -0.129 },
  149.             { 433, -1.519, 0.159, -0.680 },
  150.             { 434, -0.730, -1.580, 0.289 },
  151.             { 436, -1.070, -1.820, 0.140 },
  152.             { 437, -1.490, -4.969, -0.500 },
  153.             { 438, -1.090, -1.929, -0.019 },
  154.             { 439, -1.110, -1.509, 0.059 },
  155.             { 440, -1.090, -0.460, -0.419 },
  156.             { 442, -1.210, -2.210, 0.059 },
  157.             { 443, -1.529, 1.240, -0.899 },
  158.             { 444, 0.000, -2.599, -0.059 },
  159.             { 445, -1.039, -1.940, 0.129 },
  160.             { 451, 1.059, -1.220, -0.039 },
  161.             { 455, -1.529, -0.009, -0.759 },
  162.             { 456, 0.790, -0.050, -0.610 },
  163.             { 458, -1.110, -2.049, -0.109 },
  164.             { 459, -0.819, -2.390, -0.479 },
  165.             { 459, -1.049, -2.289, 0.219 },
  166.             { 461, 0.000, 0.140, 0.540 },
  167.             { 463, 0.000, 0.170, 0.469 },
  168.             { 466, 0.000, -3.000, -0.129 },
  169.             { 467, -1.070, -2.299, 0.119 },
  170.             { 468, 0.000, 0.009, 0.409 },
  171.             { 470, -1.259, -2.380, 0.239 },
  172.             { 475, -1.070, -1.600, 0.129 },
  173.             { 477, -1.200, -1.529, 0.239 },
  174.             { 478, 1.090, -0.340, 0.230 },
  175.             { 479, -1.090, -1.970, 0.029 },
  176.             { 480, -1.000, -0.879, 0.100 },
  177.             { 482, 1.070, -2.190, 0.000 },
  178.             { 483, 0.930, -2.509, -0.039 },
  179.             { 485, -0.889, 0.720, 0.019 },
  180.             { 486, -0.699, -3.170, 0.579 },
  181.             { 489, 1.159, -0.740, 0.000 },
  182.             { 490, 1.370, -1.250, 0.000 },
  183.             { 491, -1.070, -2.180, 0.000 },
  184.             { 492, -0.980, -2.240, 0.119 },
  185.             { 494, -1.019, -2.200, 0.119 },
  186.             { 495, 1.210, -1.909, -0.100 },
  187.             { 496, 1.059, -1.860, 0.150 },
  188.             { 498, -1.299, -0.009, 0.090 },
  189.             { 499, -1.110, -1.070, -0.349 },
  190.             { 500, -0.980, -1.710, -0.070 },
  191.             { 502, -1.080, -1.879, 0.140 },
  192.             { 503, -1.100, -2.049, 0.029 },
  193.             { 504, 0.000, -3.000, -0.129 },
  194.             { 504, -1.159, -1.830, 0.109 },
  195.             { 505, 1.159, -0.740, 0.000 },
  196.             { 506, 1.049, -1.110, -0.050 },
  197.             { 507, -1.169, -2.299, 0.109 },
  198.             { 508, -1.379, -3.049, -0.670 },
  199.             { 514, 1.429, 0.379, -0.649 },
  200.             { 515, -1.450, 0.479, -1.309 },
  201.             { 516, -1.100, -2.450, -0.029 },
  202.             { 517, -1.179, -1.950, 0.070 },
  203.             { 518, 1.210, -2.190, -0.070 },
  204.             { 521, 0.000, 0.129, 0.610 },
  205.             { 522, 0.000, 0.140, 0.610 },
  206.             { 523, 0.000, 0.150, 0.550 },
  207.             { 524, 1.529, 0.479, -0.990 },
  208.             { 525, -1.389, -0.509, -0.090 },
  209.             { 526, -0.990, -1.960, 0.059 },
  210.             { 527, -1.139, -1.690, 0.140 },
  211.             { 528, -1.090, -2.029, 0.119 },
  212.             { 529, -1.200, -2.220, 0.200 },
  213.             { 531, -0.009, 0.819, 0.430 },
  214.             { 533, 1.019, -1.960, 0.140 },
  215.             { 534, -1.039, -0.819, -0.200 },
  216.             { 535, -1.200, -0.560, 0.270 },
  217.             { 536, -1.070, -1.690, 0.090 },
  218.             { 540, -1.169, -2.519, -0.019 },
  219.             { 541, 1.009, -1.990, 0.150 },
  220.             { 542, -1.120, -1.919, 0.310 },
  221.             { 543, -1.100, -0.949, 0.000 },
  222.             { 544, -1.299, 2.069, 0.319 },
  223.             { 545, 0.000, -2.220, -0.319 },
  224.             { 546, 1.090, -2.029, 0.150 },
  225.             { 547, -1.169, -2.009, 0.119 },
  226.             { 549, -1.080, -1.179, 0.219 },
  227.             { 550, -1.070, -2.490, 0.039 },
  228.             { 551, -1.149, -2.670, 0.090 },
  229.             { 552, -1.289, -0.959, 0.490 },
  230.             { 554, 1.210, -2.390, 0.119 },
  231.             { 555, -0.790, -1.500, 0.180 },
  232.             { 557, 1.190, -2.569, 0.850 },
  233.             { 558, -1.090, -1.940, 0.270 },
  234.             { 559, -1.080, -1.710, 0.270 },
  235.             { 560, 1.139, -1.899, 0.129 },
  236.             { 561, 1.110, -2.299, 0.109 },
  237.             { 562, 1.039, -0.699, 0.070 },
  238.             { 565, 0.910, -0.870, 0.029 },
  239.             { 566, 1.080, -2.440, 0.019 },
  240.             { 567, 0.000, -2.859, -0.460 },
  241.             { 568, -0.500, -0.660, 0.379 },
  242.             { 571, 0.000, 0.189, 0.019 },
  243.             { 572, -0.379, -0.970, 0.159 },
  244.             { 573, -1.179, 0.479, -0.479 },
  245.             { 574, -0.750, -0.970, 0.280 },
  246.             { 575, 0.000, -2.779, -0.050 },
  247.             { 576, 0.000, -3.160, -0.250 },
  248.             { 578, -1.240, 2.910, -0.019 },
  249.             { 579, 1.220, -2.299, 0.170 },
  250.             { 580, 1.190, -1.820, 0.239 },
  251.             { 581, 0.000, 0.129, 0.540 },
  252.             { 582, -1.059, 0.140, -0.280 },
  253.             { 583, -0.759, 0.409, -0.059 },
  254.             { 584, 0.000, 0.000, 0.000 },
  255.             { 585, 1.139, -2.299, 0.200 },
  256.             { 587, -1.230, -1.220, 0.100 },
  257.             { 588, -1.460, -2.160, 0.219 },
  258.             { 589, 0.980, -0.889, 0.119 },
  259.             { 596, -1.110, -2.160, 0.100 },
  260.             { 597, -1.100, -2.150, 0.100 },
  261.             { 598, -1.080, -1.960, 0.159 },
  262.             { 599, 1.159, -0.740, 0.000 },
  263.             { 600, 1.090, -2.029, 0.079 },
  264.             { 601, -1.330, -1.690, 0.920 },
  265.             { 602, 1.090, -1.990, 0.109 },
  266.             { 603, 1.179, -2.190, -0.079 },
  267.             { 604, 0.000, -3.000, -0.129 },
  268.             { 605, -1.100, -0.949, 0.000 },
  269.             { 609, -1.299, 0.000, 0.100 }
  270.         }
  271.     ;
  272.     for(new i; i < sizeof(g_PetrolcapData); ++i)
  273.     {
  274.         if(g_PetrolcapData[i][e_ModelID] == modelID)
  275.         {
  276.             aimOffset_X = g_PetrolcapData[i][e_Offset_X];
  277.             aimOffset_Y = g_PetrolcapData[i][e_Offset_Y];
  278.             aimOffset_Z = g_PetrolcapData[i][e_Offset_Z];
  279.             return 1;
  280.         }
  281.     }
  282.     return 0;
  283. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement