Guest User

IsPlayerNear* v 1.1

a guest
Aug 6th, 2013
152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 37.75 KB | None | 0 0
  1. #if defined _IsPlayerNear_included
  2.     #endinput
  3. #endif
  4. #define _IsPlayerNear_included
  5. #include <a_samp>
  6. #include <foreach>
  7. /*============================================================================*\
  8. ================================================================================
  9. ====================|             IsPlayerNear* v1.1        |===================
  10. ====================|           Created by: White_116       |===================
  11. ================================================================================
  12. ================================================================================
  13.                     Return INVALID_VEHICLE_ID or vehicleid;
  14. ================================================================================
  15. native GetVehicleIfPlayerNearVehicle(playerid, Float:Range=15.0, Float:MaxAngle=30.0);
  16. native GetVehicleIfPlayerNearBoot(playerid, Float:Range=1.5, Float:MaxAngle=30.0);
  17. native GetVehicleIfPlayerNearBonnet(playerid, Float:Range=1.5, Float:MaxAngle=30.0);
  18. native GetVehicleIfPlayerNearPetrolCap(playerid, Float:Range=0.75, Float:MaxAngle=30.0);
  19. native GetVehicleIfPlayerNearDoor(playerid, door, Float:Range=0.75, Float:MaxAngle=30.0);
  20. native GetVehicleIfPlayerNearDoor0(playerid, Float:Range=0.75, Float:MaxAngle=30.0);
  21. native GetVehicleIfPlayerNearDoor1(playerid, Float:Range=0.75, Float:MaxAngle=30.0);
  22. native GetVehicleIfPlayerNearDoor2(playerid, Float:Range=0.75, Float:MaxAngle=30.0);
  23. native GetVehicleIfPlayerNearDoor3(playerid, Float:Range=0.75, Float:MaxAngle=30.0);
  24. native GetVehicleIfPlayerNearWheel(playerid, wheel, Float:Range=0.75, Float:MaxAngle=30.0);
  25. native GetVehicleIfPlayerNearWheel0(playerid, Float:Range=0.75, Float:MaxAngle=30.0);
  26. native GetVehicleIfPlayerNearWheel1(playerid, Float:Range=0.75, Float:MaxAngle=30.0);
  27. native GetVehicleIfPlayerNearWheel2(playerid, Float:Range=0.75, Float:MaxAngle=30.0);
  28. native GetVehicleIfPlayerNearWheel3(playerid, Float:Range=0.75, Float:MaxAngle=30.0);
  29. ================================================================================
  30. ================================================================================
  31.                             Return 0 or 1 & x,y,z
  32. ================================================================================
  33. native GetVehicleBootPos(vehicleid, &Float:x, &Float:y, &Float:z);
  34. native GetVehicleBonnetPos(vehicleid, &Float:x, &Float:y, &Float:z);
  35. native GetVehiclePetrolCapPos(vehicleid, &Float:x, &Float:y, &Float:z);
  36. native GetVehicleDoorPos(vehicleid, door, &Float:x, &Float:y, &Float:z);
  37. native GetVehicleDoor0Pos(vehicleid, &Float:x, &Float:y, &Float:z);
  38. native GetVehicleDoor1Pos(vehicleid, &Float:x, &Float:y, &Float:z);
  39. native GetVehicleDoor2Pos(vehicleid, &Float:x, &Float:y, &Float:z);
  40. native GetVehicleDoor3Pos(vehicleid, &Float:x, &Float:y, &Float:z);
  41. native GetVehicleWheelPos(vehicleid, wheel, &Float:x, &Float:y, &Float:z);
  42. native GetVehicleWheel0Pos(vehicleid, &Float:x, &Float:y, &Float:z);
  43. native GetVehicleWheel1Pos(vehicleid, &Float:x, &Float:y, &Float:z);
  44. native GetVehicleWheel2Pos(vehicleid, &Float:x, &Float:y, &Float:z);
  45. native GetVehicleWheel3Pos(vehicleid, &Float:x, &Float:y, &Float:z);
  46. ================================================================================
  47. ================================================================================
  48.                                 Return 0 or 1;
  49. ================================================================================
  50. native IsPlayerNearVehicle(playerid, vehicleid, Float:Range=15.0, Float:MaxAngle=30.0);
  51. native IsPlayerNearVehicleBoot(playerid, vehicleid, Float:Range=1.5, Float:MaxAngle=30.0);
  52. native IsPlayerNearVehicleBonnet(playerid, vehicleid, Float:Range=1.5, Float:MaxAngle=30.0);
  53. native IsPlayerNearVehiclePetrolCap(playerid, vehicleid, Float:Range=0.75, Float:MaxAngle=30.0);
  54. native IsPlayerNearVehicleDoor(playerid, vehicleid, door, Float:Range=0.75, Float:MaxAngle=30.0);
  55. native IsPlayerNearVehicleDoor0(playerid, vehicleid, Float:Range=0.75, Float:MaxAngle=30.0);
  56. native IsPlayerNearVehicleDoor1(playerid, vehicleid, Float:Range=0.75, Float:MaxAngle=30.0);
  57. native IsPlayerNearVehicleDoor2(playerid, vehicleid, Float:Range=0.75, Float:MaxAngle=30.0);
  58. native IsPlayerNearVehicleDoor3(playerid, vehicleid, Float:Range=0.75, Float:MaxAngle=30.0);
  59. native IsPlayerNearVehicleWheel(playerid, vehicleid, wheel, Float:Range=0.75, Float:MaxAngle=30.0);
  60. native IsPlayerNearVehicleWheel0(playerid, vehicleid, Float:Range=0.75, Float:MaxAngle=30.0);
  61. native IsPlayerNearVehicleWheel1(playerid, vehicleid, Float:Range=0.75, Float:MaxAngle=30.0);
  62. native IsPlayerNearVehicleWheel2(playerid, vehicleid, Float:Range=0.75, Float:MaxAngle=30.0);
  63. native IsPlayerNearVehicleWheel3(playerid, vehicleid, Float:Range=0.75, Float:MaxAngle=30.0);
  64. ================================================================================
  65. \*============================================================================*/
  66.  
  67. new Float:VehicleSizeY[212];
  68. new Float:VehicleSizeYD[212];
  69. new Float:VehicleDoorFA[212];
  70. new Float:VehicleDoorFD[212];
  71. new Float:VehicleDoorRA[212];
  72. new Float:VehicleDoorRD[212];
  73.  
  74. new Float:VehicleWheelFA[212];
  75. new Float:VehicleWheelFD[212];
  76. new Float:VehicleWheelRA[212];
  77. new Float:VehicleWheelRD[212];
  78. new Float:VehiclePetrolCapA[212];
  79. new Float:VehiclePetrolCapD[212];
  80. new Iterator:VehicleStreamFor[MAX_PLAYERS]<MAX_VEHICLES>;
  81. new W_MaxPassengers[212 char]={50397441, 50528257, 16974081, 16974081, 50397953,
  82. 50528513, 16777987, 50397192,65807, 17302273, 50331905, 16973825, 69377, 1, 16843523,
  83. 16843009, 16843523,16843521, 257, 65795, 16777985,3, 16843521, 50331905, 16974593,
  84. 16843009,16843011,16777217, 257, 50397440, 65793, 16843009, 16973824, 65793, 16843008,
  85. 50397441,16843523, 16843523, 16777473, 16843009, 50528513, 66307, 983296, 65537, 16843011,
  86. 50397952, 251855105, 16846607, 16843008, 50529025, 16843009, 50401039, 251858703};
  87. new W_BootSideDoor[212 char]={0xFFFFFFFF,...};
  88.  
  89.  
  90. new W_HasC,W_HasSO,W_HasSI;
  91. #if defined FILTERSCRIPT
  92. public OnFilterScriptInit()
  93. {
  94.     W_HasC=funcidx("W_OnPlayerConnect") != -1;
  95.     W_HasSO=funcidx("W_OnVehicleStreamOut") != -1;
  96.     W_HasSI=funcidx("W_OnVehicleStreamIn") != -1;
  97.  
  98.     W_BootSideDoor{209}=0;
  99.     W_BootSideDoor{182}=0;
  100.     W_BootSideDoor{98}=0;
  101.     W_BootSideDoor{82}=0;
  102.     W_BootSideDoor{59}=0;
  103.     W_BootSideDoor{40}=0;
  104.     W_BootSideDoor{28}=0;
  105.     W_BootSideDoor{16}=0;
  106.     W_BootSideDoor{27}=0;
  107.     W_BootSideDoor{13}=0;
  108.    
  109.     Iter_Init(VehicleStreamFor);
  110.     for(new Float:x,Float:y,Float:z, id; id < 212; id++)
  111.     {
  112.         GetVehicleModelInfo(id+400, 1, x, y, z);
  113.         VehicleSizeY[id]=0.25+(y/2.0);
  114.         VehicleSizeYD[id]=3.0+(y/2.0);
  115.  
  116.         GetVehicleModelInfo(id+400, VEHICLE_MODEL_INFO_PETROLCAP, x, y, z);
  117.         x+=0.25;
  118.         VehiclePetrolCapD[id]=floatsqroot((x*x)+(y*y));
  119.         VehiclePetrolCapA[id]=atan2(x, y);
  120.  
  121.         GetVehicleModelInfo(id+400, VEHICLE_MODEL_INFO_FRONTSEAT, x, y, z);
  122.         x+=1.0;
  123.         VehicleDoorFD[id]=floatsqroot((x*x)+(y*y));
  124.         VehicleDoorFA[id]=atan2(x, y);
  125.  
  126.         if(W_BootSideDoor{id})
  127.         {
  128.             GetVehicleModelInfo(id+400, VEHICLE_MODEL_INFO_REARSEAT, x, y, z);
  129.             x+=1.0;
  130.             VehicleDoorRD[id]=floatsqroot((x*x)+(y*y));
  131.             VehicleDoorRA[id]=atan2(x, y);
  132.         }
  133.         else
  134.         {
  135.             GetVehicleModelInfo(id+400, VEHICLE_MODEL_INFO_REARSEAT, x, y, z);
  136.             y=-VehicleSizeY[id];
  137.             x-=0.15;
  138.             VehicleDoorRD[id]=floatsqroot((x*x)+(y*y));
  139.             VehicleDoorRA[id]=atan2(x, y);
  140.         }
  141.        
  142.         GetVehicleModelInfo(id+400, VEHICLE_MODEL_INFO_WHEELSFRONT, x, y, z);
  143.         x+=0.25;
  144.         VehicleWheelFD[id]=floatsqroot((x*x)+(y*y));
  145.         VehicleWheelFA[id]=atan2(x, y);
  146.  
  147.         GetVehicleModelInfo(id+400, VEHICLE_MODEL_INFO_WHEELSREAR, x, y, z);
  148.         x+=0.25;
  149.         VehicleWheelRD[id]=floatsqroot((x*x)+(y*y));
  150.         VehicleWheelRA[id]=atan2(x, y);
  151.     }
  152.     if(funcidx("W_OnFilterScriptInit") != -1)
  153.     {
  154.         return CallLocalFunction("W_OnFilterScriptInit", "");
  155.     }
  156.     return 1;
  157. }
  158. #if defined _ALS_OnFilterScriptInit
  159.     #undef OnFilterScriptInit
  160. #else
  161.     #define _ALS_OnFilterScriptInit
  162. #endif
  163. #define OnFilterScriptInit W_OnFilterScriptInit
  164. forward W_OnFilterScriptInit();
  165. #else /*not a filterscript*/
  166. public OnGameModeInit()
  167. {
  168.     W_HasC=funcidx("W_OnPlayerConnect") != -1;
  169.     W_HasSO=funcidx("W_OnVehicleStreamOut") != -1;
  170.     W_HasSI=funcidx("W_OnVehicleStreamIn") != -1;
  171.    
  172.     W_BootSideDoor{209}=0;
  173.     W_BootSideDoor{182}=0;
  174.     W_BootSideDoor{98}=0;
  175.     W_BootSideDoor{82}=0;
  176.     W_BootSideDoor{59}=0;
  177.     W_BootSideDoor{40}=0;
  178.     W_BootSideDoor{28}=0;
  179.     W_BootSideDoor{16}=0;
  180.     W_BootSideDoor{27}=0;
  181.     W_BootSideDoor{13}=0;
  182.    
  183.     Iter_Init(VehicleStreamFor);
  184.     for(new Float:x,Float:y,Float:z, id; id < 212; id++)
  185.     {
  186.         GetVehicleModelInfo(id+400, 1, x, y, z);
  187.         VehicleSizeY[id]=0.25+(y/2.0);
  188.         VehicleSizeYD[id]=3.0+(y/2.0);
  189.  
  190.         GetVehicleModelInfo(id+400, VEHICLE_MODEL_INFO_PETROLCAP, x, y, z);
  191.         x+=0.25;
  192.         VehiclePetrolCapD[id]=floatsqroot((x*x)+(y*y));
  193.         VehiclePetrolCapA[id]=atan2(x, y);
  194.  
  195.         GetVehicleModelInfo(id+400, VEHICLE_MODEL_INFO_FRONTSEAT, x, y, z);
  196.         x+=1.0;
  197.         VehicleDoorFD[id]=floatsqroot((x*x)+(y*y));
  198.         VehicleDoorFA[id]=atan2(x, y);
  199.  
  200.         if(W_BootSideDoor{id})
  201.         {
  202.             GetVehicleModelInfo(id+400, VEHICLE_MODEL_INFO_REARSEAT, x, y, z);
  203.             x+=1.0;
  204.             VehicleDoorRD[id]=floatsqroot((x*x)+(y*y));
  205.             VehicleDoorRA[id]=atan2(x, y);
  206.         }
  207.         else
  208.         {
  209.             GetVehicleModelInfo(id+400, VEHICLE_MODEL_INFO_REARSEAT, x, y, z);
  210.             y=-VehicleSizeY[id];
  211.             x-=0.15;
  212.             VehicleDoorRD[id]=floatsqroot((x*x)+(y*y));
  213.             VehicleDoorRA[id]=atan2(x, y);
  214.         }
  215.        
  216.         GetVehicleModelInfo(id+400, VEHICLE_MODEL_INFO_WHEELSFRONT, x, y, z);
  217.         x+=0.25;
  218.         VehicleWheelFD[id]=floatsqroot((x*x)+(y*y));
  219.         VehicleWheelFA[id]=atan2(x, y);
  220.  
  221.         GetVehicleModelInfo(id+400, VEHICLE_MODEL_INFO_WHEELSREAR, x, y, z);
  222.         x+=0.25;
  223.         VehicleWheelRD[id]=floatsqroot((x*x)+(y*y));
  224.         VehicleWheelRA[id]=atan2(x, y);
  225.     }
  226.     if(funcidx("W_OnGameModeInit") != -1)
  227.     {
  228.         return CallLocalFunction("W_OnGameModeInit", "");
  229.     }
  230.     return 1;
  231. }
  232. #if defined _ALS_OnGameModeInit
  233.     #undef OnGameModeInit
  234. #else
  235.     #define _ALS_OnGameModeInit
  236. #endif
  237. #define OnGameModeInit W_OnGameModeInit
  238. forward W_OnGameModeInit();
  239. #endif /*if defined FILTERSCRIPT*/
  240. //------------------------------------------------------------------------------
  241. public OnPlayerConnect(playerid)
  242. {
  243.     Iter_Clear(VehicleStreamFor[playerid]);
  244.     if(W_HasC)return CallLocalFunction("W_OnPlayerConnect", "i",playerid);
  245.     return 1;
  246. }
  247. #if defined _ALS_OnPlayerConnect
  248.     #undef OnPlayerConnect
  249. #else
  250.     #define _ALS_OnPlayerConnect
  251. #endif
  252. #define OnPlayerConnect W_OnPlayerConnect
  253. forward W_OnPlayerConnect(playerid);
  254. //------------------------------------------------------------------------------
  255. public OnVehicleStreamIn(vehicleid, forplayerid)
  256. {
  257.     if(IsPlayerNPC(forplayerid)) return 1;
  258.     Iter_Add(VehicleStreamFor[forplayerid],vehicleid);
  259.     if(W_HasSI)return CallLocalFunction("W_OnVehicleStreamIn", "ii", vehicleid, forplayerid);
  260.     return 1;
  261.    
  262. }
  263. #if defined _ALS_OnVehicleStreamIn
  264.     #undef OnVehicleStreamIn
  265. #else
  266.     #define _ALS_OnVehicleStreamIn
  267. #endif
  268. #define OnVehicleStreamIn W_OnVehicleStreamIn
  269. forward W_OnVehicleStreamIn(vehicleid, forplayerid);
  270. //------------------------------------------------------------------------------
  271. public OnVehicleStreamOut(vehicleid, forplayerid)
  272. {
  273.     if(IsPlayerNPC(forplayerid)) return 1;
  274.     Iter_Remove(VehicleStreamFor[forplayerid], vehicleid);
  275.     if(W_HasSO)return CallLocalFunction("W_OnVehicleStreamOut", "ii", vehicleid, forplayerid);
  276.     return 1;
  277. }
  278. #if defined _ALS_OnVehicleStreamOut
  279.     #undef OnVehicleStreamOut
  280. #else
  281.     #define _ALS_OnVehicleStreamOut
  282. #endif
  283. #define OnVehicleStreamOut W_OnVehicleStreamOut
  284. forward W_OnVehicleStreamOut(vehicleid, forplayerid);
  285. //------------------------------------------------------------------------------
  286. stock GetVehicleIfPlayerNearVehicle(playerid, Float:Range=15.0, Float:MaxAngle=30.0)
  287. {
  288.     new Float:x,Float:y,Float:z,Float:a,Float:d, Float:rx,Float:ry,Float:rz;
  289.     foreach(new vehicleid : VehicleStreamFor[playerid])
  290.     {
  291.         if((GetVehicleModel(vehicleid)-400) < 0)continue;
  292.         GetVehiclePos(vehicleid, x, y, z);
  293.         if(IsPlayerInRangeOfPoint(playerid, Range, x, y, z))
  294.         {
  295.             if(MaxAngle>=180.0)return vehicleid;
  296.             GetPlayerFacingAngle(playerid, d);
  297.             GetPlayerPos(playerid, rx, ry, rz);
  298.             if((a=atan2(x-rx,y-ry)) < 0)a*=-1;else a=360-a;
  299.             if(d > a)
  300.             {
  301.                 if((z=d-a) > 180.0) z=(360.0-d)+a;
  302.             }
  303.             else
  304.             {
  305.                 if((z=a-d) > 180.0) z=d+(360.0-a);
  306.             }
  307.             if(z < MaxAngle)return vehicleid;
  308.         }
  309.     }
  310.     return 0;
  311. }
  312.  
  313. stock GetVehicleIfPlayerNearBoot(playerid, Float:Range=1.5, Float:MaxAngle=30.0)
  314. {
  315.     new m, Float:x,Float:y,Float:z,Float:a,Float:d;
  316.     GetPlayerFacingAngle(playerid, d);
  317.     foreach(new vehicleid : VehicleStreamFor[playerid])
  318.     {
  319.         if((m=GetVehicleModel(vehicleid)-400) < 0)continue;
  320.         GetVehiclePos(vehicleid, x, y, z);
  321.         if(IsPlayerInRangeOfPoint(playerid,VehicleSizeYD[m],x,y,z))
  322.         {
  323.             GetVehicleZAngle(vehicleid, a);
  324.             x+=(VehicleSizeY[m] * floatsin(a, degrees));
  325.             y-=(VehicleSizeY[m] * floatcos(a, degrees));
  326.             if(IsPlayerInRangeOfPoint(playerid, Range, x, y, z))
  327.             {
  328.                 if(d > a)
  329.                 {
  330.                     if((z=d-a) > 180.0) z=(360.0-d)+a;
  331.                 }
  332.                 else
  333.                 {
  334.                     if((z=a-d) > 180.0) z=d+(360.0-a);
  335.                 }
  336.                 if(z < MaxAngle)return vehicleid;
  337.             }
  338.         }
  339.     }
  340.     return INVALID_VEHICLE_ID;
  341. }
  342.  
  343. stock GetVehicleIfPlayerNearBonnet(playerid, Float:Range=1.5, Float:MaxAngle=30.0)
  344. {
  345.     new m, Float:x,Float:y,Float:z,Float:a,Float:d;
  346.     GetPlayerFacingAngle(playerid, d); d+=180.0;
  347.     foreach(new vehicleid : VehicleStreamFor[playerid])
  348.     {
  349.         if((m=GetVehicleModel(vehicleid)-400) < 0)continue;
  350.         GetVehiclePos(vehicleid, x, y, z);
  351.         if(IsPlayerInRangeOfPoint(playerid,VehicleSizeYD[m],x,y,z))
  352.         {
  353.             GetVehicleZAngle(vehicleid, a);
  354.             x-=(VehicleSizeY[m] * floatsin(a, degrees));
  355.             y+=(VehicleSizeY[m] * floatcos(a, degrees));
  356.             if(IsPlayerInRangeOfPoint(playerid, Range, x, y, z))
  357.             {
  358.                 if(d > a)
  359.                 {
  360.                     if((z=d-a) > 180.0) z=(360.0-d)+a;
  361.                 }
  362.                 else
  363.                 {
  364.                     if((z=a-d) > 180.0) z=d+(360.0-a);
  365.                 }
  366.                 if(z < MaxAngle)return vehicleid;
  367.             }
  368.         }
  369.     }
  370.     return INVALID_VEHICLE_ID;
  371. }
  372.  
  373. stock GetVehicleIfPlayerNearPetrolCap(playerid, Float:Range=0.75, Float:MaxAngle=30.0)
  374. {
  375.     new m, Float:x,Float:y,Float:z,Float:a,Float:d;
  376.     GetPlayerFacingAngle(playerid, d);
  377.     foreach(new vehicleid : VehicleStreamFor[playerid])
  378.     {
  379.         if((m=GetVehicleModel(vehicleid)-400) < 0)continue;
  380.         GetVehiclePos(vehicleid, x, y, z);
  381.         if(IsPlayerInRangeOfPoint(playerid,VehicleSizeYD[m],x,y,z))
  382.         {
  383.             GetVehicleZAngle(vehicleid, a);
  384.             x+=VehiclePetrolCapD[m]*floatsin(VehiclePetrolCapA[m]-a,degrees);
  385.             y+=VehiclePetrolCapD[m]*floatcos(VehiclePetrolCapA[m]-a,degrees);
  386.             if(IsPlayerInRangeOfPoint(playerid, Range, x, y, z))
  387.             {
  388.                 if(VehiclePetrolCapA[m] >= 0.0)x=d+270.0; else x=d+90.0;
  389.                 if(x > a)
  390.                 {
  391.                     if((z=x-a) > 180.0) z=(360.0-x)+a;
  392.                 }
  393.                 else
  394.                 {
  395.                     if((z=a-x) > 180.0) z=x+(360.0-a);
  396.                 }
  397.                 if(z < MaxAngle)return vehicleid;
  398.             }
  399.         }
  400.     }
  401.     return INVALID_VEHICLE_ID;
  402. }
  403.  
  404. stock GetVehicleIfPlayerNearDoor(playerid, door, Float:Range=0.75, Float:MaxAngle=30.0)
  405. {
  406.     switch(door)
  407.     {
  408.         case 0: return GetVehicleIfPlayerNearDoor0(playerid, Range, MaxAngle);
  409.         case 1: return GetVehicleIfPlayerNearDoor1(playerid, Range, MaxAngle);
  410.         case 2: return GetVehicleIfPlayerNearDoor2(playerid, Range, MaxAngle);
  411.         case 3: return GetVehicleIfPlayerNearDoor3(playerid, Range, MaxAngle);
  412.     }
  413.     return INVALID_VEHICLE_ID;
  414. }
  415.  
  416. stock GetVehicleIfPlayerNearDoor0(playerid, Float:Range=0.75, Float:MaxAngle=30.0)
  417. {
  418.     new m, Float:x,Float:y,Float:z,Float:a,Float:d;
  419.     GetPlayerFacingAngle(playerid, d); d+=90.0;
  420.     foreach(new vehicleid : VehicleStreamFor[playerid])
  421.     {
  422.         if((m=GetVehicleModel(vehicleid)-400) < 0)continue;
  423.         GetVehiclePos(vehicleid, x, y, z);
  424.         if(IsPlayerInRangeOfPoint(playerid,VehicleSizeYD[m],x,y,z))
  425.         {
  426.             GetVehicleZAngle(vehicleid, a);
  427.             x+=VehicleDoorFD[m]*floatsin(-VehicleDoorFA[m]-a,degrees);
  428.             y+=VehicleDoorFD[m]*floatcos(-VehicleDoorFA[m]-a,degrees);
  429.             if(IsPlayerInRangeOfPoint(playerid, Range, x, y, z))
  430.             {
  431.                 if(d > a)
  432.                 {
  433.                     if((z=d-a) > 180.0) z=(360.0-d)+a;
  434.                 }
  435.                 else
  436.                 {
  437.                     if((z=a-d) > 180.0) z=d+(360.0-a);
  438.                 }
  439.                 if(z < MaxAngle)return vehicleid;
  440.             }
  441.         }
  442.     }
  443.     return INVALID_VEHICLE_ID;
  444. }
  445.  
  446. stock GetVehicleIfPlayerNearDoor1(playerid, Float:Range=0.75, Float:MaxAngle=30.0)
  447. {
  448.     new m, Float:x,Float:y,Float:z,Float:a,Float:d;
  449.     GetPlayerFacingAngle(playerid, d); d+=270.0;
  450.     foreach(new vehicleid : VehicleStreamFor[playerid])
  451.     {
  452.         if((m=GetVehicleModel(vehicleid)-400) < 0)continue;
  453.         if(W_MaxPassengers{m} < 1)continue;
  454.         GetVehiclePos(vehicleid, x, y, z);
  455.         if(IsPlayerInRangeOfPoint(playerid,VehicleSizeYD[m],x,y,z))
  456.         {
  457.             GetVehicleZAngle(vehicleid, a);
  458.             x+=VehicleDoorFD[m]*floatsin(VehicleDoorFA[m]-a,degrees);
  459.             y+=VehicleDoorFD[m]*floatcos(VehicleDoorFA[m]-a,degrees);
  460.             if(IsPlayerInRangeOfPoint(playerid, Range, x, y, z))
  461.             {
  462.                 if(d > a)
  463.                 {
  464.                     if((z=d-a) > 180.0) z=(360.0-d)+a;
  465.                 }
  466.                 else
  467.                 {
  468.                     if((z=a-d) > 180.0) z=d+(360.0-a);
  469.                 }
  470.                 if(z < MaxAngle)return vehicleid;
  471.             }
  472.         }
  473.     }
  474.     return INVALID_VEHICLE_ID;
  475. }
  476.  
  477. stock GetVehicleIfPlayerNearDoor2(playerid, Float:Range=0.75, Float:MaxAngle=30.0)
  478. {
  479.     new m, Float:x,Float:y,Float:z,Float:a,Float:d;
  480.     GetPlayerFacingAngle(playerid, d);
  481.     foreach(new vehicleid : VehicleStreamFor[playerid])
  482.     {
  483.         if((m=GetVehicleModel(vehicleid)-400) < 0)continue;
  484.         if(W_MaxPassengers{m} < 2)continue;
  485.         GetVehiclePos(vehicleid, x, y, z);
  486.         if(IsPlayerInRangeOfPoint(playerid,VehicleSizeYD[m],x,y,z))
  487.         {
  488.             GetVehicleZAngle(vehicleid, a);
  489.             x+=VehicleDoorRD[m]*floatsin(-VehicleDoorRA[m]-a,degrees);
  490.             y+=VehicleDoorRD[m]*floatcos(-VehicleDoorRA[m]-a,degrees);
  491.             if(IsPlayerInRangeOfPoint(playerid, Range, x, y, z))
  492.             {
  493.                 if(W_BootSideDoor{m})y=d+90.0;
  494.                 if(y > a)
  495.                 {
  496.                     if((z=y-a) > 180.0) z=(360.0-y)+a;
  497.                 }
  498.                 else
  499.                 {
  500.                     if((z=a-y) > 180.0) z=y+(360.0-a);
  501.                 }
  502.                 if(z < MaxAngle)return vehicleid;
  503.             }
  504.         }
  505.     }
  506.     return INVALID_VEHICLE_ID;
  507. }
  508.  
  509. stock GetVehicleIfPlayerNearDoor3(playerid, Float:Range=0.75, Float:MaxAngle=30.0)
  510. {
  511.     new m, Float:x,Float:y,Float:z,Float:a,Float:d;
  512.     GetPlayerFacingAngle(playerid, d); d+=270.0;
  513.     foreach(new vehicleid : VehicleStreamFor[playerid])
  514.     {
  515.         if((m=GetVehicleModel(vehicleid)-400) < 0)continue;
  516.         if(W_MaxPassengers{m} < 3)continue;
  517.         GetVehiclePos(vehicleid, x, y, z);
  518.         if(IsPlayerInRangeOfPoint(playerid,VehicleSizeYD[m],x,y,z))
  519.         {
  520.             GetVehicleZAngle(vehicleid, a);
  521.             x+=VehicleDoorRD[m]*floatsin(VehicleDoorRA[m]-a,degrees);
  522.             y+=VehicleDoorRD[m]*floatcos(VehicleDoorRA[m]-a,degrees);
  523.             if(IsPlayerInRangeOfPoint(playerid, Range, x, y, z))
  524.             {
  525.                 if(W_BootSideDoor{m})y=d+270.0;
  526.                 if(y > a)
  527.                 {
  528.                     if((z=y-a) > 180.0) z=(360.0-y)+a;
  529.                 }
  530.                 else
  531.                 {
  532.                     if((z=a-y) > 180.0) z=y+(360.0-a);
  533.                 }
  534.                 if(z < MaxAngle)return vehicleid;
  535.             }
  536.         }
  537.     }
  538.     return INVALID_VEHICLE_ID;
  539. }
  540.  
  541.  
  542. stock GetVehicleIfPlayerNearWheel(playerid, wheel, Float:Range=0.75, Float:MaxAngle=30.0)
  543. {
  544.     switch(wheel)
  545.     {
  546.         case 0: return GetVehicleIfPlayerNearWheel0(playerid, Range, MaxAngle);
  547.         case 1: return GetVehicleIfPlayerNearWheel1(playerid, Range, MaxAngle);
  548.         case 2: return GetVehicleIfPlayerNearWheel2(playerid, Range, MaxAngle);
  549.         case 3: return GetVehicleIfPlayerNearWheel3(playerid, Range, MaxAngle);
  550.     }
  551.     return INVALID_VEHICLE_ID;
  552. }
  553.  
  554. stock GetVehicleIfPlayerNearWheel0(playerid, Float:Range=0.75, Float:MaxAngle=30.0)
  555. {
  556.     new m, Float:x,Float:y,Float:z,Float:a,Float:d;
  557.     GetPlayerFacingAngle(playerid, d); d+=90.0;
  558.     foreach(new vehicleid : VehicleStreamFor[playerid])
  559.     {
  560.         if((m=GetVehicleModel(vehicleid)-400) < 0)continue;
  561.         GetVehiclePos(vehicleid, x, y, z);
  562.         if(IsPlayerInRangeOfPoint(playerid,VehicleSizeYD[m],x,y,z))
  563.         {
  564.             GetVehicleZAngle(vehicleid, a);
  565.             x+=VehicleWheelFD[m]*floatsin(-VehicleWheelFA[m]-a,degrees);
  566.             y+=VehicleWheelFD[m]*floatcos(-VehicleWheelFA[m]-a,degrees);
  567.             if(IsPlayerInRangeOfPoint(playerid, Range, x, y, z))
  568.             {
  569.                 if(d > a)
  570.                 {
  571.                     if((z=d-a) > 180.0) z=(360.0-d)+a;
  572.                 }
  573.                 else
  574.                 {
  575.                     if((z=a-d) > 180.0) z=d+(360.0-a);
  576.                 }
  577.                 if(z < MaxAngle)return vehicleid;
  578.             }
  579.         }
  580.     }
  581.     return INVALID_VEHICLE_ID;
  582. }
  583.  
  584. stock GetVehicleIfPlayerNearWheel1(playerid, Float:Range=0.75, Float:MaxAngle=30.0)
  585. {
  586.     new m, Float:x,Float:y,Float:z,Float:a,Float:d;
  587.     GetPlayerFacingAngle(playerid, d); d+=270.0;
  588.     foreach(new vehicleid : VehicleStreamFor[playerid])
  589.     {
  590.         if((m=GetVehicleModel(vehicleid)-400) < 0)continue;
  591.         GetVehiclePos(vehicleid, x, y, z);
  592.         if(IsPlayerInRangeOfPoint(playerid,VehicleSizeYD[m],x,y,z))
  593.         {
  594.             GetVehicleZAngle(vehicleid, a);
  595.             x+=VehicleWheelFD[m]*floatsin(VehicleWheelFA[m]-a,degrees);
  596.             y+=VehicleWheelFD[m]*floatcos(VehicleWheelFA[m]-a,degrees);
  597.             if(IsPlayerInRangeOfPoint(playerid, Range, x, y, z))
  598.             {
  599.                 if(d > a)
  600.                 {
  601.                     if((z=d-a) > 180.0) z=(360.0-d)+a;
  602.                 }
  603.                 else
  604.                 {
  605.                     if((z=a-d) > 180.0) z=d+(360.0-a);
  606.                 }
  607.                 if(z < MaxAngle)return vehicleid;
  608.             }
  609.         }
  610.     }
  611.     return INVALID_VEHICLE_ID;
  612. }
  613.  
  614. stock GetVehicleIfPlayerNearWheel2(playerid, Float:Range=0.75, Float:MaxAngle=30.0)
  615. {
  616.     new m, Float:x,Float:y,Float:z,Float:a,Float:d;
  617.     GetPlayerFacingAngle(playerid, d); d+=90.0;
  618.     foreach(new vehicleid : VehicleStreamFor[playerid])
  619.     {
  620.         if((m=GetVehicleModel(vehicleid)-400) < 0)continue;
  621.         GetVehiclePos(vehicleid, x, y, z);
  622.         if(IsPlayerInRangeOfPoint(playerid,VehicleSizeYD[m],x,y,z))
  623.         {
  624.             GetVehicleZAngle(vehicleid, a);
  625.             x+=VehicleWheelRD[m]*floatsin(-VehicleWheelRA[m]-a,degrees);
  626.             y+=VehicleWheelRD[m]*floatcos(-VehicleWheelRA[m]-a,degrees);
  627.             if(IsPlayerInRangeOfPoint(playerid, Range, x, y, z))
  628.             {
  629.                 if(d > a)
  630.                 {
  631.                     if((z=d-a) > 180.0) z=(360.0-d)+a;
  632.                 }
  633.                 else
  634.                 {
  635.                     if((z=a-d) > 180.0) z=d+(360.0-a);
  636.                 }
  637.                 if(z < MaxAngle)return vehicleid;
  638.             }
  639.         }
  640.     }
  641.     return INVALID_VEHICLE_ID;
  642. }
  643.  
  644. stock GetVehicleIfPlayerNearWheel3(playerid, Float:Range=0.75, Float:MaxAngle=30.0)
  645. {
  646.     new m, Float:x,Float:y,Float:z,Float:a,Float:d;
  647.     GetPlayerFacingAngle(playerid, d); d+=270.0;
  648.     foreach(new vehicleid : VehicleStreamFor[playerid])
  649.     {
  650.         if((m=GetVehicleModel(vehicleid)-400) < 0)continue;
  651.         GetVehiclePos(vehicleid, x, y, z);
  652.         if(IsPlayerInRangeOfPoint(playerid,VehicleSizeYD[m],x,y,z))
  653.         {
  654.             GetVehicleZAngle(vehicleid, a);
  655.             x+=VehicleWheelRD[m]*floatsin(VehicleWheelRA[m]-a,degrees);
  656.             y+=VehicleWheelRD[m]*floatcos(VehicleWheelRA[m]-a,degrees);
  657.             if(IsPlayerInRangeOfPoint(playerid, Range, x, y, z))
  658.             {
  659.                 if(d > a)
  660.                 {
  661.                     if((z=d-a) > 180.0) z=(360.0-d)+a;
  662.                 }
  663.                 else
  664.                 {
  665.                     if((z=a-d) > 180.0) z=d+(360.0-a);
  666.                 }
  667.                 if(z < MaxAngle)return vehicleid;
  668.             }
  669.         }
  670.     }
  671.     return INVALID_VEHICLE_ID;
  672. }
  673.  
  674. //******************************************************************************
  675. //******************************************************************************
  676. //******************************************************************************
  677. stock GetVehicleBootPos(vehicleid, &Float:x, &Float:y, &Float:z)
  678. {
  679.     new m=GetVehicleModel(vehicleid)-400;if(m<0)return 0;
  680.     new Float:a;
  681.     GetVehicleZAngle(vehicleid, a);
  682.     GetVehiclePos(vehicleid, x, y, z);
  683.     x+=(VehicleSizeY[m] * floatsin(a, degrees));
  684.     y-=(VehicleSizeY[m] * floatcos(a, degrees));
  685.     return 1;
  686. }
  687.  
  688. stock GetVehicleBonnetPos(vehicleid, &Float:x, &Float:y, &Float:z)
  689. {
  690.     new m=GetVehicleModel(vehicleid)-400;if(m<0)return 0;
  691.     new Float:a;
  692.     GetVehicleZAngle(vehicleid, a);
  693.     GetVehiclePos(vehicleid, x, y, z);
  694.     x-=(VehicleSizeY[m] * floatsin(a, degrees));
  695.     y+=(VehicleSizeY[m] * floatcos(a, degrees));
  696.     return 1;
  697. }
  698.  
  699. stock GetVehiclePetrolCapPos(vehicleid, &Float:x, &Float:y, &Float:z)
  700. {
  701.     new m=GetVehicleModel(vehicleid)-400;if(m<0)return 0;
  702.     new Float:a;
  703.     GetVehicleZAngle(vehicleid, a);
  704.     GetVehiclePos(vehicleid, x, y, z);
  705.     x+=VehiclePetrolCapD[m]*floatsin(VehiclePetrolCapA[m]-a,degrees);
  706.     y+=VehiclePetrolCapD[m]*floatcos(VehiclePetrolCapA[m]-a,degrees);
  707.     return 1;
  708. }
  709.  
  710. stock GetVehicleDoorPos(vehicleid, door, &Float:x, &Float:y, &Float:z)
  711. {
  712.     switch(door)
  713.     {
  714.         case 0: return GetVehicleDoor0Pos(vehicleid, x, y, z);
  715.         case 1: return GetVehicleDoor1Pos(vehicleid, x, y, z);
  716.         case 2: return GetVehicleDoor2Pos(vehicleid, x, y, z);
  717.         case 3: return GetVehicleDoor3Pos(vehicleid, x, y, z);
  718.     }
  719.     return 0;
  720. }
  721.  
  722. stock GetVehicleDoor0Pos(vehicleid, &Float:x, &Float:y, &Float:z)
  723. {
  724.     new m=GetVehicleModel(vehicleid)-400;if(m<0)return 0;
  725.     new Float:a;
  726.     GetVehicleZAngle(vehicleid, a);
  727.     GetVehiclePos(vehicleid, x, y, z);
  728.     x+=VehicleDoorFD[m]*floatsin(-VehicleDoorFA[m]-a,degrees);
  729.     y+=VehicleDoorFD[m]*floatcos(-VehicleDoorFA[m]-a,degrees);
  730.     return 1;
  731. }
  732.  
  733. stock GetVehicleDoor1Pos(vehicleid, &Float:x, &Float:y, &Float:z)
  734. {
  735.     new m=GetVehicleModel(vehicleid)-400;if(m<0)return 0;
  736.     new Float:a;
  737.     GetVehicleZAngle(vehicleid, a);
  738.     GetVehiclePos(vehicleid, x, y, z);
  739.     x+=VehicleDoorFD[m]*floatsin(VehicleDoorFA[m]-a,degrees);
  740.     y+=VehicleDoorFD[m]*floatcos(VehicleDoorFA[m]-a,degrees);
  741.     return 1;
  742. }
  743.  
  744. stock GetVehicleDoor2Pos(vehicleid, &Float:x, &Float:y, &Float:z)
  745. {
  746.     new m=GetVehicleModel(vehicleid)-400;if(m<0)return 0;
  747.     new Float:a;
  748.     GetVehicleZAngle(vehicleid, a);
  749.     GetVehiclePos(vehicleid, x, y, z);
  750.     x+=VehicleDoorRD[m]*floatsin(-VehicleDoorRA[m]-a,degrees);
  751.     y+=VehicleDoorRD[m]*floatcos(-VehicleDoorRA[m]-a,degrees);
  752.     return 1;
  753. }
  754.  
  755. stock GetVehicleDoor3Pos(vehicleid, &Float:x, &Float:y, &Float:z)
  756. {
  757.     new m=GetVehicleModel(vehicleid)-400;if(m<0)return 0;
  758.     new Float:a;
  759.     GetVehicleZAngle(vehicleid, a);
  760.     GetVehiclePos(vehicleid, x, y, z);
  761.     x+=VehicleDoorRD[m]*floatsin(VehicleDoorRA[m]-a,degrees);
  762.     y+=VehicleDoorRD[m]*floatcos(VehicleDoorRA[m]-a,degrees);
  763.     return 1;
  764. }
  765.  
  766. stock GetVehicleWheelPos(vehicleid, wheel, &Float:x, &Float:y, &Float:z)
  767. {
  768.     switch(wheel)
  769.     {
  770.         case 0: return GetVehicleWheel0Pos(vehicleid, x, y, z);
  771.         case 1: return GetVehicleWheel1Pos(vehicleid, x, y, z);
  772.         case 2: return GetVehicleWheel2Pos(vehicleid, x, y, z);
  773.         case 3: return GetVehicleWheel3Pos(vehicleid, x, y, z);
  774.     }
  775.     return 0;
  776. }
  777.  
  778. stock GetVehicleWheel0Pos(vehicleid, &Float:x, &Float:y, &Float:z)
  779. {
  780.     new m=GetVehicleModel(vehicleid)-400;if(m<0)return 0;
  781.     new Float:a;
  782.     GetVehicleZAngle(vehicleid, a);
  783.     GetVehiclePos(vehicleid, x, y, z);
  784.     x+=VehicleWheelFD[m]*floatsin(-VehicleWheelFA[m]-a,degrees);
  785.     y+=VehicleWheelFD[m]*floatcos(-VehicleWheelFA[m]-a,degrees);
  786.     return 1;
  787. }
  788.  
  789. stock GetVehicleWheel1Pos(vehicleid, &Float:x, &Float:y, &Float:z)
  790. {
  791.     new m=GetVehicleModel(vehicleid)-400;if(m<0)return 0;
  792.     new Float:a;
  793.     GetVehicleZAngle(vehicleid, a);
  794.     GetVehiclePos(vehicleid, x, y, z);
  795.     x+=VehicleWheelFD[m]*floatsin(VehicleWheelFA[m]-a,degrees);
  796.     y+=VehicleWheelFD[m]*floatcos(VehicleWheelFA[m]-a,degrees);
  797.     return 1;
  798. }
  799.  
  800. stock GetVehicleWheel2Pos(vehicleid, &Float:x, &Float:y, &Float:z)
  801. {
  802.     new m=GetVehicleModel(vehicleid)-400;if(m<0)return 0;
  803.     new Float:a;
  804.     GetVehicleZAngle(vehicleid, a);
  805.     GetVehiclePos(vehicleid, x, y, z);
  806.     x+=VehicleWheelRD[m]*floatsin(-VehicleWheelRA[m]-a,degrees);
  807.     y+=VehicleWheelRD[m]*floatcos(-VehicleWheelRA[m]-a,degrees);
  808.     return 1;
  809. }
  810.  
  811. stock GetVehicleWheel3Pos(vehicleid, &Float:x, &Float:y, &Float:z)
  812. {
  813.     new m=GetVehicleModel(vehicleid)-400;if(m<0)return 0;
  814.     new Float:a;
  815.     GetVehicleZAngle(vehicleid, a);
  816.     GetVehiclePos(vehicleid, x, y, z);
  817.     x+=VehicleWheelRD[m]*floatsin(VehicleWheelRA[m]-a,degrees);
  818.     y+=VehicleWheelRD[m]*floatcos(VehicleWheelRA[m]-a,degrees);
  819.     return 1;
  820. }
  821. //******************************************************************************
  822. //******************************************************************************
  823. //******************************************************************************
  824. stock IsPlayerNearVehicle(playerid, vehicleid, Float:Range=15.0, Float:MaxAngle=30.0)
  825. {
  826.     new  Float:x,Float:y,Float:z,Float:a,Float:d, Float:rx,Float:ry,Float:rz;
  827.     if((GetVehicleModel(vehicleid)-400) < 0)return 0;
  828.     GetVehiclePos(vehicleid, x, y, z);
  829.     if(IsPlayerInRangeOfPoint(playerid, Range, x, y, z))
  830.     {
  831.         if(MaxAngle>=180.0)return vehicleid;
  832.         GetPlayerFacingAngle(playerid, d);
  833.         GetPlayerPos(playerid, rx, ry, rz);
  834.         if((a=atan2(x-rx,y-ry)) < 0)a*=-1;else a=360-a;
  835.         if(d > a)
  836.         {
  837.             if((z=d-a) > 180.0) z=(360.0-d)+a;
  838.         }
  839.         else
  840.         {
  841.             if((z=a-d) > 180.0) z=d+(360.0-a);
  842.         }
  843.         if(z < MaxAngle)return 1;
  844.     }
  845.     return 0;
  846. }
  847.  
  848. stock IsPlayerNearVehicleBoot(playerid, vehicleid, Float:Range=1.5, Float:MaxAngle=30.0)
  849. {
  850.     new m, Float:x,Float:y,Float:z,Float:a,Float:d;
  851.     if((m=GetVehicleModel(vehicleid)-400) < 0)return 0;
  852.     GetPlayerFacingAngle(playerid, d);
  853.     GetVehiclePos(vehicleid, x, y, z);
  854.     GetVehicleZAngle(vehicleid, a);
  855.     x+=(VehicleSizeY[m] * floatsin(a, degrees));
  856.     y-=(VehicleSizeY[m] * floatcos(a, degrees));
  857.     if(IsPlayerInRangeOfPoint(playerid, Range, x, y, z))
  858.     {
  859.         if(d > a)
  860.         {
  861.             if((z=d-a) > 180.0) z=(360.0-d)+a;
  862.         }
  863.         else
  864.         {
  865.             if((z=a-d) > 180.0) z=d+(360.0-a);
  866.         }
  867.         if(z < MaxAngle)return 1;
  868.     }
  869.     return 0;
  870. }
  871.  
  872. stock IsPlayerNearVehicleBonnet(playerid, vehicleid, Float:Range=1.5, Float:MaxAngle=30.0)
  873. {
  874.     new m, Float:x,Float:y,Float:z,Float:a,Float:d;
  875.     if((m=GetVehicleModel(vehicleid)-400) < 0)return 0;
  876.     GetPlayerFacingAngle(playerid, d); d+=180.0;
  877.     GetVehiclePos(vehicleid, x, y, z);
  878.     GetVehicleZAngle(vehicleid, a);
  879.     x-=(VehicleSizeY[m] * floatsin(a, degrees));
  880.     y+=(VehicleSizeY[m] * floatcos(a, degrees));
  881.     if(IsPlayerInRangeOfPoint(playerid, Range, x, y, z))
  882.     {
  883.         if(d > a)
  884.         {
  885.             if((z=d-a) > 180.0) z=(360.0-d)+a;
  886.         }
  887.         else
  888.         {
  889.             if((z=a-d) > 180.0) z=d+(360.0-a);
  890.         }
  891.         if(z < MaxAngle)return 1;
  892.     }
  893.     return 0;
  894. }
  895.  
  896. stock IsPlayerNearVehiclePetrolCap(playerid, vehicleid, Float:Range=0.75, Float:MaxAngle=30.0)
  897. {
  898.     new m, Float:x,Float:y,Float:z,Float:a,Float:d;
  899.     if((m=GetVehicleModel(vehicleid)-400) < 0)return 0;
  900.     GetPlayerFacingAngle(playerid, d);
  901.     GetVehiclePos(vehicleid, x, y, z);
  902.     GetVehicleZAngle(vehicleid, a);
  903.     x+=VehiclePetrolCapD[m]*floatsin(VehiclePetrolCapA[m]-a,degrees);
  904.     y+=VehiclePetrolCapD[m]*floatcos(VehiclePetrolCapA[m]-a,degrees);
  905.     if(IsPlayerInRangeOfPoint(playerid, Range, x, y, z))
  906.     {
  907.         if(VehiclePetrolCapA[m] >= 0.0)x=d+270.0; else x=d+90.0;
  908.         if(x > a)
  909.         {
  910.             if((z=x-a) > 180.0) z=(360.0-x)+a;
  911.         }
  912.         else
  913.         {
  914.             if((z=a-x) > 180.0) z=x+(360.0-a);
  915.         }
  916.         if(z < MaxAngle)return 1;
  917.     }
  918.     return 0;
  919. }
  920.  
  921. stock IsPlayerNearVehicleDoor(playerid, vehicleid, door, Float:Range=0.75, Float:MaxAngle=30.0)
  922. {
  923.     switch(door)
  924.     {
  925.         case 0: return IsPlayerNearVehicleDoor0(playerid, vehicleid, Range, MaxAngle);
  926.         case 1: return IsPlayerNearVehicleDoor1(playerid, vehicleid, Range, MaxAngle);
  927.         case 2: return IsPlayerNearVehicleDoor2(playerid, vehicleid, Range, MaxAngle);
  928.         case 3: return IsPlayerNearVehicleDoor3(playerid, vehicleid, Range, MaxAngle);
  929.     }
  930.     return 0;
  931. }
  932.  
  933. stock IsPlayerNearVehicleDoor0(playerid, vehicleid, Float:Range=0.75, Float:MaxAngle=30.0)
  934. {
  935.     new m, Float:x,Float:y,Float:z,Float:a,Float:d;
  936.     if((m=GetVehicleModel(vehicleid)-400) < 0)return 0;
  937.     GetPlayerFacingAngle(playerid, d);d+=90.0;
  938.     GetVehiclePos(vehicleid, x, y, z);
  939.     GetVehicleZAngle(vehicleid, a);
  940.     x+=VehicleDoorFD[m]*floatsin(-VehicleDoorFA[m]-a,degrees);
  941.     y+=VehicleDoorFD[m]*floatcos(-VehicleDoorFA[m]-a,degrees);
  942.     if(IsPlayerInRangeOfPoint(playerid, Range, x, y, z))
  943.     {
  944.         if(d > a)
  945.         {
  946.             if((z=d-a) > 180.0) z=(360.0-d)+a;
  947.         }
  948.         else
  949.         {
  950.             if((z=a-d) > 180.0) z=d+(360.0-a);
  951.         }
  952.         if(z < MaxAngle)return 1;
  953.     }
  954.     return 0;
  955. }
  956.  
  957. stock IsPlayerNearVehicleDoor1(playerid, vehicleid, Float:Range=0.75, Float:MaxAngle=30.0)
  958. {
  959.     new m, Float:x,Float:y,Float:z,Float:a,Float:d;
  960.     if((m=GetVehicleModel(vehicleid)-400) < 0)return 0;
  961.     if(W_MaxPassengers{m} < 1)return 0;
  962.     GetPlayerFacingAngle(playerid, d);d+=270.0;
  963.     GetVehiclePos(vehicleid, x, y, z);
  964.     GetVehicleZAngle(vehicleid, a);
  965.     x+=VehicleDoorFD[m]*floatsin(VehicleDoorFA[m]-a,degrees);
  966.     y+=VehicleDoorFD[m]*floatcos(VehicleDoorFA[m]-a,degrees);
  967.     if(IsPlayerInRangeOfPoint(playerid, Range, x, y, z))
  968.     {
  969.         if(d > a)
  970.         {
  971.             if((z=d-a) > 180.0) z=(360.0-d)+a;
  972.         }
  973.         else
  974.         {
  975.             if((z=a-d) > 180.0) z=d+(360.0-a);
  976.         }
  977.         if(z < MaxAngle)return 1;
  978.     }
  979.     return 0;
  980. }
  981.  
  982. stock IsPlayerNearVehicleDoor2(playerid, vehicleid, Float:Range=0.75, Float:MaxAngle=30.0)
  983. {
  984.     new m, Float:x,Float:y,Float:z,Float:a,Float:d;
  985.     if((m=GetVehicleModel(vehicleid)-400) < 0)return 0;
  986.     if(W_MaxPassengers{m} < 2)return 0;
  987.     GetPlayerFacingAngle(playerid, d);
  988.     GetVehiclePos(vehicleid, x, y, z);
  989.     GetVehicleZAngle(vehicleid, a);
  990.     x+=VehicleDoorRD[m]*floatsin(-VehicleDoorRA[m]-a,degrees);
  991.     y+=VehicleDoorRD[m]*floatcos(-VehicleDoorRA[m]-a,degrees);
  992.     if(IsPlayerInRangeOfPoint(playerid, Range, x, y, z))
  993.     {
  994.         if(W_BootSideDoor{m})d+=90.0;
  995.         if(d > a)
  996.         {
  997.             if((z=d-a) > 180.0) z=(360.0-d)+a;
  998.         }
  999.         else
  1000.         {
  1001.             if((z=a-d) > 180.0) z=d+(360.0-a);
  1002.         }
  1003.         if(z < MaxAngle)return 1;
  1004.     }
  1005.     return 0;
  1006. }
  1007.  
  1008. stock IsPlayerNearVehicleDoor3(playerid, vehicleid, Float:Range=0.75, Float:MaxAngle=30.0)
  1009. {
  1010.     new m, Float:x,Float:y,Float:z,Float:a,Float:d;
  1011.     if((m=GetVehicleModel(vehicleid)-400) < 0)return 0;
  1012.     if(W_MaxPassengers{m} < 3)return 0;
  1013.     GetPlayerFacingAngle(playerid, d);
  1014.     GetVehiclePos(vehicleid, x, y, z);
  1015.     GetVehicleZAngle(vehicleid, a);
  1016.     x+=VehicleDoorRD[m]*floatsin(VehicleDoorRA[m]-a,degrees);
  1017.     y+=VehicleDoorRD[m]*floatcos(VehicleDoorRA[m]-a,degrees);
  1018.     if(IsPlayerInRangeOfPoint(playerid, Range, x, y, z))
  1019.     {
  1020.         if(W_BootSideDoor{m})d+=270.0;
  1021.         if(d > a)
  1022.         {
  1023.             if((z=d-a) > 180.0) z=(360.0-d)+a;
  1024.         }
  1025.         else
  1026.         {
  1027.             if((z=a-d) > 180.0) z=d+(360.0-a);
  1028.         }
  1029.         if(z < MaxAngle)return 1;
  1030.     }
  1031.     return 0;
  1032. }
  1033.  
  1034. stock IsPlayerNearVehicleWheel(playerid, vehicleid, wheel, Float:Range=0.75, Float:MaxAngle=30.0)
  1035. {
  1036.     switch(wheel)
  1037.     {
  1038.         case 0: return IsPlayerNearVehicleWheel0(playerid, vehicleid, Range, MaxAngle);
  1039.         case 1: return IsPlayerNearVehicleWheel1(playerid, vehicleid, Range, MaxAngle);
  1040.         case 2: return IsPlayerNearVehicleWheel2(playerid, vehicleid, Range, MaxAngle);
  1041.         case 3: return IsPlayerNearVehicleWheel3(playerid, vehicleid, Range, MaxAngle);
  1042.     }
  1043.     return 0;
  1044. }
  1045.  
  1046. stock IsPlayerNearVehicleWheel0(playerid, vehicleid, Float:Range=0.75, Float:MaxAngle=30.0)
  1047. {
  1048.     new m, Float:x,Float:y,Float:z,Float:a,Float:d;
  1049.     if((m=GetVehicleModel(vehicleid)-400) < 0)return 0;
  1050.     GetPlayerFacingAngle(playerid, d); d+=90.0;
  1051.     GetVehiclePos(vehicleid, x, y, z);
  1052.     GetVehicleZAngle(vehicleid, a);
  1053.     x+=VehicleWheelFD[m]*floatsin(-VehicleWheelFA[m]-a,degrees);
  1054.     y+=VehicleWheelFD[m]*floatcos(-VehicleWheelFA[m]-a,degrees);
  1055.     if(IsPlayerInRangeOfPoint(playerid, Range, x, y, z))
  1056.     {
  1057.         if(d > a)
  1058.         {
  1059.             if((z=d-a) > 180.0) z=(360.0-d)+a;
  1060.         }
  1061.         else
  1062.         {
  1063.             if((z=a-d) > 180.0) z=d+(360.0-a);
  1064.         }
  1065.         if(z < MaxAngle)return 1;
  1066.     }
  1067.     return 0;
  1068. }
  1069.  
  1070. stock IsPlayerNearVehicleWheel1(playerid, vehicleid, Float:Range=0.75, Float:MaxAngle=30.0)
  1071. {
  1072.     new m, Float:x,Float:y,Float:z,Float:a,Float:d;
  1073.     if((m=GetVehicleModel(vehicleid)-400) < 0)return 0;
  1074.     GetPlayerFacingAngle(playerid, d); d+=270.0;
  1075.     GetVehiclePos(vehicleid, x, y, z);
  1076.     GetVehicleZAngle(vehicleid, a);
  1077.     x+=VehicleWheelFD[m]*floatsin(VehicleWheelFA[m]-a,degrees);
  1078.     y+=VehicleWheelFD[m]*floatcos(VehicleWheelFA[m]-a,degrees);
  1079.     if(IsPlayerInRangeOfPoint(playerid, Range, x, y, z))
  1080.     {
  1081.         if(d > a)
  1082.         {
  1083.             if((z=d-a) > 180.0) z=(360.0-d)+a;
  1084.         }
  1085.         else
  1086.         {
  1087.             if((z=a-d) > 180.0) z=d+(360.0-a);
  1088.         }
  1089.         if(z < MaxAngle)return 1;
  1090.     }
  1091.     return 0;
  1092. }
  1093.  
  1094. stock IsPlayerNearVehicleWheel2(playerid, vehicleid, Float:Range=0.75, Float:MaxAngle=30.0)
  1095. {
  1096.     new m, Float:x,Float:y,Float:z,Float:a,Float:d;
  1097.     if((m=GetVehicleModel(vehicleid)-400) < 0)return 0;
  1098.     GetPlayerFacingAngle(playerid, d); d+=90.0;
  1099.     GetVehiclePos(vehicleid, x, y, z);
  1100.     GetVehicleZAngle(vehicleid, a);
  1101.     x+=VehicleWheelRD[m]*floatsin(-VehicleWheelRA[m]-a,degrees);
  1102.     y+=VehicleWheelRD[m]*floatcos(-VehicleWheelRA[m]-a,degrees);
  1103.     if(IsPlayerInRangeOfPoint(playerid, Range, x, y, z))
  1104.     {
  1105.         if(d > a)
  1106.         {
  1107.             if((z=d-a) > 180.0) z=(360.0-d)+a;
  1108.         }
  1109.         else
  1110.         {
  1111.             if((z=a-d) > 180.0) z=d+(360.0-a);
  1112.         }
  1113.         if(z < MaxAngle)return 1;
  1114.     }
  1115.     return 0;
  1116. }
  1117.  
  1118. stock IsPlayerNearVehicleWheel3(playerid, vehicleid, Float:Range=0.75, Float:MaxAngle=30.0)
  1119. {
  1120.     new m, Float:x,Float:y,Float:z,Float:a,Float:d;
  1121.     if((m=GetVehicleModel(vehicleid)-400) < 0)return 0;
  1122.     GetPlayerFacingAngle(playerid, d); d+=270.0;
  1123.     GetVehiclePos(vehicleid, x, y, z);
  1124.     GetVehicleZAngle(vehicleid, a);
  1125.     x+=VehicleWheelRD[m]*floatsin(VehicleWheelRA[m]-a,degrees);
  1126.     y+=VehicleWheelRD[m]*floatcos(VehicleWheelRA[m]-a,degrees);
  1127.     if(IsPlayerInRangeOfPoint(playerid, Range, x, y, z))
  1128.     {
  1129.         if(d > a)
  1130.         {
  1131.             if((z=d-a) > 180.0) z=(360.0-d)+a;
  1132.         }
  1133.         else
  1134.         {
  1135.             if((z=a-d) > 180.0) z=d+(360.0-a);
  1136.         }
  1137.         if(z < MaxAngle)return 1;
  1138.     }
  1139.     return 0;
  1140. }
Advertisement
Add Comment
Please, Sign In to add comment