Admigo

[0.3z]a_OnPlayerShootVehiclePart_v2.1

Jan 28th, 2014
2,222
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 12.81 KB | None | 0 0
  1. //-----------------------------------------------------------------
  2. //||+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++||
  3. //||+++++++++[Admigo's OnPlayerShootVehiclePart Callback+++++++++||
  4. //||+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++||
  5. //||+++++++++++++++++++++++++Version 2.0+++++++++++++++++++++++++||
  6. //||+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++||
  7. //-----------------------------------------------------------------
  8.  
  9. #include <a_samp>
  10.  
  11. #define BULLET_HIT_PETROL_TANK 0
  12. #define BULLET_HIT_LEFT_FRONT_WHEEL 1
  13. #define BULLET_HIT_RIGHT_FRONT_WHEEL 2
  14. #define BULLET_HIT_LEFT_BACK_WHEEL 3
  15. #define BULLET_HIT_RIGHT_BACK_WHEEL 4
  16. #define BULLET_HIT_BODY 5
  17.  
  18. #define VEHICLE_RIGHT_BACK_WHEEL 0
  19. #define VEHICLE_RIGHT_FRONT_WHEEL 1
  20. #define VEHICLE_LEFT_BACK_WHEEL 2
  21. #define VEHICLE_LEFT_FRONT_WHEEL 3
  22.  
  23. new VehicleTire[MAX_VEHICLES][4];
  24. new EnableVehicleDamageVar=0;
  25. new EnablePetrolCapExplosionVar=0;
  26. new EnableWheelTirePopVar=0;
  27.  
  28. enum WS_info
  29. {
  30.     Float:WS_Damage
  31. }
  32.  
  33. new WeaponShotInfo[17][WS_info] = {
  34.     {25.0},
  35.     {40.0},
  36.     {70.0},
  37.     {10.0},
  38.     {10.0},
  39.     {15.0},
  40.     {20.0},
  41.     {25.0},
  42.     {30.0},
  43.     {30.0},
  44.     {20.0},
  45.     {75.0},
  46.     {125.0},
  47.     {75.0},//Not Working Yet
  48.     {75.0},//Not Working Yet
  49.     {25.0},//Not Working Yet
  50.     {140.0}
  51. };
  52.  
  53. enum VS_info
  54. {
  55.     Float:VS_PetrolX,
  56.     Float:VS_PetrolY,
  57.     Float:VS_PetrolZ
  58. }
  59.  
  60.  
  61.  
  62. new VehicleShotInfo[212][VS_info] = {
  63.     {-1.06,-2.07,-0.03},
  64.     {1.25,-0.91,0.05},
  65.     {1.11,-1.92,0.17},
  66.     {-1.46,0.02,-0.66},
  67.     {-1.03,-2.37,0.06},
  68.     {-0.86,-2.16,-0.08},
  69.     {0.00,0.00,0.00},
  70.     {-1.07,-3.74,-0.42},
  71.     {-1.46,1.24,-0.57},
  72.     {-1.04,-2.82,0.14},
  73.     {-0.96,-1.66,0.23},
  74.     {1.06,-2.10,0.09},
  75.     {0.00,0.00,0.00},
  76.     {-0.46,0.53,-0.79},
  77.     {-0.66,-0.71,-0.70},
  78.     {-1.07,-2.06,0.05},
  79.     {-1.16,-2.72,-0.21},
  80.     {0.00,0.00,0.00},
  81.     {-1.24,-1.76,0.03},
  82.     {-1.09,-1.99,0.06},
  83.     {-1.03,-2.14,0.08},
  84.     {-1.02,-2.43,-0.14},
  85.     {-0.93,-0.41,-0.19},
  86.     {-1.13,-1.90,-0.28},
  87.     {-1.11,-0.54,-0.10},
  88.     {0.00,0.00,0.00},
  89.     {-1.00,-2.16,0.06},
  90.     {-1.27,-3.18,-0.18},
  91.     {-1.01,-2.65,-0.56},
  92.     {0.00,0.00,0.00},
  93.     {0.00,0.00,0.00},
  94.     {-1.32,-5.47,-0.12},
  95.     {0.00,0.00,0.00},
  96.     {-1.51,0.15,-0.67},
  97.     {0.00,0.00,0.00},
  98.     {0.00,0.00,0.00},
  99.     {-1.02,-1.81,0.16},
  100.     {-1.24,-4.98,-0.51},
  101.     {-1.06,-1.93,-0.00},
  102.     {-1.07,-1.50,0.07},
  103.     {-0.89,-0.47,-0.46},
  104.     {0.00,0.00,0.00},
  105.     {-1.17,-2.20,0.08},
  106.     {-1.24,1.25,-0.91},
  107.     {0.00,0.00,0.00},
  108.     {-1.07,-1.95,0.13},
  109.     {0.00,0.00,0.00},
  110.     {0.00,0.00,0.00},
  111.     {0.00,0.00,0.00},
  112.     {0.00,0.00,0.00},
  113.     {0.00,0.00,0.00},
  114.     {1.08,-1.21,-0.03},
  115.     {0.00,0.00,0.00},
  116.     {0.00,0.00,0.00},
  117.     {0.00,0.00,0.00},
  118.     {-1.52,0.00,-0.74},
  119.     {0.73,-0.05,-0.59},
  120.     {0.00,0.00,0.00},
  121.     {-1.11,-2.04,-0.09},
  122.     {-0.97,-2.30,0.21},
  123.     {0.00,0.00,0.00},
  124.     {0.00,0.00,0.00},
  125.     {0.00,0.00,0.00},
  126.     {-0.25,0.20,-0.17},
  127.     {0.00,0.00,0.00},
  128.     {0.00,0.00,0.00},
  129.     {0.00,0.00,0.00},
  130.     {-0.92,-2.30,0.08},
  131.     {-0.07,0.17,0.69},
  132.     {0.00,0.00,0.00},
  133.     {-1.17,-2.37,0.24},
  134.     {0.00,0.00,0.00},
  135.     {0.00,0.00,0.00},
  136.     {0.00,0.00,0.00},
  137.     {0.00,0.00,0.00},
  138.     {-1.09,-1.60,0.13},
  139.     {0.00,0.00,0.00},
  140.     {-1.03,-1.52,0.15},
  141.     {1.01,-0.33,0.23},
  142.     {-1.09,-1.98,0.09},
  143.     {-1.12,-0.88,0.14},
  144.     {0.00,0.00,0.00},
  145.     {1.03,-2.26,0.00},
  146.     {0.80,-2.50,-0.05},
  147.     {0.00,0.00,0.00},
  148.     {-0.88,0.71,0.03},
  149.     {-0.66,-3.17,0.58},
  150.     {0.00,0.00,0.00},
  151.     {0.00,0.00,0.00},
  152.     {1.22,-0.74,0.02},
  153.     {0.00,0.00,0.00},
  154.     {-1.05,-2.18,0.02},
  155.     {-1.07,-2.09,0.17},
  156.     {0.00,0.00,0.00},
  157.     {-1.00,-2.20,0.14},
  158.     {1.16,-1.91,-0.11},
  159.     {1.08,-1.83,0.15},
  160.     {0.00,0.00,0.00},
  161.     {-1.21,-0.01,0.09},
  162.     {-1.19,-1.09,-0.31},
  163.     {-0.91,-1.70,-0.06},
  164.     {0.00,0.00,0.00},
  165.     {-0.96,-1.88,0.13},
  166.     {-0.98,-2.03,0.04},
  167.     {-1.14,-1.82,0.13},
  168.     {1.22,-0.74,0.00},
  169.     {0.96,-1.11,-0.11},
  170.     {-1.08,-2.30,0.08},
  171.     {-1.35,-3.05,-0.67},
  172.     {0.00,0.00,0.00},
  173.     {0.00,0.00,0.00},
  174.     {0.00,0.00,0.00},
  175.     {0.00,0.00,0.00},
  176.     {0.00,0.00,0.00},
  177.     {-1.50,-0.88,-0.24},
  178.     {-1.08,0.51,-1.43},
  179.     {-1.13,-2.44,-0.01},
  180.     {-1.11,-1.95,0.08},
  181.     {1.09,-2.19,-0.08},
  182.     {0.00,0.00,0.00},
  183.     {0.00,0.00,0.00},
  184.     {-0.17,0.13,0.52},
  185.     {-0.14,0.18,0.53},
  186.     {-0.18,0.24,0.49},
  187.     {1.24,0.46,-1.06},
  188.     {-1.31,-0.50,-0.07},
  189.     {-0.94,-1.94,0.05},
  190.     {-1.13,-1.70,0.16},
  191.     {-0.51,-2.07,0.01},
  192.     {-1.15,-2.20,0.22},
  193.     {0.00,0.00,0.00},
  194.     {0.00,0.00,0.00},
  195.     {0.00,-2.43,-0.91},
  196.     {0.91,-1.97,0.11},
  197.     {-1.01,-0.83,-0.20},
  198.     {-1.13,-0.55,0.28},
  199.     {-0.98,-1.69,0.06},
  200.     {0.00,0.00,0.00},
  201.     {0.00,0.00,0.00},
  202.     {0.00,0.00,0.00},
  203.     {-1.23,-2.51,-0.03},
  204.     {0.00,0.00,0.00},
  205.     {-0.97,-1.92,0.31},
  206.     {-0.96,-0.94,-0.01},
  207.     {-1.15,2.04,0.32},
  208.     {0.00,0.00,0.00},
  209.     {1.22,-1.99,0.16},
  210.     {-1.09,-2.00,0.13},
  211.     {0.00,0.00,0.00},
  212.     {-0.89,-1.14,0.18},
  213.     {-1.10,-2.40,-0.02},
  214.     {-1.03,-2.66,0.07},
  215.     {-0.95,-0.94,0.45},
  216.     {0.00,0.00,0.00},
  217.     {1.27,-2.37,0.13},
  218.     {-0.80,-1.47,0.17},
  219.     {0.00,0.00,0.00},
  220.     {0.00,0.00,0.00},
  221.     {-0.84,-1.92,0.23},
  222.     {-1.01,-1.76,0.25},
  223.     {0.98,-1.83,0.20},
  224.     {1.13,-2.28,0.11},
  225.     {0.93,-0.71,0.05},
  226.     {0.00,0.00,0.00},
  227.     {0.00,0.00,0.00},
  228.     {0.95,-0.86,0.09},
  229.     {1.18,-2.26,0.06},
  230.     {0.00,0.00,0.00},
  231.     {0.00,0.00,0.00},
  232.     {0.00,0.00,0.00},
  233.     {0.00,0.00,0.00},
  234.     {0.62,-0.37,0.46},
  235.     {-0.35,-1.03,0.24},
  236.     {0.00,0.00,0.00},
  237.     {-0.59,-0.94,0.26},
  238.     {0.00,0.00,0.00},
  239.     {0.00,0.00,0.00},
  240.     {0.00,0.00,0.00},
  241.     {-1.33,2.89,-0.02},
  242.     {1.13,-2.29,0.16},
  243.     {1.23,-1.77,0.29},
  244.     {-0.22,0.01,0.54},
  245.     {-0.90,0.15,-0.32},
  246.     {-0.62,0.37,-0.12},
  247.     {0.00,0.00,0.00},
  248.     {1.07,-2.29,0.20},
  249.     {0.00,0.00,0.00},
  250.     {-1.22,-1.21,0.12},
  251.     {-1.20,-2.12,0.23},
  252.     {0.98,-0.89,0.10},
  253.     {0.00,0.00,0.00},
  254.     {0.00,0.00,0.00},
  255.     {0.00,0.00,0.00},
  256.     {0.00,0.00,0.00},
  257.     {0.00,0.00,0.00},
  258.     {0.00,0.00,0.00},
  259.     {-0.97,-2.16,0.06},
  260.     {-1.02,-2.16,0.07},
  261.     {-1.08,-1.95,0.18},
  262.     {0.00,0.00,0.00},
  263.     {0.95,-2.01,0.06},
  264.     {-1.36,-1.69,0.92},
  265.     {0.97,-1.95,0.08},
  266.     {1.24,-2.20,-0.04},
  267.     {0.00,0.00,0.00},
  268.     {-0.95,-0.93,-0.02},
  269.     {0.00,0.00,0.00},
  270.     {0.00,0.00,0.00},
  271.     {0.00,0.00,0.00},
  272.     {-1.26,-0.03,0.09},
  273.     {0.00,0.00,0.00},
  274.     {0.00,0.00,0.00}
  275. };
  276.  
  277.  
  278.  
  279. forward OnPlayerShootVehiclePart(playerid, weaponid, vehicleid,hittype);
  280.  
  281. public OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ)
  282. {
  283.     switch(hittype)
  284.     {
  285.         case BULLET_HIT_TYPE_VEHICLE:
  286.         {
  287.             new Float:fSet[9];
  288.             new modelid = GetVehicleModel(hitid);
  289.             GetVehicleModelInfo(modelid, VEHICLE_MODEL_INFO_PETROLCAP,fSet[0], fSet[1], fSet[2]);
  290.             GetVehicleModelInfo(modelid, VEHICLE_MODEL_INFO_WHEELSFRONT, fSet[3], fSet[4], fSet[5]);
  291.             GetVehicleModelInfo(modelid, VEHICLE_MODEL_INFO_WHEELSREAR,  fSet[6], fSet[7], fSet[8]);
  292.             if(fX >= VehicleShotInfo[modelid-400][VS_PetrolX]-0.15 && fX <= VehicleShotInfo[modelid-400][VS_PetrolX]+0.15 && fY >= VehicleShotInfo[modelid-400][VS_PetrolY]-0.15 && fY <= VehicleShotInfo[modelid-400][VS_PetrolY]+0.15 && fZ >= VehicleShotInfo[modelid-400][VS_PetrolZ]-0.15 && fZ <= VehicleShotInfo[modelid-400][VS_PetrolZ]+0.15)
  293.             {
  294.                 if(EnablePetrolCapExplosionVar==1)
  295.                 {
  296.                     new Float:vPosx,Float:vPosy,Float:vPosz;
  297.                     GetVehiclePos(hitid, vPosx,vPosy,vPosz);
  298.                     CreateExplosion(vPosx,vPosy,vPosz, 3, 30.0);
  299.                     SetVehicleToRespawn(hitid);
  300.                 }
  301.                 CallLocalFunction("OnPlayerShootVehiclePart", "iiii", playerid, weaponid, hitid,BULLET_HIT_PETROL_TANK);
  302.             }
  303.             else if(fX >= fSet[3]-2.4 && fX <= fSet[3] && fY >= fSet[4]-0.4 && fY <= fSet[4]+0.4 && fZ >= fSet[5]-0.4 && fZ <= fSet[5]+0.4)
  304.             {
  305.                 if(EnableWheelTirePopVar==1)
  306.                 {
  307.                     if(GetVehicleTireStatus(hitid,VEHICLE_LEFT_FRONT_WHEEL)==0)
  308.                     {
  309.                         SetVehicleTireStatus(hitid,VEHICLE_LEFT_FRONT_WHEEL);
  310.                     }
  311.                     //else SendClientMessage(playerid,-1,"This tire is already popped!");
  312.                 }
  313.                 CallLocalFunction("OnPlayerShootVehiclePart", "iiii", playerid, weaponid, hitid,BULLET_HIT_LEFT_FRONT_WHEEL);
  314.             }
  315.             else if(fX >= fSet[3]-0.4 && fX <= fSet[3]+0.4 && fY >= fSet[4]-0.4 && fY <= fSet[4]+0.4 && fZ >= fSet[5]-0.4 && fZ <= fSet[5]+0.4)
  316.             {
  317.                 if(EnableWheelTirePopVar==1)
  318.                 {
  319.                     if(GetVehicleTireStatus(hitid,VEHICLE_RIGHT_FRONT_WHEEL)==0)
  320.                     {
  321.                         SetVehicleTireStatus(hitid,VEHICLE_RIGHT_FRONT_WHEEL);
  322.                     }
  323.                     //else SendClientMessage(playerid,-1,"This tire is already popped!");
  324.                 }
  325.                 CallLocalFunction("OnPlayerShootVehiclePart", "iiii", playerid, weaponid, hitid,BULLET_HIT_RIGHT_FRONT_WHEEL);
  326.             }
  327.             else if(fX >= fSet[6]-2.4 && fX <= fSet[6] && fY >= fSet[7]-0.4 && fY <= fSet[7]+0.4 && fZ >= fSet[8]-0.4 && fZ <= fSet[8]+0.4)
  328.             {
  329.                 if(EnableWheelTirePopVar==1)
  330.                 {
  331.                     if(GetVehicleTireStatus(hitid,VEHICLE_LEFT_BACK_WHEEL)==0)
  332.                     {
  333.                         SetVehicleTireStatus(hitid,VEHICLE_LEFT_BACK_WHEEL);
  334.                     }
  335.                     //else SendClientMessage(playerid,-1,"This tire is already popped!");
  336.                 }
  337.                 CallLocalFunction("OnPlayerShootVehiclePart", "iiii", playerid, weaponid, hitid,BULLET_HIT_LEFT_BACK_WHEEL);
  338.             }
  339.             else if(fX >= fSet[6]-0.4 && fX <= fSet[6]+0.4 && fY >= fSet[7]-0.4 && fY <= fSet[7]+0.4 && fZ >= fSet[8]-0.4 && fZ <= fSet[8]+0.4)
  340.             {
  341.                 if(EnableWheelTirePopVar==1)
  342.                 {
  343.                     if(GetVehicleTireStatus(hitid,VEHICLE_RIGHT_BACK_WHEEL)==0)
  344.                     {
  345.                         SetVehicleTireStatus(hitid,VEHICLE_RIGHT_BACK_WHEEL);
  346.                     }
  347.                     //else SendClientMessage(playerid,-1,"This tire is already popped!");
  348.                 }
  349.                 CallLocalFunction("OnPlayerShootVehiclePart", "iiii", playerid, weaponid, hitid,BULLET_HIT_RIGHT_BACK_WHEEL);
  350.             }
  351.             if(EnableVehicleDamageVar==1)
  352.             {
  353.                 if(IsVehicleOccupied(hitid)==0)
  354.                 {
  355.                     new Float:vHP;
  356.                     GetVehicleHealth(hitid,vHP);
  357.                     SetVehicleHealth(hitid,vHP-WeaponShotInfo[GetPlayerWeapon(playerid)-22][WS_Damage]);
  358.                 }
  359.             }
  360.             CallLocalFunction("OnPlayerShootVehiclePart", "iiii", playerid, weaponid, hitid,BULLET_HIT_BODY);
  361.         }
  362.     }
  363.     #if defined hook_OnPlayerWeaponShot
  364.         hook_OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ);
  365.     #endif
  366.     return 1;
  367. }
  368.  
  369. #if defined _ALS_OnPlayerWeaponShot
  370.     #undef OnPlayerWeaponShot  
  371. #else
  372.     #define _ALS_OnPlayerWeaponShot
  373. #endif
  374.  
  375. #define OnPlayerWeaponShot hook_OnPlayerWeaponShot
  376.  
  377. #if defined hook_OnPlayerWeaponShot
  378.     forward hook_OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ);
  379. #endif
  380.  
  381. public OnVehicleSpawn(vehicleid)
  382. {
  383.     VehicleTire[vehicleid][0]=0;
  384.     VehicleTire[vehicleid][1]=0;
  385.     VehicleTire[vehicleid][2]=0;
  386.     VehicleTire[vehicleid][3]=0;
  387.     #if defined hook_OnVehicleSpawn
  388.         hook_OnVehicleSpawn(vehicleid);
  389.     #endif
  390.     return 1;
  391. }
  392.  
  393. #if defined _ALS_OnVehicleSpawn
  394. #undef OnVehicleSpawn  
  395. #else
  396. #define _ALS_OnVehicleSpawn
  397. #endif
  398. #define OnVehicleSpawn hook_OnVehicleSpawn
  399.  
  400. #if defined hook_OnVehicleSpawn
  401.     forward hook_OnVehicleSpawn(vehicleid);
  402. #endif
  403.  
  404. stock SetVehicleTireStatus(vehicleid,tire)
  405. {
  406.     VehicleTire[vehicleid][tire]=1;
  407.     new panels, doors, lights, tires;
  408.     GetVehicleDamageStatus(vehicleid, panels, doors, lights, tires);
  409.     tires=encode_tires(GetVehicleTireStatus(vehicleid,0), GetVehicleTireStatus(vehicleid,1), GetVehicleTireStatus(vehicleid,2), GetVehicleTireStatus(vehicleid,3));
  410.     UpdateVehicleDamageStatus(vehicleid, panels, doors, lights, tires);
  411.     return 1;
  412. }
  413.  
  414. stock GetVehicleTireStatus(vehicleid,tire)
  415. {
  416.     if(VehicleTire[vehicleid][tire]==1)
  417.     {
  418.         return 1;
  419.     }
  420.     return 0;
  421. }
  422.  
  423. forward HasPetrolCap(vid);
  424. public HasPetrolCap(vid)
  425. {
  426.     new modelid = GetVehicleModel(vid);
  427.     switch(modelid)
  428.     {
  429.         case 400,401,402,403,404,405,407,408,409,410,411,413,414,415,416,418,419,420,421,422,423,424,426,427,428,431,433,436,437,438,439,440,442,443,445,451,455,456,458,459,463,467,468,470,475,477,478,479,480,482,483,485,486,489,491,492,494,495,496,498,499:
  430.         {
  431.             return 1;
  432.         }
  433.         case 500,502,503,504,505,506,507,508,514,515,516,517,518,521,522,523,524,525,526,527,528,529,532,533,534,535,536,540,542,543,544,546,547,539,550,551,552,554,555,558,559,560,561,562,565,566,571,572,574,578,579,580,581,582,583,585,587,588,589,596,597,598,600,601,602,603,605,609:
  434.         {
  435.             return 1;
  436.         }
  437.     }
  438.     return 0;
  439. }
  440. encode_tires(tire1, tire2, tire3, tire4) return tire1 | (tire2 << 1) | (tire3 << 2) | (tire4 << 3);
  441.  
  442. stock EnableVehicleDamage(toggle)
  443. {
  444.     if(toggle==1)EnableVehicleDamageVar=1;
  445.     else EnableVehicleDamageVar=0;
  446. }
  447.  
  448. stock EnableVehiclePetrolCapExplosion(toggle)
  449. {
  450.     if(toggle==1)EnablePetrolCapExplosionVar=1;
  451.     else EnablePetrolCapExplosionVar=0;
  452. }
  453.  
  454. stock EnableVehicleWheelTirePop(toggle)
  455. {
  456.     if(toggle==1){EnableWheelTirePopVar=1;}
  457.     else EnableWheelTirePopVar=0;
  458. }
  459.  
  460. stock ToggleVehicleDamage()
  461. {
  462.     if(EnableVehicleDamageVar==0)EnableVehicleDamageVar=1;
  463.     else EnableVehicleDamageVar=0;
  464. }
  465.  
  466. stock ToggleVehiclePetrolCapExplosion()
  467. {
  468.     if(EnablePetrolCapExplosionVar==0)EnablePetrolCapExplosionVar=1;
  469.     else EnablePetrolCapExplosionVar=0;
  470. }
  471.  
  472. stock ToggleVehicleWheelTirePop()
  473. {
  474.     if(EnableWheelTirePopVar==0){EnableWheelTirePopVar=1;}
  475.     else EnableWheelTirePopVar=0;
  476. }
  477.  
  478. stock IsVehicleOccupied( vehicleid )
  479. {
  480.     for( new i = 0; i < MAX_PLAYERS; i++ )
  481.     {
  482.         if( IsPlayerConnected( i ) )
  483.         {
  484.             if( IsPlayerInVehicle( i, vehicleid ) ) return 1;
  485.         }
  486.     }
  487.     return 0;
  488. }
Advertisement
Add Comment
Please, Sign In to add comment