Guest User

Untitled

a guest
Nov 29th, 2011
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 106.35 KB | None | 0 0
  1. //==========================================================
  2. // Advanced Vehicle System version 1.0 by MadeMan
  3. //==========================================================
  4.  
  5. #define FILTERSCRIPT
  6.  
  7. #include <a_samp>
  8.  
  9. //=========================SETTINGS=========================
  10.  
  11. #undef MAX_PLAYERS
  12. #define MAX_PLAYERS 100
  13.  
  14. #define MAX_DVEHICLES 200
  15. #define MAX_DEALERSHIPS 10
  16. #define MAX_FUEL_STATIONS 10
  17.  
  18. #define VEHICLE_FILE_PATH "AVS/Vehicles/"
  19. #define DEALERSHIP_FILE_PATH "AVS/Dealerships/"
  20. #define FUEL_STATION_FILE_PATH "AVS/FuelStations/"
  21.  
  22. #define MAX_PLAYER_VEHICLES 3
  23. #define FUEL_PRICE 5
  24. #define GAS_CAN_PRICE 500
  25. #define ALARM_TIME 10000 // alarm duration in milliseconds (1 second = 1000 milliseconds)
  26. #define DEFAULT_NUMBER_PLATE "123 ABC"
  27.  
  28. //==========================================================
  29.  
  30. #define COLOR_BLACK 0x000000FF
  31. #define COLOR_RED 0xEE0000FF
  32. #define COLOR_GREEN 0x00CC00FF
  33. #define COLOR_BLUE 0x0000FFFF
  34. #define COLOR_ORANGE 0xFF6600FF
  35. #define COLOR_YELLOW 0xFFFF00FF
  36. #define COLOR_LIGHTBLUE 0x00FFFFFF
  37. #define COLOR_PURPLE 0xC2A2DAFF
  38. #define COLOR_GREY 0xC0C0C0FF
  39. #define COLOR_WHITE 0xFFFFFFFF
  40.  
  41. #define VEHICLE_DEALERSHIP 1
  42. #define VEHICLE_PLAYER 2
  43.  
  44. #define DIALOG_NONE 12345
  45. #define DIALOG_ERROR 12346
  46. #define DIALOG_VEHICLE 500
  47. #define DIALOG_VEHICLE_BUY 501
  48. #define DIALOG_VEHICLE_SELL 502
  49. #define DIALOG_FINDVEHICLE 503
  50. #define DIALOG_TRUNK 504
  51. #define DIALOG_TRUNK_ACTION 505
  52. #define DIALOG_VEHICLE_PLATE 507
  53. #define DIALOG_FUEL 510
  54. #define DIALOG_EDITVEHICLE 606
  55.  
  56. #define CMD:%1(%2) \
  57. forward cmd_%1(%2); \
  58. public cmd_%1(%2)
  59.  
  60. #define ShowErrorDialog(%1,%2) ShowPlayerDialog(%1, DIALOG_ERROR, DIALOG_STYLE_MSGBOX, "ERROR", %2, "OK", "")
  61.  
  62. new maintimer;
  63. new speedotimer;
  64. new savetimer;
  65.  
  66. new SaveVehicleIndex;
  67.  
  68. new RefuelTime[MAX_PLAYERS];
  69. new TrackCar[MAX_PLAYERS];
  70. new DialogReturn[MAX_PLAYERS];
  71.  
  72. new Text:SpeedoBox;
  73. new Text:SpeedoText[MAX_PLAYERS];
  74.  
  75. new Float:Fuel[MAX_VEHICLES] = {100.0, ...};
  76. new VehicleSecurity[MAX_VEHICLES];
  77.  
  78. new VehicleCreated[MAX_DVEHICLES];
  79. new VehicleID[MAX_DVEHICLES];
  80. new VehicleModel[MAX_DVEHICLES];
  81. new Float:VehiclePos[MAX_DVEHICLES][4];
  82. new VehicleColor[MAX_DVEHICLES][2];
  83. new VehicleInterior[MAX_DVEHICLES];
  84. new VehicleWorld[MAX_DVEHICLES];
  85. new VehicleOwner[MAX_DVEHICLES][MAX_PLAYER_NAME];
  86. new VehicleNumberPlate[MAX_DVEHICLES][16];
  87. new VehicleValue[MAX_DVEHICLES];
  88. new VehicleTrunk[MAX_DVEHICLES][5][2];
  89. new VehicleMods[MAX_DVEHICLES][14];
  90. new VehiclePaintjob[MAX_DVEHICLES] = {255, ...};
  91. new Text3D:VehicleLabel[MAX_DVEHICLES];
  92.  
  93. new DealershipCreated[MAX_DEALERSHIPS];
  94. new Float:DealershipPos[MAX_DEALERSHIPS][3];
  95. new Text3D:DealershipLabel[MAX_DEALERSHIPS];
  96.  
  97. new FuelStationCreated[MAX_FUEL_STATIONS];
  98. new Float:FuelStationPos[MAX_FUEL_STATIONS][3];
  99. new Text3D:FuelStationLabel[MAX_FUEL_STATIONS];
  100.  
  101. new VehicleNames[][] = {
  102. "Landstalker","Bravura","Buffalo","Linerunner","Perennial","Sentinel","Dumper","Firetruck","Trashmaster","Stretch","Manana","Infernus",
  103. "Voodoo","Pony","Mule","Cheetah","Ambulance","Leviathan","Moonbeam","Esperanto","Taxi","Washington","Bobcat","Mr Whoopee","BF Injection",
  104. "Hunter","Premier","Enforcer","Securicar","Banshee","Predator","Bus","Rhino","Barracks","Hotknife","Trailer","Previon","Coach","Cabbie",
  105. "Stallion","Rumpo","RC Bandit","Romero","Packer","Monster","Admiral","Squalo","Seasparrow","Pizzaboy","Tram","Trailer","Turismo","Speeder",
  106. "Reefer","Tropic","Flatbed","Yankee","Caddy","Solair","Berkley's RC Van","Skimmer","PCJ-600","Faggio","Freeway","RC Baron","RC Raider",
  107. "Glendale","Oceanic","Sanchez","Sparrow","Patriot","Quad","Coastguard","Dinghy","Hermes","Sabre","Rustler","ZR3 50","Walton","Regina",
  108. "Comet","BMX","Burrito","Camper","Marquis","Baggage","Dozer","Maverick","News Chopper","Rancher","FBI Rancher","Virgo","Greenwood",
  109. "Jetmax","Hotring","Sandking","Blista Compact","Police Maverick","Boxville","Benson","Mesa","RC Goblin","Hotring Racer A","Hotring Racer B",
  110. "Bloodring Banger","Rancher","Super GT","Elegant","Journey","Bike","Mountain Bike","Beagle","Cropdust","Stunt","Tanker","RoadTrain",
  111. "Nebula","Majestic","Buccaneer","Shamal","Hydra","FCR-900","NRG-500","HPV1000","Cement Truck","Tow Truck","Fortune","Cadrona","FBI Truck",
  112. "Willard","Forklift","Tractor","Combine","Feltzer","Remington","Slamvan","Blade","Freight","Streak","Vortex","Vincent","Bullet","Clover",
  113. "Sadler","Firetruck","Hustler","Intruder","Primo","Cargobob","Tampa","Sunrise","Merit","Utility","Nevada","Yosemite","Windsor","Monster A",
  114. "Monster B","Uranus","Jester","Sultan","Stratum","Elegy","Raindance","RC Tiger","Flash","Tahoma","Savanna","Bandito","Freight","Trailer",
  115. "Kart","Mower","Duneride","Sweeper","Broadway","Tornado","AT-400","DFT-30","Huntley","Stafford","BF-400","Newsvan","Tug","Trailer A","Emperor",
  116. "Wayfarer","Euros","Hotdog","Club","Trailer B","Trailer C","Andromada","Dodo","RC Cam","Launch","Police Car (LSPD)","Police Car (SFPD)",
  117. "Police Car (LVPD)","Police Ranger","Picador","S.W.A.T. Van","Alpha","Phoenix","Glendale","Sadler","Luggage Trailer A","Luggage Trailer B",
  118. "Stair Trailer","Boxville","Farm Plow","Utility Trailer"
  119. };
  120.  
  121. enum MainZone
  122. {
  123. Zone_Name[28],
  124. Float:Zone_Area[6]
  125. }
  126.  
  127. static const SanAndreasZones[][MainZone] = {
  128.  
  129. {"The Big Ear", {-410.00,1403.30,-3.00,-137.90,1681.20,200.00}},
  130. {"Aldea Malvada", {-1372.10,2498.50,0.00,-1277.50,2615.30,200.00}},
  131. {"Angel Pine", {-2324.90,-2584.20,-6.10,-1964.20,-2212.10,200.00}},
  132. {"Arco del Oeste", {-901.10,2221.80,0.00,-592.00,2571.90,200.00}},
  133. {"Avispa Country Club", {-2646.40,-355.40,0.00,-2270.00,-222.50,200.00}},
  134. {"Avispa Country Club", {-2831.80,-430.20,-6.10,-2646.40,-222.50,200.00}},
  135. {"Avispa Country Club", {-2361.50,-417.10,0.00,-2270.00,-355.40,200.00}},
  136. {"Avispa Country Club", {-2667.80,-302.10,-28.80,-2646.40,-262.30,71.10}},
  137. {"Avispa Country Club", {-2470.00,-355.40,0.00,-2270.00,-318.40,46.10}},
  138. {"Avispa Country Club", {-2550.00,-355.40,0.00,-2470.00,-318.40,39.70}},
  139. {"Back o Beyond", {-1166.90,-2641.10,0.00,-321.70,-1856.00,200.00}},
  140. {"Battery Point", {-2741.00,1268.40,-4.50,-2533.00,1490.40,200.00}},
  141. {"Bayside", {-2741.00,2175.10,0.00,-2353.10,2722.70,200.00}},
  142. {"Bayside Marina", {-2353.10,2275.70,0.00,-2153.10,2475.70,200.00}},
  143. {"Beacon Hill", {-399.60,-1075.50,-1.40,-319.00,-977.50,198.50}},
  144. {"Blackfield", {964.30,1203.20,-89.00,1197.30,1403.20,110.90}},
  145. {"Blackfield", {964.30,1403.20,-89.00,1197.30,1726.20,110.90}},
  146. {"Blackfield Chapel", {1375.60,596.30,-89.00,1558.00,823.20,110.90}},
  147. {"Blackfield Chapel", {1325.60,596.30,-89.00,1375.60,795.00,110.90}},
  148. {"Blackfield Intersection", {1197.30,1044.60,-89.00,1277.00,1163.30,110.90}},
  149. {"Blackfield Intersection", {1166.50,795.00,-89.00,1375.60,1044.60,110.90}},
  150. {"Blackfield Intersection", {1277.00,1044.60,-89.00,1315.30,1087.60,110.90}},
  151. {"Blackfield Intersection", {1375.60,823.20,-89.00,1457.30,919.40,110.90}},
  152. {"Blueberry", {104.50,-220.10,2.30,349.60,152.20,200.00}},
  153. {"Blueberry", {19.60,-404.10,3.80,349.60,-220.10,200.00}},
  154. {"Blueberry Acres", {-319.60,-220.10,0.00,104.50,293.30,200.00}},
  155. {"Caligula's Palace", {2087.30,1543.20,-89.00,2437.30,1703.20,110.90}},
  156. {"Caligula's Palace", {2137.40,1703.20,-89.00,2437.30,1783.20,110.90}},
  157. {"Calton Heights", {-2274.10,744.10,-6.10,-1982.30,1358.90,200.00}},
  158. {"Chinatown", {-2274.10,578.30,-7.60,-2078.60,744.10,200.00}},
  159. {"City Hall", {-2867.80,277.40,-9.10,-2593.40,458.40,200.00}},
  160. {"Come-A-Lot", {2087.30,943.20,-89.00,2623.10,1203.20,110.90}},
  161. {"Commerce", {1323.90,-1842.20,-89.00,1701.90,-1722.20,110.90}},
  162. {"Commerce", {1323.90,-1722.20,-89.00,1440.90,-1577.50,110.90}},
  163. {"Commerce", {1370.80,-1577.50,-89.00,1463.90,-1384.90,110.90}},
  164. {"Commerce", {1463.90,-1577.50,-89.00,1667.90,-1430.80,110.90}},
  165. {"Commerce", {1583.50,-1722.20,-89.00,1758.90,-1577.50,110.90}},
  166. {"Commerce", {1667.90,-1577.50,-89.00,1812.60,-1430.80,110.90}},
  167. {"Conference Center", {1046.10,-1804.20,-89.00,1323.90,-1722.20,110.90}},
  168. {"Conference Center", {1073.20,-1842.20,-89.00,1323.90,-1804.20,110.90}},
  169. {"Cranberry Station", {-2007.80,56.30,0.00,-1922.00,224.70,100.00}},
  170. {"Creek", {2749.90,1937.20,-89.00,2921.60,2669.70,110.90}},
  171. {"Dillimore", {580.70,-674.80,-9.50,861.00,-404.70,200.00}},
  172. {"Doherty", {-2270.00,-324.10,-0.00,-1794.90,-222.50,200.00}},
  173. {"Doherty", {-2173.00,-222.50,-0.00,-1794.90,265.20,200.00}},
  174. {"Downtown", {-1982.30,744.10,-6.10,-1871.70,1274.20,200.00}},
  175. {"Downtown", {-1871.70,1176.40,-4.50,-1620.30,1274.20,200.00}},
  176. {"Downtown", {-1700.00,744.20,-6.10,-1580.00,1176.50,200.00}},
  177. {"Downtown", {-1580.00,744.20,-6.10,-1499.80,1025.90,200.00}},
  178. {"Downtown", {-2078.60,578.30,-7.60,-1499.80,744.20,200.00}},
  179. {"Downtown", {-1993.20,265.20,-9.10,-1794.90,578.30,200.00}},
  180. {"Downtown Los Santos", {1463.90,-1430.80,-89.00,1724.70,-1290.80,110.90}},
  181. {"Downtown Los Santos", {1724.70,-1430.80,-89.00,1812.60,-1250.90,110.90}},
  182. {"Downtown Los Santos", {1463.90,-1290.80,-89.00,1724.70,-1150.80,110.90}},
  183. {"Downtown Los Santos", {1370.80,-1384.90,-89.00,1463.90,-1170.80,110.90}},
  184. {"Downtown Los Santos", {1724.70,-1250.90,-89.00,1812.60,-1150.80,110.90}},
  185. {"Downtown Los Santos", {1370.80,-1170.80,-89.00,1463.90,-1130.80,110.90}},
  186. {"Downtown Los Santos", {1378.30,-1130.80,-89.00,1463.90,-1026.30,110.90}},
  187. {"Downtown Los Santos", {1391.00,-1026.30,-89.00,1463.90,-926.90,110.90}},
  188. {"Downtown Los Santos", {1507.50,-1385.20,110.90,1582.50,-1325.30,335.90}},
  189. {"East Beach", {2632.80,-1852.80,-89.00,2959.30,-1668.10,110.90}},
  190. {"East Beach", {2632.80,-1668.10,-89.00,2747.70,-1393.40,110.90}},
  191. {"East Beach", {2747.70,-1668.10,-89.00,2959.30,-1498.60,110.90}},
  192. {"East Beach", {2747.70,-1498.60,-89.00,2959.30,-1120.00,110.90}},
  193. {"East Los Santos", {2421.00,-1628.50,-89.00,2632.80,-1454.30,110.90}},
  194. {"East Los Santos", {2222.50,-1628.50,-89.00,2421.00,-1494.00,110.90}},
  195. {"East Los Santos", {2266.20,-1494.00,-89.00,2381.60,-1372.00,110.90}},
  196. {"East Los Santos", {2381.60,-1494.00,-89.00,2421.00,-1454.30,110.90}},
  197. {"East Los Santos", {2281.40,-1372.00,-89.00,2381.60,-1135.00,110.90}},
  198. {"East Los Santos", {2381.60,-1454.30,-89.00,2462.10,-1135.00,110.90}},
  199. {"East Los Santos", {2462.10,-1454.30,-89.00,2581.70,-1135.00,110.90}},
  200. {"Easter Basin", {-1794.90,249.90,-9.10,-1242.90,578.30,200.00}},
  201. {"Easter Basin", {-1794.90,-50.00,-0.00,-1499.80,249.90,200.00}},
  202. {"Easter Bay Airport", {-1499.80,-50.00,-0.00,-1242.90,249.90,200.00}},
  203. {"Easter Bay Airport", {-1794.90,-730.10,-3.00,-1213.90,-50.00,200.00}},
  204. {"Easter Bay Airport", {-1213.90,-730.10,0.00,-1132.80,-50.00,200.00}},
  205. {"Easter Bay Airport", {-1242.90,-50.00,0.00,-1213.90,578.30,200.00}},
  206. {"Easter Bay Airport", {-1213.90,-50.00,-4.50,-947.90,578.30,200.00}},
  207. {"Easter Bay Airport", {-1315.40,-405.30,15.40,-1264.40,-209.50,25.40}},
  208. {"Easter Bay Airport", {-1354.30,-287.30,15.40,-1315.40,-209.50,25.40}},
  209. {"Easter Bay Airport", {-1490.30,-209.50,15.40,-1264.40,-148.30,25.40}},
  210. {"Easter Bay Chemicals", {-1132.80,-768.00,0.00,-956.40,-578.10,200.00}},
  211. {"Easter Bay Chemicals", {-1132.80,-787.30,0.00,-956.40,-768.00,200.00}},
  212. {"El Castillo del Diablo", {-464.50,2217.60,0.00,-208.50,2580.30,200.00}},
  213. {"El Castillo del Diablo", {-208.50,2123.00,-7.60,114.00,2337.10,200.00}},
  214. {"El Castillo del Diablo", {-208.50,2337.10,0.00,8.40,2487.10,200.00}},
  215. {"El Corona", {1812.60,-2179.20,-89.00,1970.60,-1852.80,110.90}},
  216. {"El Corona", {1692.60,-2179.20,-89.00,1812.60,-1842.20,110.90}},
  217. {"El Quebrados", {-1645.20,2498.50,0.00,-1372.10,2777.80,200.00}},
  218. {"Esplanade East", {-1620.30,1176.50,-4.50,-1580.00,1274.20,200.00}},
  219. {"Esplanade East", {-1580.00,1025.90,-6.10,-1499.80,1274.20,200.00}},
  220. {"Esplanade East", {-1499.80,578.30,-79.60,-1339.80,1274.20,20.30}},
  221. {"Esplanade North", {-2533.00,1358.90,-4.50,-1996.60,1501.20,200.00}},
  222. {"Esplanade North", {-1996.60,1358.90,-4.50,-1524.20,1592.50,200.00}},
  223. {"Esplanade North", {-1982.30,1274.20,-4.50,-1524.20,1358.90,200.00}},
  224. {"Fallen Tree", {-792.20,-698.50,-5.30,-452.40,-380.00,200.00}},
  225. {"Fallow Bridge", {434.30,366.50,0.00,603.00,555.60,200.00}},
  226. {"Fern Ridge", {508.10,-139.20,0.00,1306.60,119.50,200.00}},
  227. {"Financial", {-1871.70,744.10,-6.10,-1701.30,1176.40,300.00}},
  228. {"Fisher's Lagoon", {1916.90,-233.30,-100.00,2131.70,13.80,200.00}},
  229. {"Flint Intersection", {-187.70,-1596.70,-89.00,17.00,-1276.60,110.90}},
  230. {"Flint Range", {-594.10,-1648.50,0.00,-187.70,-1276.60,200.00}},
  231. {"Fort Carson", {-376.20,826.30,-3.00,123.70,1220.40,200.00}},
  232. {"Foster Valley", {-2270.00,-430.20,-0.00,-2178.60,-324.10,200.00}},
  233. {"Foster Valley", {-2178.60,-599.80,-0.00,-1794.90,-324.10,200.00}},
  234. {"Foster Valley", {-2178.60,-1115.50,0.00,-1794.90,-599.80,200.00}},
  235. {"Foster Valley", {-2178.60,-1250.90,0.00,-1794.90,-1115.50,200.00}},
  236. {"Frederick Bridge", {2759.20,296.50,0.00,2774.20,594.70,200.00}},
  237. {"Gant Bridge", {-2741.40,1659.60,-6.10,-2616.40,2175.10,200.00}},
  238. {"Gant Bridge", {-2741.00,1490.40,-6.10,-2616.40,1659.60,200.00}},
  239. {"Ganton", {2222.50,-1852.80,-89.00,2632.80,-1722.30,110.90}},
  240. {"Ganton", {2222.50,-1722.30,-89.00,2632.80,-1628.50,110.90}},
  241. {"Garcia", {-2411.20,-222.50,-0.00,-2173.00,265.20,200.00}},
  242. {"Garcia", {-2395.10,-222.50,-5.30,-2354.00,-204.70,200.00}},
  243. {"Garver Bridge", {-1339.80,828.10,-89.00,-1213.90,1057.00,110.90}},
  244. {"Garver Bridge", {-1213.90,950.00,-89.00,-1087.90,1178.90,110.90}},
  245. {"Garver Bridge", {-1499.80,696.40,-179.60,-1339.80,925.30,20.30}},
  246. {"Glen Park", {1812.60,-1449.60,-89.00,1996.90,-1350.70,110.90}},
  247. {"Glen Park", {1812.60,-1100.80,-89.00,1994.30,-973.30,110.90}},
  248. {"Glen Park", {1812.60,-1350.70,-89.00,2056.80,-1100.80,110.90}},
  249. {"Green Palms", {176.50,1305.40,-3.00,338.60,1520.70,200.00}},
  250. {"Greenglass College", {964.30,1044.60,-89.00,1197.30,1203.20,110.90}},
  251. {"Greenglass College", {964.30,930.80,-89.00,1166.50,1044.60,110.90}},
  252. {"Hampton Barns", {603.00,264.30,0.00,761.90,366.50,200.00}},
  253. {"Hankypanky Point", {2576.90,62.10,0.00,2759.20,385.50,200.00}},
  254. {"Harry Gold Parkway", {1777.30,863.20,-89.00,1817.30,2342.80,110.90}},
  255. {"Hashbury", {-2593.40,-222.50,-0.00,-2411.20,54.70,200.00}},
  256. {"Hilltop Farm", {967.30,-450.30,-3.00,1176.70,-217.90,200.00}},
  257. {"Hunter Quarry", {337.20,710.80,-115.20,860.50,1031.70,203.70}},
  258. {"Idlewood", {1812.60,-1852.80,-89.00,1971.60,-1742.30,110.90}},
  259. {"Idlewood", {1812.60,-1742.30,-89.00,1951.60,-1602.30,110.90}},
  260. {"Idlewood", {1951.60,-1742.30,-89.00,2124.60,-1602.30,110.90}},
  261. {"Idlewood", {1812.60,-1602.30,-89.00,2124.60,-1449.60,110.90}},
  262. {"Idlewood", {2124.60,-1742.30,-89.00,2222.50,-1494.00,110.90}},
  263. {"Idlewood", {1971.60,-1852.80,-89.00,2222.50,-1742.30,110.90}},
  264. {"Jefferson", {1996.90,-1449.60,-89.00,2056.80,-1350.70,110.90}},
  265. {"Jefferson", {2124.60,-1494.00,-89.00,2266.20,-1449.60,110.90}},
  266. {"Jefferson", {2056.80,-1372.00,-89.00,2281.40,-1210.70,110.90}},
  267. {"Jefferson", {2056.80,-1210.70,-89.00,2185.30,-1126.30,110.90}},
  268. {"Jefferson", {2185.30,-1210.70,-89.00,2281.40,-1154.50,110.90}},
  269. {"Jefferson", {2056.80,-1449.60,-89.00,2266.20,-1372.00,110.90}},
  270. {"Julius Thruway East", {2623.10,943.20,-89.00,2749.90,1055.90,110.90}},
  271. {"Julius Thruway East", {2685.10,1055.90,-89.00,2749.90,2626.50,110.90}},
  272. {"Julius Thruway East", {2536.40,2442.50,-89.00,2685.10,2542.50,110.90}},
  273. {"Julius Thruway East", {2625.10,2202.70,-89.00,2685.10,2442.50,110.90}},
  274. {"Julius Thruway North", {2498.20,2542.50,-89.00,2685.10,2626.50,110.90}},
  275. {"Julius Thruway North", {2237.40,2542.50,-89.00,2498.20,2663.10,110.90}},
  276. {"Julius Thruway North", {2121.40,2508.20,-89.00,2237.40,2663.10,110.90}},
  277. {"Julius Thruway North", {1938.80,2508.20,-89.00,2121.40,2624.20,110.90}},
  278. {"Julius Thruway North", {1534.50,2433.20,-89.00,1848.40,2583.20,110.90}},
  279. {"Julius Thruway North", {1848.40,2478.40,-89.00,1938.80,2553.40,110.90}},
  280. {"Julius Thruway North", {1704.50,2342.80,-89.00,1848.40,2433.20,110.90}},
  281. {"Julius Thruway North", {1377.30,2433.20,-89.00,1534.50,2507.20,110.90}},
  282. {"Julius Thruway South", {1457.30,823.20,-89.00,2377.30,863.20,110.90}},
  283. {"Julius Thruway South", {2377.30,788.80,-89.00,2537.30,897.90,110.90}},
  284. {"Julius Thruway West", {1197.30,1163.30,-89.00,1236.60,2243.20,110.90}},
  285. {"Julius Thruway West", {1236.60,2142.80,-89.00,1297.40,2243.20,110.90}},
  286. {"Juniper Hill", {-2533.00,578.30,-7.60,-2274.10,968.30,200.00}},
  287. {"Juniper Hollow", {-2533.00,968.30,-6.10,-2274.10,1358.90,200.00}},
  288. {"K.A.C.C. Military Fuels", {2498.20,2626.50,-89.00,2749.90,2861.50,110.90}},
  289. {"Kincaid Bridge", {-1339.80,599.20,-89.00,-1213.90,828.10,110.90}},
  290. {"Kincaid Bridge", {-1213.90,721.10,-89.00,-1087.90,950.00,110.90}},
  291. {"Kincaid Bridge", {-1087.90,855.30,-89.00,-961.90,986.20,110.90}},
  292. {"King's", {-2329.30,458.40,-7.60,-1993.20,578.30,200.00}},
  293. {"King's", {-2411.20,265.20,-9.10,-1993.20,373.50,200.00}},
  294. {"King's", {-2253.50,373.50,-9.10,-1993.20,458.40,200.00}},
  295. {"LVA Freight Depot", {1457.30,863.20,-89.00,1777.40,1143.20,110.90}},
  296. {"LVA Freight Depot", {1375.60,919.40,-89.00,1457.30,1203.20,110.90}},
  297. {"LVA Freight Depot", {1277.00,1087.60,-89.00,1375.60,1203.20,110.90}},
  298. {"LVA Freight Depot", {1315.30,1044.60,-89.00,1375.60,1087.60,110.90}},
  299. {"LVA Freight Depot", {1236.60,1163.40,-89.00,1277.00,1203.20,110.90}},
  300. {"Las Barrancas", {-926.10,1398.70,-3.00,-719.20,1634.60,200.00}},
  301. {"Las Brujas", {-365.10,2123.00,-3.00,-208.50,2217.60,200.00}},
  302. {"Las Colinas", {1994.30,-1100.80,-89.00,2056.80,-920.80,110.90}},
  303. {"Las Colinas", {2056.80,-1126.30,-89.00,2126.80,-920.80,110.90}},
  304. {"Las Colinas", {2185.30,-1154.50,-89.00,2281.40,-934.40,110.90}},
  305. {"Las Colinas", {2126.80,-1126.30,-89.00,2185.30,-934.40,110.90}},
  306. {"Las Colinas", {2747.70,-1120.00,-89.00,2959.30,-945.00,110.90}},
  307. {"Las Colinas", {2632.70,-1135.00,-89.00,2747.70,-945.00,110.90}},
  308. {"Las Colinas", {2281.40,-1135.00,-89.00,2632.70,-945.00,110.90}},
  309. {"Las Payasadas", {-354.30,2580.30,2.00,-133.60,2816.80,200.00}},
  310. {"Las Venturas Airport", {1236.60,1203.20,-89.00,1457.30,1883.10,110.90}},
  311. {"Las Venturas Airport", {1457.30,1203.20,-89.00,1777.30,1883.10,110.90}},
  312. {"Las Venturas Airport", {1457.30,1143.20,-89.00,1777.40,1203.20,110.90}},
  313. {"Las Venturas Airport", {1515.80,1586.40,-12.50,1729.90,1714.50,87.50}},
  314. {"Last Dime Motel", {1823.00,596.30,-89.00,1997.20,823.20,110.90}},
  315. {"Leafy Hollow", {-1166.90,-1856.00,0.00,-815.60,-1602.00,200.00}},
  316. {"Liberty City", {-1000.00,400.00,1300.00,-700.00,600.00,1400.00}},
  317. {"Lil' Probe Inn", {-90.20,1286.80,-3.00,153.80,1554.10,200.00}},
  318. {"Linden Side", {2749.90,943.20,-89.00,2923.30,1198.90,110.90}},
  319. {"Linden Station", {2749.90,1198.90,-89.00,2923.30,1548.90,110.90}},
  320. {"Linden Station", {2811.20,1229.50,-39.50,2861.20,1407.50,60.40}},
  321. {"Little Mexico", {1701.90,-1842.20,-89.00,1812.60,-1722.20,110.90}},
  322. {"Little Mexico", {1758.90,-1722.20,-89.00,1812.60,-1577.50,110.90}},
  323. {"Los Flores", {2581.70,-1454.30,-89.00,2632.80,-1393.40,110.90}},
  324. {"Los Flores", {2581.70,-1393.40,-89.00,2747.70,-1135.00,110.90}},
  325. {"Los Santos International", {1249.60,-2394.30,-89.00,1852.00,-2179.20,110.90}},
  326. {"Los Santos International", {1852.00,-2394.30,-89.00,2089.00,-2179.20,110.90}},
  327. {"Los Santos International", {1382.70,-2730.80,-89.00,2201.80,-2394.30,110.90}},
  328. {"Los Santos International", {1974.60,-2394.30,-39.00,2089.00,-2256.50,60.90}},
  329. {"Los Santos International", {1400.90,-2669.20,-39.00,2189.80,-2597.20,60.90}},
  330. {"Los Santos International", {2051.60,-2597.20,-39.00,2152.40,-2394.30,60.90}},
  331. {"Marina", {647.70,-1804.20,-89.00,851.40,-1577.50,110.90}},
  332. {"Marina", {647.70,-1577.50,-89.00,807.90,-1416.20,110.90}},
  333. {"Marina", {807.90,-1577.50,-89.00,926.90,-1416.20,110.90}},
  334. {"Market", {787.40,-1416.20,-89.00,1072.60,-1310.20,110.90}},
  335. {"Market", {952.60,-1310.20,-89.00,1072.60,-1130.80,110.90}},
  336. {"Market", {1072.60,-1416.20,-89.00,1370.80,-1130.80,110.90}},
  337. {"Market", {926.90,-1577.50,-89.00,1370.80,-1416.20,110.90}},
  338. {"Market Station", {787.40,-1410.90,-34.10,866.00,-1310.20,65.80}},
  339. {"Martin Bridge", {-222.10,293.30,0.00,-122.10,476.40,200.00}},
  340. {"Missionary Hill", {-2994.40,-811.20,0.00,-2178.60,-430.20,200.00}},
  341. {"Montgomery", {1119.50,119.50,-3.00,1451.40,493.30,200.00}},
  342. {"Montgomery", {1451.40,347.40,-6.10,1582.40,420.80,200.00}},
  343. {"Montgomery Intersection", {1546.60,208.10,0.00,1745.80,347.40,200.00}},
  344. {"Montgomery Intersection", {1582.40,347.40,0.00,1664.60,401.70,200.00}},
  345. {"Mulholland", {1414.00,-768.00,-89.00,1667.60,-452.40,110.90}},
  346. {"Mulholland", {1281.10,-452.40,-89.00,1641.10,-290.90,110.90}},
  347. {"Mulholland", {1269.10,-768.00,-89.00,1414.00,-452.40,110.90}},
  348. {"Mulholland", {1357.00,-926.90,-89.00,1463.90,-768.00,110.90}},
  349. {"Mulholland", {1318.10,-910.10,-89.00,1357.00,-768.00,110.90}},
  350. {"Mulholland", {1169.10,-910.10,-89.00,1318.10,-768.00,110.90}},
  351. {"Mulholland", {768.60,-954.60,-89.00,952.60,-860.60,110.90}},
  352. {"Mulholland", {687.80,-860.60,-89.00,911.80,-768.00,110.90}},
  353. {"Mulholland", {737.50,-768.00,-89.00,1142.20,-674.80,110.90}},
  354. {"Mulholland", {1096.40,-910.10,-89.00,1169.10,-768.00,110.90}},
  355. {"Mulholland", {952.60,-937.10,-89.00,1096.40,-860.60,110.90}},
  356. {"Mulholland", {911.80,-860.60,-89.00,1096.40,-768.00,110.90}},
  357. {"Mulholland", {861.00,-674.80,-89.00,1156.50,-600.80,110.90}},
  358. {"Mulholland Intersection", {1463.90,-1150.80,-89.00,1812.60,-768.00,110.90}},
  359. {"North Rock", {2285.30,-768.00,0.00,2770.50,-269.70,200.00}},
  360. {"Ocean Docks", {2373.70,-2697.00,-89.00,2809.20,-2330.40,110.90}},
  361. {"Ocean Docks", {2201.80,-2418.30,-89.00,2324.00,-2095.00,110.90}},
  362. {"Ocean Docks", {2324.00,-2302.30,-89.00,2703.50,-2145.10,110.90}},
  363. {"Ocean Docks", {2089.00,-2394.30,-89.00,2201.80,-2235.80,110.90}},
  364. {"Ocean Docks", {2201.80,-2730.80,-89.00,2324.00,-2418.30,110.90}},
  365. {"Ocean Docks", {2703.50,-2302.30,-89.00,2959.30,-2126.90,110.90}},
  366. {"Ocean Docks", {2324.00,-2145.10,-89.00,2703.50,-2059.20,110.90}},
  367. {"Ocean Flats", {-2994.40,277.40,-9.10,-2867.80,458.40,200.00}},
  368. {"Ocean Flats", {-2994.40,-222.50,-0.00,-2593.40,277.40,200.00}},
  369. {"Ocean Flats", {-2994.40,-430.20,-0.00,-2831.80,-222.50,200.00}},
  370. {"Octane Springs", {338.60,1228.50,0.00,664.30,1655.00,200.00}},
  371. {"Old Venturas Strip", {2162.30,2012.10,-89.00,2685.10,2202.70,110.90}},
  372. {"Palisades", {-2994.40,458.40,-6.10,-2741.00,1339.60,200.00}},
  373. {"Palomino Creek", {2160.20,-149.00,0.00,2576.90,228.30,200.00}},
  374. {"Paradiso", {-2741.00,793.40,-6.10,-2533.00,1268.40,200.00}},
  375. {"Pershing Square", {1440.90,-1722.20,-89.00,1583.50,-1577.50,110.90}},
  376. {"Pilgrim", {2437.30,1383.20,-89.00,2624.40,1783.20,110.90}},
  377. {"Pilgrim", {2624.40,1383.20,-89.00,2685.10,1783.20,110.90}},
  378. {"Pilson Intersection", {1098.30,2243.20,-89.00,1377.30,2507.20,110.90}},
  379. {"Pirates in Men's Pants", {1817.30,1469.20,-89.00,2027.40,1703.20,110.90}},
  380. {"Playa del Seville", {2703.50,-2126.90,-89.00,2959.30,-1852.80,110.90}},
  381. {"Prickle Pine", {1534.50,2583.20,-89.00,1848.40,2863.20,110.90}},
  382. {"Prickle Pine", {1117.40,2507.20,-89.00,1534.50,2723.20,110.90}},
  383. {"Prickle Pine", {1848.40,2553.40,-89.00,1938.80,2863.20,110.90}},
  384. {"Prickle Pine", {1938.80,2624.20,-89.00,2121.40,2861.50,110.90}},
  385. {"Queens", {-2533.00,458.40,0.00,-2329.30,578.30,200.00}},
  386. {"Queens", {-2593.40,54.70,0.00,-2411.20,458.40,200.00}},
  387. {"Queens", {-2411.20,373.50,0.00,-2253.50,458.40,200.00}},
  388. {"Randolph Industrial", {1558.00,596.30,-89.00,1823.00,823.20,110.90}},
  389. {"Redsands East", {1817.30,2011.80,-89.00,2106.70,2202.70,110.90}},
  390. {"Redsands East", {1817.30,2202.70,-89.00,2011.90,2342.80,110.90}},
  391. {"Redsands East", {1848.40,2342.80,-89.00,2011.90,2478.40,110.90}},
  392. {"Redsands West", {1236.60,1883.10,-89.00,1777.30,2142.80,110.90}},
  393. {"Redsands West", {1297.40,2142.80,-89.00,1777.30,2243.20,110.90}},
  394. {"Redsands West", {1377.30,2243.20,-89.00,1704.50,2433.20,110.90}},
  395. {"Redsands West", {1704.50,2243.20,-89.00,1777.30,2342.80,110.90}},
  396. {"Regular Tom", {-405.70,1712.80,-3.00,-276.70,1892.70,200.00}},
  397. {"Richman", {647.50,-1118.20,-89.00,787.40,-954.60,110.90}},
  398. {"Richman", {647.50,-954.60,-89.00,768.60,-860.60,110.90}},
  399. {"Richman", {225.10,-1369.60,-89.00,334.50,-1292.00,110.90}},
  400. {"Richman", {225.10,-1292.00,-89.00,466.20,-1235.00,110.90}},
  401. {"Richman", {72.60,-1404.90,-89.00,225.10,-1235.00,110.90}},
  402. {"Richman", {72.60,-1235.00,-89.00,321.30,-1008.10,110.90}},
  403. {"Richman", {321.30,-1235.00,-89.00,647.50,-1044.00,110.90}},
  404. {"Richman", {321.30,-1044.00,-89.00,647.50,-860.60,110.90}},
  405. {"Richman", {321.30,-860.60,-89.00,687.80,-768.00,110.90}},
  406. {"Richman", {321.30,-768.00,-89.00,700.70,-674.80,110.90}},
  407. {"Robada Intersection", {-1119.00,1178.90,-89.00,-862.00,1351.40,110.90}},
  408. {"Roca Escalante", {2237.40,2202.70,-89.00,2536.40,2542.50,110.90}},
  409. {"Roca Escalante", {2536.40,2202.70,-89.00,2625.10,2442.50,110.90}},
  410. {"Rockshore East", {2537.30,676.50,-89.00,2902.30,943.20,110.90}},
  411. {"Rockshore West", {1997.20,596.30,-89.00,2377.30,823.20,110.90}},
  412. {"Rockshore West", {2377.30,596.30,-89.00,2537.30,788.80,110.90}},
  413. {"Rodeo", {72.60,-1684.60,-89.00,225.10,-1544.10,110.90}},
  414. {"Rodeo", {72.60,-1544.10,-89.00,225.10,-1404.90,110.90}},
  415. {"Rodeo", {225.10,-1684.60,-89.00,312.80,-1501.90,110.90}},
  416. {"Rodeo", {225.10,-1501.90,-89.00,334.50,-1369.60,110.90}},
  417. {"Rodeo", {334.50,-1501.90,-89.00,422.60,-1406.00,110.90}},
  418. {"Rodeo", {312.80,-1684.60,-89.00,422.60,-1501.90,110.90}},
  419. {"Rodeo", {422.60,-1684.60,-89.00,558.00,-1570.20,110.90}},
  420. {"Rodeo", {558.00,-1684.60,-89.00,647.50,-1384.90,110.90}},
  421. {"Rodeo", {466.20,-1570.20,-89.00,558.00,-1385.00,110.90}},
  422. {"Rodeo", {422.60,-1570.20,-89.00,466.20,-1406.00,110.90}},
  423. {"Rodeo", {466.20,-1385.00,-89.00,647.50,-1235.00,110.90}},
  424. {"Rodeo", {334.50,-1406.00,-89.00,466.20,-1292.00,110.90}},
  425. {"Royal Casino", {2087.30,1383.20,-89.00,2437.30,1543.20,110.90}},
  426. {"San Andreas Sound", {2450.30,385.50,-100.00,2759.20,562.30,200.00}},
  427. {"Santa Flora", {-2741.00,458.40,-7.60,-2533.00,793.40,200.00}},
  428. {"Santa Maria Beach", {342.60,-2173.20,-89.00,647.70,-1684.60,110.90}},
  429. {"Santa Maria Beach", {72.60,-2173.20,-89.00,342.60,-1684.60,110.90}},
  430. {"Shady Cabin", {-1632.80,-2263.40,-3.00,-1601.30,-2231.70,200.00}},
  431. {"Shady Creeks", {-1820.60,-2643.60,-8.00,-1226.70,-1771.60,200.00}},
  432. {"Shady Creeks", {-2030.10,-2174.80,-6.10,-1820.60,-1771.60,200.00}},
  433. {"Sobell Rail Yards", {2749.90,1548.90,-89.00,2923.30,1937.20,110.90}},
  434. {"Spinybed", {2121.40,2663.10,-89.00,2498.20,2861.50,110.90}},
  435. {"Starfish Casino", {2437.30,1783.20,-89.00,2685.10,2012.10,110.90}},
  436. {"Starfish Casino", {2437.30,1858.10,-39.00,2495.00,1970.80,60.90}},
  437. {"Starfish Casino", {2162.30,1883.20,-89.00,2437.30,2012.10,110.90}},
  438. {"Temple", {1252.30,-1130.80,-89.00,1378.30,-1026.30,110.90}},
  439. {"Temple", {1252.30,-1026.30,-89.00,1391.00,-926.90,110.90}},
  440. {"Temple", {1252.30,-926.90,-89.00,1357.00,-910.10,110.90}},
  441. {"Temple", {952.60,-1130.80,-89.00,1096.40,-937.10,110.90}},
  442. {"Temple", {1096.40,-1130.80,-89.00,1252.30,-1026.30,110.90}},
  443. {"Temple", {1096.40,-1026.30,-89.00,1252.30,-910.10,110.90}},
  444. {"The Camel's Toe", {2087.30,1203.20,-89.00,2640.40,1383.20,110.90}},
  445. {"The Clown's Pocket", {2162.30,1783.20,-89.00,2437.30,1883.20,110.90}},
  446. {"The Emerald Isle", {2011.90,2202.70,-89.00,2237.40,2508.20,110.90}},
  447. {"The Farm", {-1209.60,-1317.10,114.90,-908.10,-787.30,251.90}},
  448. {"Four Dragons Casino", {1817.30,863.20,-89.00,2027.30,1083.20,110.90}},
  449. {"The High Roller", {1817.30,1283.20,-89.00,2027.30,1469.20,110.90}},
  450. {"The Mako Span", {1664.60,401.70,0.00,1785.10,567.20,200.00}},
  451. {"The Panopticon", {-947.90,-304.30,-1.10,-319.60,327.00,200.00}},
  452. {"The Pink Swan", {1817.30,1083.20,-89.00,2027.30,1283.20,110.90}},
  453. {"The Sherman Dam", {-968.70,1929.40,-3.00,-481.10,2155.20,200.00}},
  454. {"The Strip", {2027.40,863.20,-89.00,2087.30,1703.20,110.90}},
  455. {"The Strip", {2106.70,1863.20,-89.00,2162.30,2202.70,110.90}},
  456. {"The Strip", {2027.40,1783.20,-89.00,2162.30,1863.20,110.90}},
  457. {"The Strip", {2027.40,1703.20,-89.00,2137.40,1783.20,110.90}},
  458. {"The Visage", {1817.30,1863.20,-89.00,2106.70,2011.80,110.90}},
  459. {"The Visage", {1817.30,1703.20,-89.00,2027.40,1863.20,110.90}},
  460. {"Unity Station", {1692.60,-1971.80,-20.40,1812.60,-1932.80,79.50}},
  461. {"Valle Ocultado", {-936.60,2611.40,2.00,-715.90,2847.90,200.00}},
  462. {"Verdant Bluffs", {930.20,-2488.40,-89.00,1249.60,-2006.70,110.90}},
  463. {"Verdant Bluffs", {1073.20,-2006.70,-89.00,1249.60,-1842.20,110.90}},
  464. {"Verdant Bluffs", {1249.60,-2179.20,-89.00,1692.60,-1842.20,110.90}},
  465. {"Verdant Meadows", {37.00,2337.10,-3.00,435.90,2677.90,200.00}},
  466. {"Verona Beach", {647.70,-2173.20,-89.00,930.20,-1804.20,110.90}},
  467. {"Verona Beach", {930.20,-2006.70,-89.00,1073.20,-1804.20,110.90}},
  468. {"Verona Beach", {851.40,-1804.20,-89.00,1046.10,-1577.50,110.90}},
  469. {"Verona Beach", {1161.50,-1722.20,-89.00,1323.90,-1577.50,110.90}},
  470. {"Verona Beach", {1046.10,-1722.20,-89.00,1161.50,-1577.50,110.90}},
  471. {"Vinewood", {787.40,-1310.20,-89.00,952.60,-1130.80,110.90}},
  472. {"Vinewood", {787.40,-1130.80,-89.00,952.60,-954.60,110.90}},
  473. {"Vinewood", {647.50,-1227.20,-89.00,787.40,-1118.20,110.90}},
  474. {"Vinewood", {647.70,-1416.20,-89.00,787.40,-1227.20,110.90}},
  475. {"Whitewood Estates", {883.30,1726.20,-89.00,1098.30,2507.20,110.90}},
  476. {"Whitewood Estates", {1098.30,1726.20,-89.00,1197.30,2243.20,110.90}},
  477. {"Willowfield", {1970.60,-2179.20,-89.00,2089.00,-1852.80,110.90}},
  478. {"Willowfield", {2089.00,-2235.80,-89.00,2201.80,-1989.90,110.90}},
  479. {"Willowfield", {2089.00,-1989.90,-89.00,2324.00,-1852.80,110.90}},
  480. {"Willowfield", {2201.80,-2095.00,-89.00,2324.00,-1989.90,110.90}},
  481. {"Willowfield", {2541.70,-1941.40,-89.00,2703.50,-1852.80,110.90}},
  482. {"Willowfield", {2324.00,-2059.20,-89.00,2541.70,-1852.80,110.90}},
  483. {"Willowfield", {2541.70,-2059.20,-89.00,2703.50,-1941.40,110.90}},
  484. {"Yellow Bell Station", {1377.40,2600.40,-21.90,1492.40,2687.30,78.00}},
  485. // Citys Zones
  486. {"Los Santos", {44.60,-2892.90,-242.90,2997.00,-768.00,900.00}},
  487. {"Las Venturas", {869.40,596.30,-242.90,2997.00,2993.80,900.00}},
  488. {"Bone County", {-480.50,596.30,-242.90,869.40,2993.80,900.00}},
  489. {"Tierra Robada", {-2997.40,1659.60,-242.90,-480.50,2993.80,900.00}},
  490. {"Tierra Robada", {-1213.90,596.30,-242.90,-480.50,1659.60,900.00}},
  491. {"San Fierro", {-2997.40,-1115.50,-242.90,-1213.90,1659.60,900.00}},
  492. {"Red County", {-1213.90,-768.00,-242.90,2997.00,596.30,900.00}},
  493. {"Flint County", {-1213.90,-2892.90,-242.90,44.60,-768.00,900.00}},
  494. {"Whetstone", {-2997.40,-2892.90,-242.90,-1213.90,-1115.50,900.00}}
  495. };
  496.  
  497. forward MainTimer();
  498. forward Speedometer();
  499. forward SaveTimer();
  500. forward StopAlarm(vehicleid);
  501.  
  502. stock PlayerName(playerid)
  503. {
  504. new pName[MAX_PLAYER_NAME];
  505. GetPlayerName(playerid, pName, MAX_PLAYER_NAME);
  506. return pName;
  507. }
  508.  
  509. stock IsPlayerSpawned(playerid)
  510. {
  511. switch(GetPlayerState(playerid))
  512. {
  513. case 1,2,3: return 1;
  514. }
  515. return 0;
  516. }
  517.  
  518. stock IsMeleeWeapon(weaponid)
  519. {
  520. switch(weaponid)
  521. {
  522. case 2 .. 15, 41 .. 42: return 1;
  523. }
  524. return 0;
  525. }
  526.  
  527. stock RemovePlayerWeapon(playerid, weaponid)
  528. {
  529. new WeaponData[12][2];
  530. for(new i=1; i < sizeof(WeaponData); i++)
  531. {
  532. GetPlayerWeaponData(playerid, i, WeaponData[i][0], WeaponData[i][1]);
  533. }
  534. ResetPlayerWeapons(playerid);
  535. for(new i=1; i < sizeof(WeaponData); i++)
  536. {
  537. if(WeaponData[i][0] != weaponid)
  538. {
  539. GivePlayerWeapon(playerid, WeaponData[i][0], WeaponData[i][1]);
  540. }
  541. }
  542. }
  543.  
  544. stock IsBicycle(vehicleid)
  545. {
  546. switch(GetVehicleModel(vehicleid))
  547. {
  548. case 481,509,510: return 1;
  549. }
  550. return 0;
  551. }
  552.  
  553. stock PlayerToPlayer(playerid, targetid, Float:dist)
  554. {
  555. new Float:pos[3];
  556. GetPlayerPos(targetid, pos[0], pos[1], pos[2]);
  557. return IsPlayerInRangeOfPoint(playerid, dist, pos[0], pos[1], pos[2]);
  558. }
  559.  
  560. stock PlayerToVehicle(playerid, vehicleid, Float:dist)
  561. {
  562. new Float:pos[3];
  563. GetVehiclePos(vehicleid, pos[0], pos[1], pos[2]);
  564. return IsPlayerInRangeOfPoint(playerid, dist, pos[0], pos[1], pos[2]);
  565. }
  566.  
  567. stock GetClosestVehicle(playerid)
  568. {
  569. new Float:x, Float:y, Float:z;
  570. new Float:dist, Float:closedist=9999, closeveh;
  571. for(new i=1; i < MAX_VEHICLES; i++)
  572. {
  573. if(GetVehiclePos(i, x, y, z))
  574. {
  575. dist = IsPlayerInRangeOfPoint(playerid, x, y, z);
  576. if(dist < closedist)
  577. {
  578. closedist = dist;
  579. closeveh = i;
  580. }
  581. }
  582. }
  583. return closeveh;
  584. }
  585.  
  586. stock ToggleEngine(vehicleid, toggle)
  587. {
  588. new engine, lights, alarm, doors, bonnet, boot, objective;
  589. GetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
  590. SetVehicleParamsEx(vehicleid, toggle, lights, alarm, doors, bonnet, boot, objective);
  591. }
  592.  
  593. stock ToggleAlarm(vehicleid, toggle)
  594. {
  595. new engine, lights, alarm, doors, bonnet, boot, objective;
  596. GetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
  597. SetVehicleParamsEx(vehicleid, engine, lights, toggle, doors, bonnet, boot, objective);
  598. }
  599.  
  600. stock StripNL(str[]) // credits to Y_Less for y_utils.inc
  601. {
  602. new
  603. i = strlen(str);
  604. while (i-- && str[i] <= ' ') str[i] = '\0';
  605. }
  606.  
  607. stock IsNumeric(const string[])
  608. {
  609. for(new i=0; string[i]; i++)
  610. {
  611. if(string[i] < '0' || string[i] > '9') return 0;
  612. }
  613. return 1;
  614. }
  615.  
  616. stock GetVehicleModelIDFromName(const vname[])
  617. {
  618. for(new i=0; i < sizeof(VehicleNames); i++)
  619. {
  620. if(strfind(VehicleNames[i], vname, true) != -1) return i + 400;
  621. }
  622. return -1;
  623. }
  624.  
  625. stock GetPlayer2DZone(playerid)
  626. {
  627. new zone[32] = "San Andreas";
  628. new Float:x, Float:y, Float:z;
  629. GetPlayerPos(playerid, x, y, z);
  630. for(new i = 0; i < sizeof(SanAndreasZones); i++)
  631. {
  632. if(x >= SanAndreasZones[i][Zone_Area][0] && x <= SanAndreasZones[i][Zone_Area][3]
  633. && y >= SanAndreasZones[i][Zone_Area][1] && y <= SanAndreasZones[i][Zone_Area][4])
  634. {
  635. strmid(zone, SanAndreasZones[i][Zone_Name], 0, 28);
  636. return zone;
  637. }
  638. }
  639. return zone;
  640. }
  641.  
  642. stock GetPlayer3DZone(playerid)
  643. {
  644. new zone[32] = "San Andreas";
  645. new Float:x, Float:y, Float:z;
  646. GetPlayerPos(playerid, x, y, z);
  647. for(new i = 0; i < sizeof(SanAndreasZones); i++)
  648. {
  649. if(x >= SanAndreasZones[i][Zone_Area][0] && x <= SanAndreasZones[i][Zone_Area][3]
  650. && y >= SanAndreasZones[i][Zone_Area][1] && y <= SanAndreasZones[i][Zone_Area][4]
  651. && z >= SanAndreasZones[i][Zone_Area][2] && z <= SanAndreasZones[i][Zone_Area][5])
  652. {
  653. strmid(zone, SanAndreasZones[i][Zone_Name], 0, 28);
  654. return zone;
  655. }
  656. }
  657. return zone;
  658. }
  659.  
  660. stock GetPlayerSpeed(playerid, bool:kmh = true)
  661. {
  662. new
  663. Float:xx,
  664. Float:yy,
  665. Float:zz,
  666. Float:pSpeed;
  667.  
  668. if(IsPlayerInAnyVehicle(playerid))
  669. {
  670. GetVehicleVelocity(GetPlayerVehicleID(playerid),xx,yy,zz);
  671. }
  672. else
  673. {
  674. GetPlayerVelocity(playerid,xx,yy,zz);
  675. }
  676.  
  677. pSpeed = floatsqroot((xx * xx) + (yy * yy) + (zz * zz));
  678. return kmh ? floatround((pSpeed * 165.12)) : floatround((pSpeed * 103.9));
  679. }
  680.  
  681. IsAdmin(playerid, level)
  682. {
  683. if(IsPlayerAdmin(playerid)) return 1;
  684. if(CallRemoteFunction("GetPlayerAVSAdmin", "d", playerid) >= level) return 1;
  685. return 0;
  686. }
  687.  
  688. LoadVehicles()
  689. {
  690. new File:handle, count;
  691. new filename[64], line[256];
  692. for(new i=1; i < MAX_DVEHICLES; i++)
  693. {
  694. format(filename, sizeof(filename), VEHICLE_FILE_PATH "v%d.ini", i);
  695. if(!fexist(filename)) continue;
  696. handle = fopen(filename, io_read);
  697. while(fread(handle, line))
  698. {
  699. StripNL(line);
  700. if(!line[0]) continue;
  701. if(strcmp(line, "Created=", false, 8) == 0) VehicleCreated[i] = strval(line[8]);
  702. else if(strcmp(line, "Model=", false, 6) == 0) VehicleModel[i] = strval(line[6]);
  703. else if(strcmp(line, "Pos=", false, 4) == 0) sscanf(line[4], "p,ffff", VehiclePos[i][0], VehiclePos[i][1],
  704. VehiclePos[i][2], VehiclePos[i][3]);
  705. else if(strcmp(line, "Colors=", false, 7) == 0) sscanf(line[7], "p,dd", VehicleColor[i][0], VehicleColor[i][1]);
  706. else if(strcmp(line, "Interior=", false, 9) == 0) VehicleInterior[i] = strval(line[9]);
  707. else if(strcmp(line, "VirtualWorld=", false, 13) == 0) VehicleWorld[i] = strval(line[13]);
  708. else if(strcmp(line, "Owner=", false, 6) == 0) strmid(VehicleOwner[i], line, 6, sizeof(line));
  709. else if(strcmp(line, "NumberPlate=", false, 12) == 0) strmid(VehicleNumberPlate[i], line, 12, sizeof(line));
  710. else if(strcmp(line, "Value=", false, 6) == 0) VehicleValue[i] = strval(line[6]);
  711. else if(strcmp(line, "Trunk1=", false, 7) == 0) sscanf(line[7], "p,dd", VehicleTrunk[i][0][0], VehicleTrunk[i][0][1]);
  712. else if(strcmp(line, "Trunk2=", false, 7) == 0) sscanf(line[7], "p,dd", VehicleTrunk[i][1][0], VehicleTrunk[i][1][1]);
  713. else if(strcmp(line, "Trunk3=", false, 7) == 0) sscanf(line[7], "p,dd", VehicleTrunk[i][2][0], VehicleTrunk[i][2][1]);
  714. else if(strcmp(line, "Trunk4=", false, 7) == 0) sscanf(line[7], "p,dd", VehicleTrunk[i][3][0], VehicleTrunk[i][3][1]);
  715. else if(strcmp(line, "Trunk5=", false, 7) == 0) sscanf(line[7], "p,dd", VehicleTrunk[i][4][0], VehicleTrunk[i][4][1]);
  716. else if(strcmp(line, "Mod0=", false, 5) == 0) VehicleMods[i][0] = strval(line[5]);
  717. else if(strcmp(line, "Mod1=", false, 5) == 0) VehicleMods[i][1] = strval(line[5]);
  718. else if(strcmp(line, "Mod2=", false, 5) == 0) VehicleMods[i][2] = strval(line[5]);
  719. else if(strcmp(line, "Mod3=", false, 5) == 0) VehicleMods[i][3] = strval(line[5]);
  720. else if(strcmp(line, "Mod4=", false, 5) == 0) VehicleMods[i][4] = strval(line[5]);
  721. else if(strcmp(line, "Mod5=", false, 5) == 0) VehicleMods[i][5] = strval(line[5]);
  722. else if(strcmp(line, "Mod6=", false, 5) == 0) VehicleMods[i][6] = strval(line[5]);
  723. else if(strcmp(line, "Mod7=", false, 5) == 0) VehicleMods[i][7] = strval(line[5]);
  724. else if(strcmp(line, "Mod8=", false, 5) == 0) VehicleMods[i][8] = strval(line[5]);
  725. else if(strcmp(line, "Mod9=", false, 5) == 0) VehicleMods[i][9] = strval(line[5]);
  726. else if(strcmp(line, "Mod10=", false, 6) == 0) VehicleMods[i][10] = strval(line[6]);
  727. else if(strcmp(line, "Mod11=", false, 6) == 0) VehicleMods[i][11] = strval(line[6]);
  728. else if(strcmp(line, "Mod12=", false, 6) == 0) VehicleMods[i][12] = strval(line[6]);
  729. else if(strcmp(line, "Mod13=", false, 6) == 0) VehicleMods[i][13] = strval(line[6]);
  730. else if(strcmp(line, "Paintjob=", false, 9) == 0) VehiclePaintjob[i] = strval(line[9]);
  731. }
  732. fclose(handle);
  733. if(VehicleCreated[i]) count++;
  734. }
  735. printf(" Loaded %d vehicles", count);
  736. }
  737.  
  738. SaveVehicle(vehicleid)
  739. {
  740. new filename[64], line[256];
  741. format(filename, sizeof(filename), VEHICLE_FILE_PATH "v%d.ini", vehicleid);
  742. new File:handle = fopen(filename, io_write);
  743. format(line, sizeof(line), "Created=%d\r\n", VehicleCreated[vehicleid]); fwrite(handle, line);
  744. format(line, sizeof(line), "Model=%d\r\n", VehicleModel[vehicleid]); fwrite(handle, line);
  745. format(line, sizeof(line), "Pos=%.3f,%.3f,%.3f,%.3f\r\n", VehiclePos[vehicleid][0], VehiclePos[vehicleid][1],
  746. VehiclePos[vehicleid][2], VehiclePos[vehicleid][3]);
  747. fwrite(handle, line);
  748. format(line, sizeof(line), "Colors=%d,%d\r\n", VehicleColor[vehicleid][0], VehicleColor[vehicleid][1]); fwrite(handle, line);
  749. format(line, sizeof(line), "Interior=%d\r\n", VehicleInterior[vehicleid]); fwrite(handle, line);
  750. format(line, sizeof(line), "VirtualWorld=%d\r\n", VehicleWorld[vehicleid]); fwrite(handle, line);
  751. format(line, sizeof(line), "Owner=%s\r\n", VehicleOwner[vehicleid]); fwrite(handle, line);
  752. format(line, sizeof(line), "NumberPlate=%s\r\n", VehicleNumberPlate[vehicleid]); fwrite(handle, line);
  753. format(line, sizeof(line), "Value=%d\r\n", VehicleValue[vehicleid]); fwrite(handle, line);
  754. format(line, sizeof(line), "Trunk1=%d,%d\r\n", VehicleTrunk[vehicleid][0][0], VehicleTrunk[vehicleid][0][1]); fwrite(handle, line);
  755. format(line, sizeof(line), "Trunk2=%d,%d\r\n", VehicleTrunk[vehicleid][1][0], VehicleTrunk[vehicleid][1][1]); fwrite(handle, line);
  756. format(line, sizeof(line), "Trunk3=%d,%d\r\n", VehicleTrunk[vehicleid][2][0], VehicleTrunk[vehicleid][2][1]); fwrite(handle, line);
  757. format(line, sizeof(line), "Trunk4=%d,%d\r\n", VehicleTrunk[vehicleid][3][0], VehicleTrunk[vehicleid][3][1]); fwrite(handle, line);
  758. format(line, sizeof(line), "Trunk5=%d,%d\r\n", VehicleTrunk[vehicleid][4][0], VehicleTrunk[vehicleid][4][1]); fwrite(handle, line);
  759. format(line, sizeof(line), "Mod0=%d\r\n", VehicleMods[vehicleid][0]); fwrite(handle, line);
  760. format(line, sizeof(line), "Mod1=%d\r\n", VehicleMods[vehicleid][1]); fwrite(handle, line);
  761. format(line, sizeof(line), "Mod2=%d\r\n", VehicleMods[vehicleid][2]); fwrite(handle, line);
  762. format(line, sizeof(line), "Mod3=%d\r\n", VehicleMods[vehicleid][3]); fwrite(handle, line);
  763. format(line, sizeof(line), "Mod4=%d\r\n", VehicleMods[vehicleid][4]); fwrite(handle, line);
  764. format(line, sizeof(line), "Mod5=%d\r\n", VehicleMods[vehicleid][5]); fwrite(handle, line);
  765. format(line, sizeof(line), "Mod6=%d\r\n", VehicleMods[vehicleid][6]); fwrite(handle, line);
  766. format(line, sizeof(line), "Mod7=%d\r\n", VehicleMods[vehicleid][7]); fwrite(handle, line);
  767. format(line, sizeof(line), "Mod8=%d\r\n", VehicleMods[vehicleid][8]); fwrite(handle, line);
  768. format(line, sizeof(line), "Mod9=%d\r\n", VehicleMods[vehicleid][9]); fwrite(handle, line);
  769. format(line, sizeof(line), "Mod10=%d\r\n", VehicleMods[vehicleid][10]); fwrite(handle, line);
  770. format(line, sizeof(line), "Mod11=%d\r\n", VehicleMods[vehicleid][11]); fwrite(handle, line);
  771. format(line, sizeof(line), "Mod12=%d\r\n", VehicleMods[vehicleid][12]); fwrite(handle, line);
  772. format(line, sizeof(line), "Mod13=%d\r\n", VehicleMods[vehicleid][13]); fwrite(handle, line);
  773. format(line, sizeof(line), "Paintjob=%d\r\n", VehiclePaintjob[vehicleid]); fwrite(handle, line);
  774. fclose(handle);
  775. }
  776.  
  777. UpdateVehicle(vehicleid, removeold)
  778. {
  779. if(VehicleCreated[vehicleid])
  780. {
  781. if(removeold)
  782. {
  783. new Float:health;
  784. GetVehicleHealth(VehicleID[vehicleid], health);
  785. new engine, lights, alarm, doors, bonnet, boot, objective;
  786. GetVehicleParamsEx(VehicleID[vehicleid], engine, lights, alarm, doors, bonnet, boot, objective);
  787. //new panels, doorsd, lightsd, tires;
  788. //GetVehicleDamageStatus(VehicleID[vehicleid], panels, doorsd, lightsd, tires);
  789. DestroyVehicle(VehicleID[vehicleid]);
  790. VehicleID[vehicleid] = CreateVehicle(VehicleModel[vehicleid], VehiclePos[vehicleid][0], VehiclePos[vehicleid][1],
  791. VehiclePos[vehicleid][2], VehiclePos[vehicleid][3], VehicleColor[vehicleid][0], VehicleColor[vehicleid][1], 3600);
  792. SetVehicleHealth(VehicleID[vehicleid], health);
  793. SetVehicleParamsEx(VehicleID[vehicleid], engine, lights, alarm, doors, bonnet, boot, objective);
  794. //UpdateVehicleDamageStatus(VehicleID[vehicleid], panels, doorsd, lightsd, tires);
  795. }
  796. else
  797. {
  798. VehicleID[vehicleid] = CreateVehicle(VehicleModel[vehicleid], VehiclePos[vehicleid][0], VehiclePos[vehicleid][1],
  799. VehiclePos[vehicleid][2], VehiclePos[vehicleid][3], VehicleColor[vehicleid][0], VehicleColor[vehicleid][1], 3600);
  800. }
  801. LinkVehicleToInterior(VehicleID[vehicleid], VehicleInterior[vehicleid]);
  802. SetVehicleVirtualWorld(VehicleID[vehicleid], VehicleWorld[vehicleid]);
  803. SetVehicleNumberPlate(VehicleID[vehicleid], VehicleNumberPlate[vehicleid]);
  804. for(new i=0; i < sizeof(VehicleMods[]); i++)
  805. {
  806. AddVehicleComponent(VehicleID[vehicleid], VehicleMods[vehicleid][i]);
  807. }
  808. ChangeVehiclePaintjob(VehicleID[vehicleid], VehiclePaintjob[vehicleid]);
  809. UpdateVehicleLabel(vehicleid, removeold);
  810. }
  811. }
  812.  
  813. UpdateVehicleLabel(vehicleid, removeold)
  814. {
  815. if(VehicleCreated[vehicleid] == VEHICLE_DEALERSHIP)
  816. {
  817. if(removeold)
  818. {
  819. Delete3DTextLabel(VehicleLabel[vehicleid]);
  820. }
  821. new labeltext[128];
  822. format(labeltext, sizeof(labeltext), "%s\nID: %d\nDealership: %s\nPrice: $%d", VehicleNames[VehicleModel[vehicleid]-400],
  823. vehicleid, VehicleOwner[vehicleid], VehicleValue[vehicleid]);
  824. VehicleLabel[vehicleid] = Create3DTextLabel(labeltext, 0xBB7700DD, 0, 0, 0, 10.0, 0);
  825. Attach3DTextLabelToVehicle(VehicleLabel[vehicleid], VehicleID[vehicleid], 0, 0, 0);
  826. }
  827. }
  828.  
  829. IsValidVehicle(vehicleid)
  830. {
  831. if(vehicleid < 1 || vehicleid >= MAX_DVEHICLES) return 0;
  832. if(VehicleCreated[vehicleid]) return 1;
  833. return 0;
  834. }
  835.  
  836. GetVehicleID(vehicleid)
  837. {
  838. for(new i=1; i < MAX_DVEHICLES; i++)
  839. {
  840. if(VehicleCreated[i] && VehicleID[i] == vehicleid) return i;
  841. }
  842. return 0;
  843. }
  844.  
  845. GetPlayerVehicles(playerid)
  846. {
  847. new count;
  848. for(new i=1; i < MAX_DVEHICLES; i++)
  849. {
  850. if(VehicleCreated[i] == VEHICLE_PLAYER && strcmp(VehicleOwner[i], PlayerName(playerid)) == 0)
  851. {
  852. count++;
  853. }
  854. }
  855. return count;
  856. }
  857.  
  858. GetPlayerVehicleAccess(playerid, vehicleid)
  859. {
  860. if(IsValidVehicle(vehicleid))
  861. {
  862. if(VehicleCreated[vehicleid] == VEHICLE_DEALERSHIP)
  863. {
  864. if(IsAdmin(playerid, 1))
  865. {
  866. return 3;
  867. }
  868. }
  869. else if(VehicleCreated[vehicleid] == VEHICLE_PLAYER)
  870. {
  871. if(strcmp(VehicleOwner[vehicleid], PlayerName(playerid)) == 0)
  872. {
  873. return 1;
  874. }
  875. else if(GetPVarInt(playerid, "CarKeys") == vehicleid)
  876. {
  877. return 2;
  878. }
  879. }
  880. }
  881. else
  882. {
  883. return 2;
  884. }
  885. return 0;
  886. }
  887.  
  888. LoadDealerships()
  889. {
  890. new File:handle, count;
  891. new filename[64], line[256];
  892. for(new i=1; i < MAX_DEALERSHIPS; i++)
  893. {
  894. format(filename, sizeof(filename), DEALERSHIP_FILE_PATH "d%d.ini", i);
  895. if(!fexist(filename)) continue;
  896. handle = fopen(filename, io_read);
  897. while(fread(handle, line))
  898. {
  899. StripNL(line);
  900. if(!line[0]) continue;
  901. if(strcmp(line, "Created=", false, 8) == 0) DealershipCreated[i] = strval(line[8]);
  902. else if(strcmp(line, "Pos=", false, 4) == 0) sscanf(line[4], "p,fff", DealershipPos[i][0],
  903. DealershipPos[i][1], DealershipPos[i][2]);
  904. }
  905. fclose(handle);
  906. if(DealershipCreated[i]) count++;
  907. }
  908. printf(" Loaded %d dealerships", count);
  909. }
  910.  
  911. SaveDealership(dealerid)
  912. {
  913. new filename[64], line[256];
  914. format(filename, sizeof(filename), DEALERSHIP_FILE_PATH "d%d.ini", dealerid);
  915. new File:handle = fopen(filename, io_write);
  916. format(line, sizeof(line), "Created=%d\r\n", DealershipCreated[dealerid]); fwrite(handle, line);
  917. format(line, sizeof(line), "Pos=%.3f,%.3f,%.3f\r\n", DealershipPos[dealerid][0],
  918. DealershipPos[dealerid][1], DealershipPos[dealerid][2]);
  919. fwrite(handle, line);
  920. fclose(handle);
  921. }
  922.  
  923. UpdateDealership(dealerid, removeold)
  924. {
  925. if(DealershipCreated[dealerid])
  926. {
  927. if(removeold)
  928. {
  929. Delete3DTextLabel(DealershipLabel[dealerid]);
  930. }
  931. new labeltext[32];
  932. format(labeltext, sizeof(labeltext), "Vehicle Dealership\nID: %d", dealerid);
  933. DealershipLabel[dealerid] = Create3DTextLabel(labeltext, 0x00BB00DD, DealershipPos[dealerid][0],
  934. DealershipPos[dealerid][1], DealershipPos[dealerid][2]+0.5, 20.0, 0);
  935. }
  936. }
  937.  
  938. IsValidDealership(dealerid)
  939. {
  940. if(dealerid < 1 || dealerid >= MAX_DEALERSHIPS) return 0;
  941. if(DealershipCreated[dealerid]) return 1;
  942. return 0;
  943. }
  944.  
  945. LoadFuelStations()
  946. {
  947. new File:handle, count;
  948. new filename[64], line[256];
  949. for(new i=1; i < MAX_FUEL_STATIONS; i++)
  950. {
  951. format(filename, sizeof(filename), FUEL_STATION_FILE_PATH "f%d.ini", i);
  952. if(!fexist(filename)) continue;
  953. handle = fopen(filename, io_read);
  954. while(fread(handle, line))
  955. {
  956. StripNL(line);
  957. if(!line[0]) continue;
  958. if(strcmp(line, "Created=", false, 8) == 0) FuelStationCreated[i] = strval(line[8]);
  959. else if(strcmp(line, "Pos=", false, 4) == 0) sscanf(line[4], "p,fff", FuelStationPos[i][0],
  960. FuelStationPos[i][1], FuelStationPos[i][2]);
  961. }
  962. fclose(handle);
  963. if(FuelStationCreated[i]) count++;
  964. }
  965. printf(" Loaded %d fuel stations", count);
  966. }
  967.  
  968. SaveFuelStation(stationid)
  969. {
  970. new filename[64], line[256];
  971. format(filename, sizeof(filename), FUEL_STATION_FILE_PATH "f%d.ini", stationid);
  972. new File:handle = fopen(filename, io_write);
  973. format(line, sizeof(line), "Created=%d\r\n", FuelStationCreated[stationid]); fwrite(handle, line);
  974. format(line, sizeof(line), "Pos=%.3f,%.3f,%.3f\r\n", FuelStationPos[stationid][0],
  975. FuelStationPos[stationid][1], FuelStationPos[stationid][2]);
  976. fwrite(handle, line);
  977. fclose(handle);
  978. }
  979.  
  980. UpdateFuelStation(stationid, removeold)
  981. {
  982. if(FuelStationCreated[stationid])
  983. {
  984. if(removeold)
  985. {
  986. Delete3DTextLabel(FuelStationLabel[stationid]);
  987. }
  988. new labeltext[32];
  989. format(labeltext, sizeof(labeltext), "Fuel Station\nID: %d\n/fuel", stationid);
  990. FuelStationLabel[stationid] = Create3DTextLabel(labeltext, 0x00BBFFDD, FuelStationPos[stationid][0],
  991. FuelStationPos[stationid][1], FuelStationPos[stationid][2]+0.5, 20.0, 0);
  992. }
  993. }
  994.  
  995. IsValidFuelStation(stationid)
  996. {
  997. if(stationid < 1 || stationid >= MAX_FUEL_STATIONS) return 0;
  998. if(FuelStationCreated[stationid]) return 1;
  999. return 0;
  1000. }
  1001.  
  1002. public MainTimer()
  1003. {
  1004. new string[128];
  1005. new Float:x, Float:y, Float:z;
  1006.  
  1007. for(new i=0; i < MAX_PLAYERS; i++)
  1008. {
  1009. if(IsPlayerConnected(i))
  1010. {
  1011. if(GetPlayerState(i) == PLAYER_STATE_DRIVER)
  1012. {
  1013. new vehicleid = GetPlayerVehicleID(i);
  1014. if(!IsBicycle(vehicleid) && Fuel[vehicleid] > 0)
  1015. {
  1016. Fuel[vehicleid] -= GetPlayerSpeed(i)/1000.0;
  1017. if(Fuel[vehicleid] <= 0)
  1018. {
  1019. ToggleEngine(vehicleid, VEHICLE_PARAMS_OFF);
  1020. GameTextForPlayer(i, "~r~out of fuel", 3000, 3);
  1021. SendClientMessage(i, COLOR_RED, "This vehicle is out of fuel!");
  1022. }
  1023. }
  1024. }
  1025. if(RefuelTime[i] > 0 && GetPVarInt(i, "FuelStation"))
  1026. {
  1027. new vehicleid = GetPlayerVehicleID(i);
  1028. Fuel[vehicleid] += 2.0;
  1029. RefuelTime[i]--;
  1030. if(RefuelTime[i] == 0)
  1031. {
  1032. if(Fuel[vehicleid] >= 100.0) Fuel[vehicleid] = 100.0;
  1033. new stationid = GetPVarInt(i, "FuelStation");
  1034. new cost = floatround(Fuel[vehicleid]-GetPVarFloat(i, "Fuel"))*FUEL_PRICE;
  1035. if(GetPlayerState(i) != PLAYER_STATE_DRIVER || Fuel[vehicleid] >= 100.0 || GetPlayerMoney(i) < cost
  1036. || !IsPlayerInRangeOfPoint(i, 10.0, FuelStationPos[stationid][0], FuelStationPos[stationid][1], FuelStationPos[stationid][2]))
  1037. {
  1038. if(GetPlayerMoney(i) < cost) cost = GetPlayerMoney(i);
  1039. GivePlayerMoney(i, -cost);
  1040. format(string, sizeof(string), "~r~-$%d", cost);
  1041. GameTextForPlayer(i, string, 2000, 3);
  1042. format(string, sizeof(string), "You pay $%d for fuel", cost);
  1043. SendClientMessage(i, COLOR_WHITE, string);
  1044. SetPVarInt(i, "FuelStation", 0);
  1045. SetPVarFloat(i, "Fuel", 0.0);
  1046. }
  1047. else
  1048. {
  1049. RefuelTime[i] = 5;
  1050. format(string, sizeof(string), "~w~refueling...~n~~r~-$%d", cost);
  1051. GameTextForPlayer(i, string, 2000, 3);
  1052. }
  1053. }
  1054. }
  1055. if(TrackCar[i])
  1056. {
  1057. GetVehiclePos(TrackCar[i], x, y, z);
  1058. SetPlayerCheckpoint(i, x, y, z, 3);
  1059. }
  1060. }
  1061. }
  1062. }
  1063.  
  1064. public Speedometer()
  1065. {
  1066. new vehicleid, Float:health;
  1067. new engine, lights, alarm, doors, bonnet, boot, objective;
  1068. new fstring[32], string[512];
  1069.  
  1070. for(new i=0; i < MAX_PLAYERS; i++)
  1071. {
  1072. if(IsPlayerConnected(i) && IsPlayerInAnyVehicle(i))
  1073. {
  1074. vehicleid = GetPlayerVehicleID(i);
  1075. GetVehicleHealth(vehicleid, health);
  1076. GetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
  1077.  
  1078. string = "~b~~h~vehicle: ~w~";
  1079. strcat(string, VehicleNames[GetVehicleModel(vehicleid)-400], sizeof(string));
  1080.  
  1081. strcat(string, "~n~~b~~h~gps: ~w~", sizeof(string));
  1082. strcat(string, GetPlayer3DZone(i), sizeof(string));
  1083.  
  1084. strcat(string, "~n~~b~~h~health: ~g~", sizeof(string));
  1085. fstring = "iiiiiiiiii";
  1086. if(health > 1000.0) strins(fstring, "~r~", 10, sizeof(fstring));
  1087. else if(health < 0.0) strins(fstring, "~r~", 0, sizeof(fstring));
  1088. else strins(fstring, "~r~", floatround(health/100.0), sizeof(fstring));
  1089. strcat(string, fstring, sizeof(string));
  1090.  
  1091. strcat(string, " ~b~~h~fuel: ~g~", sizeof(string));
  1092. fstring = "iiiiiiiiii";
  1093. if(Fuel[vehicleid] > 100.0) strins(fstring, "~r~", 10, sizeof(fstring));
  1094. else if(Fuel[vehicleid] < 0.0) strins(fstring, "~r~", 0, sizeof(fstring));
  1095. else strins(fstring, "~r~", floatround(Fuel[vehicleid]/10.0), sizeof(fstring));
  1096. strcat(string, fstring, sizeof(string));
  1097.  
  1098. strcat(string, " ~b~~h~", sizeof(string));
  1099. if(GetPVarInt(i, "Speedo")) format(fstring,sizeof(fstring),"mph: ~w~%d", GetPlayerSpeed(i, false));
  1100. else format(fstring,sizeof(fstring),"kph: ~w~%d", GetPlayerSpeed(i, true));
  1101. strcat(string, fstring, sizeof(string));
  1102.  
  1103. strcat(string, "~n~~b~~h~engine: ", sizeof(string));
  1104. if(engine == 1) strcat(string, "~g~on", sizeof(string));
  1105. else strcat(string, "~r~off", sizeof(string));
  1106.  
  1107. strcat(string, " ~b~~h~alarm: ", sizeof(string));
  1108. if(VehicleSecurity[vehicleid] == 1) strcat(string, "~g~on", sizeof(string));
  1109. else strcat(string, "~r~off", sizeof(string));
  1110.  
  1111. strcat(string, " ~b~~h~doors: ", sizeof(string));
  1112. if(doors == 1) strcat(string, "~r~locked", sizeof(string));
  1113. else strcat(string, "~g~unlocked", sizeof(string));
  1114.  
  1115. TextDrawSetString(SpeedoText[i], string);
  1116. }
  1117. }
  1118. }
  1119.  
  1120. public SaveTimer()
  1121. {
  1122. SaveVehicleIndex++;
  1123. if(SaveVehicleIndex >= MAX_DVEHICLES) SaveVehicleIndex = 1;
  1124. if(IsValidVehicle(SaveVehicleIndex)) SaveVehicle(SaveVehicleIndex);
  1125. }
  1126.  
  1127. public StopAlarm(vehicleid)
  1128. {
  1129. ToggleAlarm(vehicleid, VEHICLE_PARAMS_OFF);
  1130. }
  1131.  
  1132. public OnFilterScriptInit()
  1133. {
  1134. print("\n------------------------------------------------");
  1135. print(" Advanced Vehicle System 1.0 by MadeMan");
  1136. print("------------------------------------------------");
  1137.  
  1138. LoadVehicles();
  1139. LoadDealerships();
  1140. LoadFuelStations();
  1141.  
  1142. SpeedoBox = TextDrawCreate(345.000, 363.000, "~n~~n~~n~~n~");
  1143. TextDrawAlignment(SpeedoBox, 2);
  1144. TextDrawLetterSize(SpeedoBox, 0.500, 1.400);
  1145. TextDrawUseBox(SpeedoBox, 1);
  1146. TextDrawBoxColor(SpeedoBox, 153);
  1147. TextDrawTextSize(SpeedoBox, 0.000, 340.000);
  1148.  
  1149. for(new i=0; i < MAX_PLAYERS; i++)
  1150. {
  1151. if(IsPlayerConnected(i))
  1152. {
  1153. OnPlayerConnect(i);
  1154. }
  1155. }
  1156. for(new i=1; i < MAX_DVEHICLES; i++)
  1157. {
  1158. UpdateVehicle(i, 0);
  1159. }
  1160. for(new i=1; i < MAX_DEALERSHIPS; i++)
  1161. {
  1162. UpdateDealership(i, 0);
  1163. }
  1164. for(new i=1; i < MAX_FUEL_STATIONS; i++)
  1165. {
  1166. UpdateFuelStation(i, 0);
  1167. }
  1168.  
  1169. maintimer = SetTimer("MainTimer", 1000, true);
  1170. speedotimer = SetTimer("Speedometer", 555, true);
  1171. savetimer = SetTimer("SaveTimer", 2222, true);
  1172.  
  1173. print("------------------------------------------------\n");
  1174. return 1;
  1175. }
  1176.  
  1177. public OnFilterScriptExit()
  1178. {
  1179. KillTimer(maintimer);
  1180. KillTimer(speedotimer);
  1181. KillTimer(savetimer);
  1182. TextDrawDestroy(SpeedoBox);
  1183. for(new i=0; i < MAX_PLAYERS; i++)
  1184. {
  1185. if(IsPlayerConnected(i))
  1186. {
  1187. OnPlayerDisconnect(i, 1);
  1188. }
  1189. }
  1190. for(new i=1; i < MAX_DVEHICLES; i++)
  1191. {
  1192. if(VehicleCreated[i])
  1193. {
  1194. DestroyVehicle(VehicleID[i]);
  1195. if(VehicleCreated[i] == VEHICLE_DEALERSHIP)
  1196. {
  1197. Delete3DTextLabel(VehicleLabel[i]);
  1198. }
  1199. }
  1200. }
  1201. for(new i=1; i < MAX_DEALERSHIPS; i++)
  1202. {
  1203. if(DealershipCreated[i])
  1204. {
  1205. Delete3DTextLabel(DealershipLabel[i]);
  1206. }
  1207. }
  1208. for(new i=1; i < MAX_FUEL_STATIONS; i++)
  1209. {
  1210. if(FuelStationCreated[i])
  1211. {
  1212. Delete3DTextLabel(FuelStationLabel[i]);
  1213. }
  1214. }
  1215. print("\n------------------------------------------------");
  1216. print(" Advanced Vehicle System 1.0 Unloaded");
  1217. print("------------------------------------------------\n");
  1218. return 1;
  1219. }
  1220.  
  1221. public OnPlayerConnect(playerid)
  1222. {
  1223. RefuelTime[playerid] = 0;
  1224. TrackCar[playerid] = 0;
  1225.  
  1226. SpeedoText[playerid] = TextDrawCreate(180.000, 362.000," ");
  1227. TextDrawAlignment(SpeedoText[playerid], 1);
  1228. TextDrawFont(SpeedoText[playerid],2);
  1229. TextDrawLetterSize(SpeedoText[playerid], 0.310, 1.400);
  1230. TextDrawSetShadow(SpeedoText[playerid],0);
  1231. return 1;
  1232. }
  1233.  
  1234. public OnPlayerDisconnect(playerid, reason)
  1235. {
  1236. TextDrawDestroy(SpeedoText[playerid]);
  1237. return 1;
  1238. }
  1239.  
  1240. public OnVehicleSpawn(vehicleid)
  1241. {
  1242. VehicleSecurity[vehicleid] = 0;
  1243. new id = GetVehicleID(vehicleid);
  1244. if(IsValidVehicle(id))
  1245. {
  1246. if(VehicleColor[id][0] >= 0 && VehicleColor[id][1] >= 0)
  1247. ChangeVehicleColor(vehicleid, VehicleColor[id][0], VehicleColor[id][1]);
  1248. LinkVehicleToInterior(vehicleid, VehicleInterior[id]);
  1249. SetVehicleVirtualWorld(vehicleid, VehicleWorld[id]);
  1250. for(new i=0; i < sizeof(VehicleMods[]); i++)
  1251. {
  1252. AddVehicleComponent(vehicleid, VehicleMods[id][i]);
  1253. }
  1254. ChangeVehiclePaintjob(vehicleid, VehiclePaintjob[id]);
  1255. }
  1256. return 1;
  1257. }
  1258.  
  1259. CMD:avshelp(playerid, params[])
  1260. {
  1261. new info[512];
  1262. strcat(info, "/v /fix /flip /tow /eject /ejectall\n", sizeof(info));
  1263. strcat(info, "/vlock /valarm /fuel /trunk /kph /mph /clearmods /sellv /givecarkeys /trackcar\n", sizeof(info));
  1264. if(IsAdmin(playerid, 1))
  1265. {
  1266. strcat(info, "/addv /editv /setfuel /rac (respawnallcars) /rtc (respawnthiscar)\n", sizeof(info));
  1267. strcat(info, "/adddealership /deletedealership /movedealership /gotodealership\n", sizeof(info));
  1268. strcat(info, "/addfuelstation /deletefuelstation /movefuelstation /gotofuelstation", sizeof(info));
  1269. }
  1270. ShowPlayerDialog(playerid, DIALOG_NONE, DIALOG_STYLE_MSGBOX, "Advanced Vehicle System Help", info, "OK", "");
  1271. return 1;
  1272. }
  1273.  
  1274. CMD:fix(playerid, params[])
  1275. {
  1276. if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return SendClientMessage(playerid, COLOR_RED, "You are not driving a vehicle!");
  1277. new vehicleid = GetPlayerVehicleID(playerid);
  1278. RepairVehicle(vehicleid);
  1279. SendClientMessage(playerid, COLOR_WHITE, "Vehicle fixed");
  1280. return 1;
  1281. }
  1282.  
  1283. CMD:flip(playerid, params[])
  1284. {
  1285. if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return SendClientMessage(playerid, COLOR_RED, "You are not driving a vehicle!");
  1286. new vehicleid = GetPlayerVehicleID(playerid);
  1287. new Float:angle;
  1288. GetVehicleZAngle(vehicleid, angle);
  1289. SetVehicleZAngle(vehicleid, angle);
  1290. SendClientMessage(playerid, COLOR_WHITE, "Vehicle flipped");
  1291. return 1;
  1292. }
  1293.  
  1294. CMD:tow(playerid, params[])
  1295. {
  1296. if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return SendClientMessage(playerid, COLOR_RED, "You are not driving a vehicle!");
  1297. new vehicleid = GetPlayerVehicleID(playerid);
  1298. if(IsTrailerAttachedToVehicle(vehicleid))
  1299. {
  1300. DetachTrailerFromVehicle(vehicleid);
  1301. SendClientMessage(playerid, COLOR_WHITE, "You are not towing anymore");
  1302. return 1;
  1303. }
  1304. new Float:x, Float:y, Float:z;
  1305. new Float:dist, Float:closedist=8, closeveh;
  1306. for(new i=1; i < MAX_VEHICLES; i++)
  1307. {
  1308. if(i != vehicleid && GetVehiclePos(i, x, y, z))
  1309. {
  1310. dist = IsPlayerInRangeOfPoint(playerid, x, y, z);
  1311. if(dist < closedist)
  1312. {
  1313. closedist = dist;
  1314. closeveh = i;
  1315. }
  1316. }
  1317. }
  1318. if(!closeveh) return SendClientMessage(playerid, COLOR_RED, "You are not close to a vehicle!");
  1319. AttachTrailerToVehicle(closeveh, vehicleid);
  1320. SendClientMessage(playerid, COLOR_WHITE, "You are now towing a vehicle");
  1321. return 1;
  1322. }
  1323.  
  1324. CMD:kph(playerid, params[])
  1325. {
  1326. SetPVarInt(playerid, "Speedo", 0);
  1327. SendClientMessage(playerid, COLOR_WHITE, "Speedometer units set to KPH");
  1328. return 1;
  1329. }
  1330.  
  1331. CMD:mph(playerid, params[])
  1332. {
  1333. SetPVarInt(playerid, "Speedo", 1);
  1334. SendClientMessage(playerid, COLOR_WHITE, "Speedometer units set to MPH");
  1335. return 1;
  1336. }
  1337.  
  1338. CMD:eject(playerid, params[])
  1339. {
  1340. if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return SendClientMessage(playerid, COLOR_RED, "You are not driving a vehicle!");
  1341. new pid, msg[128];
  1342. if(sscanf(params, "u", pid)) return SendClientMessage(playerid, COLOR_GREY, "USAGE: /eject [player]");
  1343. if(!IsPlayerConnected(pid)) return SendClientMessage(playerid, COLOR_RED, "Invalid player!");
  1344. new vehicleid = GetPlayerVehicleID(playerid);
  1345. if(!IsPlayerInVehicle(pid, vehicleid)) return SendClientMessage(playerid, COLOR_RED, "Player is not in your vehicle!");
  1346. RemovePlayerFromVehicle(pid);
  1347. format(msg, sizeof(msg), "Vehicle driver %s (%d) has ejected you", PlayerName(playerid), playerid);
  1348. SendClientMessage(pid, COLOR_WHITE, msg);
  1349. format(msg, sizeof(msg), "You have ejected %s (%d) from your vehicle", PlayerName(pid), pid);
  1350. SendClientMessage(playerid, COLOR_WHITE, msg);
  1351. return 1;
  1352. }
  1353.  
  1354. CMD:ejectall(playerid, params[])
  1355. {
  1356. if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return SendClientMessage(playerid, COLOR_RED, "You are not driving a vehicle!");
  1357. new vehicleid = GetPlayerVehicleID(playerid);
  1358. new msg[128];
  1359. format(msg, sizeof(msg), "Vehicle driver %s (%d) has ejected you", PlayerName(playerid), playerid);
  1360. for(new i=0; i < MAX_PLAYERS; i++)
  1361. {
  1362. if(IsPlayerConnected(i) && i != playerid && IsPlayerInVehicle(i, vehicleid))
  1363. {
  1364. RemovePlayerFromVehicle(i);
  1365. SendClientMessage(i, COLOR_WHITE, msg);
  1366. }
  1367. }
  1368. SendClientMessage(playerid, COLOR_WHITE, "You have ejected all passengers");
  1369. return 1;
  1370. }
  1371.  
  1372. CMD:clearmods(playerid, params[])
  1373. {
  1374. if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return SendClientMessage(playerid, COLOR_RED, "You are not driving a vehicle!");
  1375. new vehicleid = GetPlayerVehicleID(playerid);
  1376. new id = GetVehicleID(vehicleid);
  1377. if(GetPlayerVehicleAccess(playerid, id) != 1)
  1378. return SendClientMessage(playerid, COLOR_RED, "This is not your vehicle!");
  1379. for(new i=0; i < sizeof(VehicleMods[]); i++)
  1380. {
  1381. RemoveVehicleComponent(VehicleID[id], GetVehicleComponentInSlot(VehicleID[id], i));
  1382. VehicleMods[id][i] = 0;
  1383. }
  1384. VehiclePaintjob[id] = 255;
  1385. ChangeVehiclePaintjob(VehicleID[id], 255);
  1386. SaveVehicle(id);
  1387. SendClientMessage(playerid, COLOR_WHITE, "You have removed all modifications from your vehicle");
  1388. return 1;
  1389. }
  1390.  
  1391. CMD:trackcar(playerid, params[])
  1392. {
  1393. if(TrackCar[playerid])
  1394. {
  1395. TrackCar[playerid] = 0;
  1396. DisablePlayerCheckpoint(playerid);
  1397. SendClientMessage(playerid, COLOR_WHITE, "You are not tracking your vehicle anymore");
  1398. return 1;
  1399. }
  1400. new info[256], bool:found;
  1401. for(new i=1; i < MAX_DVEHICLES; i++)
  1402. {
  1403. if(VehicleCreated[i] == VEHICLE_PLAYER && strcmp(VehicleOwner[i], PlayerName(playerid)) == 0)
  1404. {
  1405. found = true;
  1406. format(info, sizeof(info), "%sID: %d Name: %s\n", info, i, VehicleNames[VehicleModel[i]-400]);
  1407. }
  1408. }
  1409. if(!found) return SendClientMessage(playerid, COLOR_RED, "You don't have any vehicles!");
  1410. ShowPlayerDialog(playerid, DIALOG_FINDVEHICLE, DIALOG_STYLE_LIST, "Find Your Vehicle", info, "Find", "Cancel");
  1411. return 1;
  1412. }
  1413.  
  1414. CMD:v(playerid, params[])
  1415. {
  1416. if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return SendClientMessage(playerid, COLOR_RED, "You are not driving a vehicle!");
  1417. new vehicleid = GetPlayerVehicleID(playerid);
  1418. if(IsBicycle(vehicleid)) return SendClientMessage(playerid, COLOR_RED, "You are not driving a vehicle!");
  1419. new id = GetVehicleID(vehicleid);
  1420. if(!GetPlayerVehicleAccess(playerid, id))
  1421. return SendClientMessage(playerid, COLOR_RED, "You don't have the keys for this vehicle!");
  1422. SetPVarInt(playerid, "DialogValue1", id);
  1423. ShowDialog(playerid, DIALOG_VEHICLE);
  1424. return 1;
  1425. }
  1426.  
  1427. CMD:sellv(playerid, params[])
  1428. {
  1429. new pid, id, price, msg[128];
  1430. if(sscanf(params, "udd", pid, id, price)) return SendClientMessage(playerid, COLOR_GREY, "USAGE: /sellv [player] [vehicleid] [price]");
  1431. if(!IsPlayerConnected(pid)) return SendClientMessage(playerid, COLOR_RED, "Invalid player!");
  1432. if(GetPlayerVehicleAccess(playerid, id) != 1)
  1433. return SendClientMessage(playerid, COLOR_RED, "You are not the owner of this vehicle!");
  1434. if(price < 1) return SendClientMessage(playerid, COLOR_RED, "Invalid price!");
  1435. if(!PlayerToPlayer(playerid, pid, 10.0)) return SendClientMessage(playerid, COLOR_RED, "Player is too far!");
  1436. SetPVarInt(pid, "DialogValue1", playerid);
  1437. SetPVarInt(pid, "DialogValue2", id);
  1438. SetPVarInt(pid, "DialogValue3", price);
  1439. ShowDialog(pid, DIALOG_VEHICLE_SELL);
  1440. format(msg, sizeof(msg), "You have offered %s (%d) to buy your vehicle for $%d", PlayerName(pid), pid, price);
  1441. SendClientMessage(playerid, COLOR_WHITE, msg);
  1442. return 1;
  1443. }
  1444.  
  1445. CMD:givecarkeys(playerid, params[])
  1446. {
  1447. new pid, id, msg[128];
  1448. if(sscanf(params, "ud", pid, id)) return SendClientMessage(playerid, COLOR_GREY, "USAGE: /givecarkeys [player] [vehicleid]");
  1449. if(!IsPlayerConnected(pid)) return SendClientMessage(playerid, COLOR_RED, "Invalid player!");
  1450. if(!IsValidVehicle(id)) return SendClientMessage(playerid, COLOR_RED, "Invalid vehicleid!");
  1451. if(GetPlayerVehicleAccess(playerid, id) != 1)
  1452. return SendClientMessage(playerid, COLOR_RED, "You are not the owner of this vehicle!");
  1453. if(!PlayerToPlayer(playerid, pid, 10.0)) return SendClientMessage(playerid, COLOR_RED, "Player is too far!");
  1454. SetPVarInt(pid, "CarKeys", id);
  1455. format(msg, sizeof(msg), "You have given your car keys to %s (%d)", PlayerName(pid), pid);
  1456. SendClientMessage(playerid, COLOR_WHITE, msg);
  1457. format(msg, sizeof(msg), "%s (%d) has given you car keys", PlayerName(playerid), playerid);
  1458. SendClientMessage(pid, COLOR_WHITE, msg);
  1459. return 1;
  1460. }
  1461.  
  1462. CMD:vlock(playerid, params[])
  1463. {
  1464. new vehicleid;
  1465. if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
  1466. {
  1467. vehicleid = GetPlayerVehicleID(playerid);
  1468. }
  1469. else
  1470. {
  1471. vehicleid = GetClosestVehicle(playerid);
  1472. if(!PlayerToVehicle(playerid, vehicleid, 5.0)) vehicleid = 0;
  1473. }
  1474. if(!vehicleid) return SendClientMessage(playerid, COLOR_RED, "You are not close to a vehicle!");
  1475. new id = GetVehicleID(vehicleid);
  1476. if(!IsValidVehicle(id)) return SendClientMessage(playerid, COLOR_RED, "You don't have the keys for this vehicle!");
  1477. if(!GetPlayerVehicleAccess(playerid, id))
  1478. return SendClientMessage(playerid, COLOR_RED, "You don't have the keys for this vehicle!");
  1479. new engine, lights, alarm, doors, bonnet, boot, objective;
  1480. GetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
  1481. if(doors == 1)
  1482. {
  1483. doors = 0;
  1484. GameTextForPlayer(playerid, "~g~doors unlocked", 3000, 6);
  1485. }
  1486. else
  1487. {
  1488. doors = 1;
  1489. GameTextForPlayer(playerid, "~r~doors locked", 3000, 6);
  1490. }
  1491. SetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
  1492. return 1;
  1493. }
  1494.  
  1495. CMD:valarm(playerid, params[])
  1496. {
  1497. new vehicleid;
  1498. if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
  1499. {
  1500. vehicleid = GetPlayerVehicleID(playerid);
  1501. }
  1502. else
  1503. {
  1504. vehicleid = GetClosestVehicle(playerid);
  1505. if(!PlayerToVehicle(playerid, vehicleid, 5.0)) vehicleid = 0;
  1506. }
  1507. if(!vehicleid) return SendClientMessage(playerid, COLOR_RED, "You are not close to a vehicle!");
  1508. new id = GetVehicleID(vehicleid);
  1509. if(!IsValidVehicle(id)) return SendClientMessage(playerid, COLOR_RED, "You don't have the keys for this vehicle!");
  1510. if(GetPlayerVehicleAccess(playerid, id) != 1)
  1511. return SendClientMessage(playerid, COLOR_RED, "You don't have the keys for this vehicle!");
  1512. if(VehicleSecurity[vehicleid] == 0)
  1513. {
  1514. VehicleSecurity[vehicleid] = 1;
  1515. GameTextForPlayer(playerid, "~g~alarm on", 3000, 6);
  1516. }
  1517. else
  1518. {
  1519. ToggleAlarm(vehicleid, VEHICLE_PARAMS_OFF);
  1520. VehicleSecurity[vehicleid] = 0;
  1521. GameTextForPlayer(playerid, "~r~alarm off", 3000, 6);
  1522. }
  1523. return 1;
  1524. }
  1525.  
  1526. CMD:trunk(playerid, params[])
  1527. {
  1528. new vehicleid = GetClosestVehicle(playerid);
  1529. if(!PlayerToVehicle(playerid, vehicleid, 5.0)) vehicleid = 0;
  1530. if(!vehicleid || IsBicycle(vehicleid) || IsPlayerInAnyVehicle(playerid))
  1531. return SendClientMessage(playerid, COLOR_RED, "You are not close to a vehicle!");
  1532. new id = GetVehicleID(vehicleid);
  1533. if(!IsValidVehicle(id)) return SendClientMessage(playerid, COLOR_RED, "You don't have the keys for this vehicle!");
  1534. if(!GetPlayerVehicleAccess(playerid, id))
  1535. return SendClientMessage(playerid, COLOR_RED, "You don't have the keys for this vehicle!");
  1536. new engine, lights, alarm, doors, bonnet, boot, objective;
  1537. GetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
  1538. SetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, 1, objective);
  1539. SetPVarInt(playerid, "DialogValue1", id);
  1540. ShowDialog(playerid, DIALOG_TRUNK);
  1541. return 1;
  1542. }
  1543.  
  1544. CMD:fuel(playerid, params[])
  1545. {
  1546. for(new i=1; i < MAX_FUEL_STATIONS; i++)
  1547. {
  1548. if(FuelStationCreated[i])
  1549. {
  1550. if(IsPlayerInRangeOfPoint(playerid, 15.0, FuelStationPos[i][0], FuelStationPos[i][1], FuelStationPos[i][2]))
  1551. {
  1552. SetPVarInt(playerid, "FuelStation", i);
  1553. ShowDialog(playerid, DIALOG_FUEL);
  1554. return 1;
  1555. }
  1556. }
  1557. }
  1558. SendClientMessage(playerid, COLOR_RED, "You are not in a fuel station!");
  1559. return 1;
  1560. }
  1561.  
  1562. CMD:rtc(playerid, params[])
  1563. {
  1564. if(!IsAdmin(playerid, 1)) return SendClientMessage(playerid, COLOR_RED, "You are not admin!");
  1565. if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, COLOR_RED, "You are not in a vehicle!");
  1566. SetVehicleToRespawn(GetPlayerVehicleID(playerid));
  1567. SendClientMessage(playerid, COLOR_WHITE, "Vehicle respawned");
  1568. return 1;
  1569. }
  1570.  
  1571. CMD:rac(playerid, params[])
  1572. {
  1573. if(!IsAdmin(playerid, 1)) return SendClientMessage(playerid, COLOR_RED, "You are not admin!");
  1574. new bool:vehicleused[MAX_VEHICLES];
  1575. for(new i=0; i < MAX_PLAYERS; i++)
  1576. {
  1577. if(IsPlayerConnected(i) && IsPlayerInAnyVehicle(i))
  1578. {
  1579. vehicleused[GetPlayerVehicleID(i)] = true;
  1580. }
  1581. }
  1582. for(new i=1; i < MAX_VEHICLES; i++)
  1583. {
  1584. if(!vehicleused[i])
  1585. {
  1586. SetVehicleToRespawn(i);
  1587. }
  1588. }
  1589. new msg[128];
  1590. format(msg, sizeof(msg), "Admin %s (%d) has respawned all unused vehicles", PlayerName(playerid), playerid);
  1591. SendClientMessageToAll(COLOR_YELLOW, msg);
  1592. return 1;
  1593. }
  1594.  
  1595. CMD:setfuel(playerid, params[])
  1596. {
  1597. if(!IsAdmin(playerid, 1)) return SendClientMessage(playerid, COLOR_RED, "You are not admin!");
  1598. if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, COLOR_RED, "You are not in a vehicle!");
  1599. new amount, msg[128];
  1600. if(sscanf(params, "d", amount)) return SendClientMessage(playerid, COLOR_GREY, "USAGE: /setfuel [amount]");
  1601. if(amount < 0 || amount > 100) return SendClientMessage(playerid, COLOR_RED, "Invalid amount! (0-100)");
  1602. Fuel[GetPlayerVehicleID(playerid)] = amount;
  1603. format(msg, sizeof(msg), "You have set your vehicle fuel to %d", amount);
  1604. SendClientMessage(playerid, COLOR_WHITE, msg);
  1605. return 1;
  1606. }
  1607.  
  1608. CMD:addv(playerid, params[])
  1609. {
  1610. if(!IsAdmin(playerid, 1)) return SendClientMessage(playerid, COLOR_RED, "You are not admin!");
  1611. if(!IsPlayerSpawned(playerid)) return SendClientMessage(playerid, COLOR_RED, "You can't use this command now!");
  1612. new model[32], modelid, dealerid, color1, color2, price;
  1613. if(sscanf(params, "dsddd", dealerid, model, color1, color2, price))
  1614. return SendClientMessage(playerid, COLOR_GREY, "USAGE: /addv [dealerid] [model] [color1] [color2] [price]");
  1615. if(!IsValidDealership(dealerid)) return SendClientMessage(playerid, COLOR_RED, "Invalid dealerid!");
  1616. if(IsNumeric(model)) modelid = strval(model);
  1617. else modelid = GetVehicleModelIDFromName(model);
  1618. if(modelid < 400 || modelid > 611) return SendClientMessage(playerid, COLOR_RED, "Invalid model ID!");
  1619. if(color1 < 0 || color2 < 0) return SendClientMessage(playerid, COLOR_RED, "Invalid color!");
  1620. if(price < 0) return SendClientMessage(playerid, COLOR_RED, "Invalid price!");
  1621. new Float:X, Float:Y, Float:Z, Float:angle;
  1622. GetPlayerPos(playerid, X, Y, Z);
  1623. GetPlayerFacingAngle(playerid, angle);
  1624. X += floatmul(floatsin(-angle, degrees), 4.0);
  1625. Y += floatmul(floatcos(-angle, degrees), 4.0);
  1626. for(new i=1; i < MAX_DVEHICLES; i++)
  1627. {
  1628. if(!VehicleCreated[i])
  1629. {
  1630. new msg[128];
  1631. VehicleCreated[i] = VEHICLE_DEALERSHIP;
  1632. VehicleModel[i] = modelid;
  1633. VehiclePos[i][0] = X;
  1634. VehiclePos[i][1] = Y;
  1635. VehiclePos[i][2] = Z;
  1636. VehiclePos[i][3] = angle+90.0;
  1637. VehicleColor[i][0] = color1;
  1638. VehicleColor[i][1] = color2;
  1639. VehicleInterior[i] = GetPlayerInterior(playerid);
  1640. VehicleWorld[i] = GetPlayerVirtualWorld(playerid);
  1641. VehicleValue[i] = price;
  1642. valstr(VehicleOwner[i], dealerid);
  1643. VehicleNumberPlate[i] = DEFAULT_NUMBER_PLATE;
  1644. for(new d=0; d < sizeof(VehicleTrunk[]); d++)
  1645. {
  1646. VehicleTrunk[i][d][0] = 0;
  1647. VehicleTrunk[i][d][1] = 0;
  1648. }
  1649. for(new d=0; d < sizeof(VehicleMods[]); d++)
  1650. {
  1651. VehicleMods[i][d] = 0;
  1652. }
  1653. VehiclePaintjob[i] = 255;
  1654. UpdateVehicle(i, 0);
  1655. SaveVehicle(i);
  1656. format(msg, sizeof(msg), "Added vehicle id %d to dealerid %d", i, dealerid);
  1657. SendClientMessage(playerid, COLOR_WHITE, msg);
  1658. return 1;
  1659. }
  1660. }
  1661. SendClientMessage(playerid, COLOR_RED, "Can't add any more vehicles!");
  1662. return 1;
  1663. }
  1664.  
  1665. CMD:editv(playerid, params[])
  1666. {
  1667. if(!IsAdmin(playerid, 1)) return SendClientMessage(playerid, COLOR_RED, "You are not admin!");
  1668. if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
  1669. {
  1670. new id = GetVehicleID(GetPlayerVehicleID(playerid));
  1671. if(!IsValidVehicle(id)) return SendClientMessage(playerid, COLOR_RED, "This is not a dynamic vehicle!");
  1672. SetPVarInt(playerid, "DialogValue1", id);
  1673. ShowDialog(playerid, DIALOG_EDITVEHICLE);
  1674. return 1;
  1675. }
  1676. new vehicleid;
  1677. if(sscanf(params, "d", vehicleid)) return SendClientMessage(playerid, COLOR_GREY, "USAGE: /editv [vehicleid]");
  1678. if(!IsValidVehicle(vehicleid)) return SendClientMessage(playerid, COLOR_RED, "Invalid vehicleid!");
  1679. SetPVarInt(playerid, "DialogValue1", vehicleid);
  1680. ShowDialog(playerid, DIALOG_EDITVEHICLE);
  1681. return 1;
  1682. }
  1683.  
  1684. CMD:adddealership(playerid, params[])
  1685. {
  1686. if(!IsAdmin(playerid, 1)) return SendClientMessage(playerid, COLOR_RED, "You are not admin!");
  1687. if(!IsPlayerSpawned(playerid)) return SendClientMessage(playerid, COLOR_RED, "You can't use this command now!");
  1688. for(new i=1; i < MAX_DEALERSHIPS; i++)
  1689. {
  1690. if(!DealershipCreated[i])
  1691. {
  1692. new msg[128];
  1693. DealershipCreated[i] = 1;
  1694. GetPlayerPos(playerid, DealershipPos[i][0], DealershipPos[i][1], DealershipPos[i][2]);
  1695. UpdateDealership(i, 0);
  1696. SaveDealership(i);
  1697. format(msg, sizeof(msg), "Added dealership id %d", i);
  1698. SendClientMessage(playerid, COLOR_WHITE, msg);
  1699. return 1;
  1700. }
  1701. }
  1702. SendClientMessage(playerid, COLOR_RED, "Can't add any more dealerships!");
  1703. return 1;
  1704. }
  1705.  
  1706. CMD:deletedealership(playerid, params[])
  1707. {
  1708. if(!IsAdmin(playerid, 1)) return SendClientMessage(playerid, COLOR_RED, "You are not admin!");
  1709. new dealerid, msg[128];
  1710. if(sscanf(params, "d", dealerid)) return SendClientMessage(playerid, COLOR_GREY, "USAGE: /deletedealership [dealerid]");
  1711. if(!IsValidDealership(dealerid)) return SendClientMessage(playerid, COLOR_RED, "Invalid dealerid!");
  1712. for(new i=1; i < MAX_DVEHICLES; i++)
  1713. {
  1714. if(VehicleCreated[i] == VEHICLE_DEALERSHIP && strval(VehicleOwner[i]) == dealerid)
  1715. {
  1716. DestroyVehicle(VehicleID[i]);
  1717. Delete3DTextLabel(VehicleLabel[i]);
  1718. VehicleCreated[i] = 0;
  1719. }
  1720. }
  1721. DealershipCreated[dealerid] = 0;
  1722. Delete3DTextLabel(DealershipLabel[dealerid]);
  1723. SaveDealership(dealerid);
  1724. format(msg, sizeof(msg), "Deleted dealership id %d", dealerid);
  1725. SendClientMessage(playerid, COLOR_WHITE, msg);
  1726. return 1;
  1727. }
  1728.  
  1729. CMD:movedealership(playerid, params[])
  1730. {
  1731. if(!IsAdmin(playerid, 1)) return SendClientMessage(playerid, COLOR_RED, "You are not admin!");
  1732. new dealerid, msg[128];
  1733. if(sscanf(params, "d", dealerid)) return SendClientMessage(playerid, COLOR_GREY, "USAGE: /movedealership [dealerid]");
  1734. if(!IsValidDealership(dealerid)) return SendClientMessage(playerid, COLOR_RED, "Invalid dealerid!");
  1735. GetPlayerPos(playerid, DealershipPos[dealerid][0], DealershipPos[dealerid][1], DealershipPos[dealerid][2]);
  1736. UpdateDealership(dealerid, 1);
  1737. SaveDealership(dealerid);
  1738. format(msg, sizeof(msg), "Moved dealership id %d here", dealerid);
  1739. SendClientMessage(playerid, COLOR_WHITE, msg);
  1740. return 1;
  1741. }
  1742.  
  1743. CMD:gotodealership(playerid, params[])
  1744. {
  1745. if(!IsAdmin(playerid, 1)) return SendClientMessage(playerid, COLOR_RED, "You are not admin!");
  1746. new dealerid, msg[128];
  1747. if(sscanf(params, "d", dealerid)) return SendClientMessage(playerid, COLOR_GREY, "USAGE: /gotodealership [dealerid]");
  1748. if(!IsValidDealership(dealerid)) return SendClientMessage(playerid, COLOR_RED, "Invalid dealerid!");
  1749. SetPlayerPos(playerid, DealershipPos[dealerid][0], DealershipPos[dealerid][1], DealershipPos[dealerid][2]);
  1750. format(msg, sizeof(msg), "Teleported to dealership id %d", dealerid);
  1751. SendClientMessage(playerid, COLOR_WHITE, msg);
  1752. return 1;
  1753. }
  1754.  
  1755. CMD:addfuelstation(playerid, params[])
  1756. {
  1757. if(!IsAdmin(playerid, 1)) return SendClientMessage(playerid, COLOR_RED, "You are not admin!");
  1758. if(!IsPlayerSpawned(playerid)) return SendClientMessage(playerid, COLOR_RED, "You can't use this command now!");
  1759. for(new i=1; i < MAX_FUEL_STATIONS; i++)
  1760. {
  1761. if(!FuelStationCreated[i])
  1762. {
  1763. new msg[128];
  1764. FuelStationCreated[i] = 1;
  1765. GetPlayerPos(playerid, FuelStationPos[i][0], FuelStationPos[i][1], FuelStationPos[i][2]);
  1766. UpdateFuelStation(i, 0);
  1767. SaveFuelStation(i);
  1768. format(msg, sizeof(msg), "Added fuel station id %d", i);
  1769. SendClientMessage(playerid, COLOR_WHITE, msg);
  1770. return 1;
  1771. }
  1772. }
  1773. SendClientMessage(playerid, COLOR_RED, "Can't add any more fuel stations!");
  1774. return 1;
  1775. }
  1776.  
  1777. CMD:deletefuelstation(playerid, params[])
  1778. {
  1779. if(!IsAdmin(playerid, 1)) return SendClientMessage(playerid, COLOR_RED, "You are not admin!");
  1780. new stationid, msg[128];
  1781. if(sscanf(params, "d", stationid)) return SendClientMessage(playerid, COLOR_GREY, "USAGE: /deletefuelstation [stationid]");
  1782. if(!IsValidFuelStation(stationid)) return SendClientMessage(playerid, COLOR_RED, "Invalid stationid!");
  1783. FuelStationCreated[stationid] = 0;
  1784. Delete3DTextLabel(FuelStationLabel[stationid]);
  1785. SaveFuelStation(stationid);
  1786. format(msg, sizeof(msg), "Deleted fuel station id %d", stationid);
  1787. SendClientMessage(playerid, COLOR_WHITE, msg);
  1788. return 1;
  1789. }
  1790.  
  1791. CMD:movefuelstation(playerid, params[])
  1792. {
  1793. if(!IsAdmin(playerid, 1)) return SendClientMessage(playerid, COLOR_RED, "You are not admin!");
  1794. new stationid, msg[128];
  1795. if(sscanf(params, "d", stationid)) return SendClientMessage(playerid, COLOR_GREY, "USAGE: /movefuelstation [stationid]");
  1796. if(!IsValidFuelStation(stationid)) return SendClientMessage(playerid, COLOR_RED, "Invalid stationid!");
  1797. GetPlayerPos(playerid, FuelStationPos[stationid][0], FuelStationPos[stationid][1], FuelStationPos[stationid][2]);
  1798. UpdateFuelStation(stationid, 1);
  1799. SaveFuelStation(stationid);
  1800. format(msg, sizeof(msg), "Moved fuel station id %d here", stationid);
  1801. SendClientMessage(playerid, COLOR_WHITE, msg);
  1802. return 1;
  1803. }
  1804.  
  1805. CMD:gotofuelstation(playerid, params[])
  1806. {
  1807. if(!IsAdmin(playerid, 1)) return SendClientMessage(playerid, COLOR_RED, "You are not admin!");
  1808. new stationid, msg[128];
  1809. if(sscanf(params, "d", stationid)) return SendClientMessage(playerid, COLOR_GREY, "USAGE: /gotofuelstation [stationid]");
  1810. if(!IsValidFuelStation(stationid)) return SendClientMessage(playerid, COLOR_RED, "Invalid stationid!");
  1811. SetPlayerPos(playerid, FuelStationPos[stationid][0], FuelStationPos[stationid][1], FuelStationPos[stationid][2]);
  1812. format(msg, sizeof(msg), "Teleported to fuel station id %d", stationid);
  1813. SendClientMessage(playerid, COLOR_WHITE, msg);
  1814. return 1;
  1815. }
  1816.  
  1817. public OnPlayerCommandText(playerid, cmdtext[])
  1818. {
  1819. new pos, funcname[32];
  1820. while(cmdtext[++pos] > ' ')
  1821. {
  1822. funcname[pos-1] = tolower(cmdtext[pos]);
  1823. }
  1824. strins(funcname, "cmd_", 0, sizeof(funcname));
  1825. while (cmdtext[pos] == ' ') pos++;
  1826. if(!cmdtext[pos])
  1827. {
  1828. return CallLocalFunction(funcname, "is", playerid, "\1");
  1829. }
  1830. return CallLocalFunction(funcname, "is", playerid, cmdtext[pos]);
  1831. }
  1832.  
  1833. public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
  1834. {
  1835. if(!ispassenger)
  1836. {
  1837. new id = GetVehicleID(vehicleid);
  1838. if(IsValidVehicle(id) && VehicleCreated[id] == VEHICLE_PLAYER)
  1839. {
  1840. new msg[128];
  1841. format(msg, sizeof(msg), "This vehicle belongs to %s", VehicleOwner[id]);
  1842. SendClientMessage(playerid, COLOR_GREY, msg);
  1843. }
  1844. }
  1845. return 1;
  1846. }
  1847.  
  1848. public OnPlayerStateChange(playerid, newstate, oldstate)
  1849. {
  1850. if(IsPlayerInAnyVehicle(playerid) && !IsBicycle(GetPlayerVehicleID(playerid)))
  1851. {
  1852. TextDrawShowForPlayer(playerid, SpeedoBox);
  1853. TextDrawShowForPlayer(playerid, SpeedoText[playerid]);
  1854. new vehicleid = GetPlayerVehicleID(playerid);
  1855. if(VehicleSecurity[vehicleid] == 1)
  1856. {
  1857. ToggleAlarm(vehicleid, VEHICLE_PARAMS_ON);
  1858. SetTimerEx("StopAlarm", ALARM_TIME, false, "d", vehicleid);
  1859. }
  1860. }
  1861. else
  1862. {
  1863. TextDrawHideForPlayer(playerid, SpeedoBox);
  1864. TextDrawHideForPlayer(playerid, SpeedoText[playerid]);
  1865. }
  1866. if(newstate == PLAYER_STATE_DRIVER)
  1867. {
  1868. new vehicleid = GetPlayerVehicleID(playerid);
  1869. new id = GetVehicleID(vehicleid);
  1870. if(IsValidVehicle(id))
  1871. {
  1872. if(VehicleCreated[id] == VEHICLE_DEALERSHIP)
  1873. {
  1874. SetPVarInt(playerid, "DialogValue1", id);
  1875. ShowDialog(playerid, DIALOG_VEHICLE_BUY);
  1876. return 1;
  1877. }
  1878. }
  1879. if(IsBicycle(vehicleid))
  1880. {
  1881. ToggleEngine(vehicleid, VEHICLE_PARAMS_ON);
  1882. }
  1883. if(Fuel[vehicleid] <= 0)
  1884. {
  1885. ToggleEngine(vehicleid, VEHICLE_PARAMS_OFF);
  1886. }
  1887. }
  1888. return 1;
  1889. }
  1890.  
  1891. public OnVehicleMod(playerid, vehicleid, componentid)
  1892. {
  1893. new id = GetVehicleID(vehicleid);
  1894. if(IsValidVehicle(id))
  1895. {
  1896. VehicleMods[id][GetVehicleComponentType(componentid)] = componentid;
  1897. SaveVehicle(id);
  1898. }
  1899. return 1;
  1900. }
  1901.  
  1902. public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
  1903. {
  1904. new id = GetVehicleID(vehicleid);
  1905. if(IsValidVehicle(id))
  1906. {
  1907. VehiclePaintjob[id] = paintjobid;
  1908. SaveVehicle(id);
  1909. }
  1910. return 1;
  1911. }
  1912.  
  1913. public OnVehicleRespray(playerid, vehicleid, color1, color2)
  1914. {
  1915. new id = GetVehicleID(vehicleid);
  1916. if(IsValidVehicle(id))
  1917. {
  1918. VehicleColor[id][0] = color1;
  1919. VehicleColor[id][1] = color2;
  1920. SaveVehicle(id);
  1921. }
  1922. return 1;
  1923. }
  1924.  
  1925. ShowDialog(playerid, dialogid)
  1926. {
  1927. switch(dialogid)
  1928. {
  1929. case DIALOG_VEHICLE:
  1930. {
  1931. new vehicleid = GetPVarInt(playerid, "DialogValue1");
  1932. new caption[32], info[256];
  1933. format(caption, sizeof(caption), "Vehicle ID %d", vehicleid);
  1934. strcat(info, "Engine\nLights\nBonnet\nTrunk", sizeof(info));
  1935. strcat(info, "\nFill Tank", sizeof(info));
  1936. switch(GetPlayerVehicleAccess(playerid, vehicleid))
  1937. {
  1938. case 1:
  1939. {
  1940. new value = VehicleValue[vehicleid]/2;
  1941. format(info, sizeof(info), "%s\nSell Vehicle ($%d)\nPark Vehicle\nEdit License Plate", info, value);
  1942. }
  1943. }
  1944. ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_LIST, caption, info, "Select", "Cancel");
  1945. }
  1946. case DIALOG_VEHICLE_BUY:
  1947. {
  1948. new vehicleid = GetPVarInt(playerid, "DialogValue1");
  1949. new caption[32], info[256];
  1950. format(caption, sizeof(caption), "Vehicle ID %d", vehicleid);
  1951. format(info, sizeof(info), "This vehicle is for sale ($%d)\nWould you like to buy it?", VehicleValue[vehicleid]);
  1952. ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_MSGBOX, caption, info, "Yes", "No");
  1953. }
  1954. case DIALOG_VEHICLE_SELL:
  1955. {
  1956. new targetid = GetPVarInt(playerid, "DialogValue1");
  1957. new id = GetPVarInt(playerid, "DialogValue2");
  1958. new price = GetPVarInt(playerid, "DialogValue3");
  1959. new info[256];
  1960. format(info, sizeof(info), "%s (%d) wants to sell you a %s for $%d.", PlayerName(targetid), targetid,
  1961. VehicleNames[VehicleModel[id]-400], price);
  1962. strcat(info, "\n\nWould you like to buy?", sizeof(info));
  1963. ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_MSGBOX, "Buy Vehicle", info, "Yes", "No");
  1964. }
  1965. case DIALOG_TRUNK:
  1966. {
  1967. new vehicleid = GetPVarInt(playerid, "DialogValue1");
  1968. new name[32], info[256];
  1969. for(new i=0; i < sizeof(VehicleTrunk[]); i++)
  1970. {
  1971. if(VehicleTrunk[vehicleid][i][1] > 0)
  1972. {
  1973. GetWeaponName(VehicleTrunk[vehicleid][i][0], name, sizeof(name));
  1974. format(info, sizeof(info), "%s%d. %s (%d)\n", info, i+1, name, VehicleTrunk[vehicleid][i][1]);
  1975. }
  1976. else
  1977. {
  1978. format(info, sizeof(info), "%s%d. Empty\n", info, i+1);
  1979. }
  1980. }
  1981. ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_LIST, "Trunk", info, "Select", "Cancel");
  1982. }
  1983. case DIALOG_TRUNK_ACTION:
  1984. {
  1985. new info[128];
  1986. strcat(info, "Put Into Trunk\nTake From Trunk", sizeof(info));
  1987. ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_LIST, "Trunk", info, "Select", "Cancel");
  1988. }
  1989. case DIALOG_VEHICLE_PLATE:
  1990. {
  1991. ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_INPUT, "Edit License Plate", "Enter new license plate:", "Change", "Back");
  1992. }
  1993. case DIALOG_FUEL:
  1994. {
  1995. new info[128];
  1996. strcat(info, "Refuel Vehicle ($" #FUEL_PRICE ")\nBuy Gas Can ($" #GAS_CAN_PRICE ")", sizeof(info));
  1997. ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_LIST, "Fuel Station", info, "OK", "Cancel");
  1998. }
  1999. case DIALOG_EDITVEHICLE:
  2000. {
  2001. new vehicleid = GetPVarInt(playerid, "DialogValue1");
  2002. new caption[32], info[256];
  2003. format(caption, sizeof(caption), "Edit Vehicle ID %d", vehicleid);
  2004. format(info, sizeof(info), "1. Value: [$%d]\n2. Model: [%d (%s)]\n3. Colors: [%d] [%d]\n4. License Plate: [%s]",
  2005. VehicleValue[vehicleid], VehicleModel[vehicleid], VehicleNames[VehicleModel[vehicleid]-400],
  2006. VehicleColor[vehicleid][0], VehicleColor[vehicleid][1], VehicleNumberPlate[vehicleid]);
  2007. strcat(info, "\n5. Delete Vehicle\n6. Park Vehicle\n7. Go To Vehicle", sizeof(info));
  2008. strcat(info, "\n\nEnter: [nr] [value1] [value2]", sizeof(info));
  2009. ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_INPUT, caption, info, "OK", "Cancel");
  2010. }
  2011. }
  2012. }
  2013.  
  2014. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  2015. {
  2016. if(dialogid == DIALOG_ERROR)
  2017. {
  2018. ShowDialog(playerid, DialogReturn[playerid]);
  2019. return 1;
  2020. }
  2021. DialogReturn[playerid] = dialogid;
  2022. if(dialogid == DIALOG_VEHICLE)
  2023. {
  2024. if(response)
  2025. {
  2026. switch(listitem)
  2027. {
  2028. case 0:
  2029. {
  2030. new vehicleid = GetPlayerVehicleID(playerid);
  2031. new engine, lights, alarm, doors, bonnet, boot, objective;
  2032. GetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
  2033. if(engine == 0 && Fuel[vehicleid] <= 0)
  2034. {
  2035. ShowErrorDialog(playerid, "This vehicle is out of fuel!");
  2036. return 1;
  2037. }
  2038. if(engine == 1) { engine = 0; lights = 0; }
  2039. else { engine = 1; lights = 1; }
  2040. SetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
  2041. }
  2042. case 1:
  2043. {
  2044. new vehicleid = GetPlayerVehicleID(playerid);
  2045. new engine, lights, alarm, doors, bonnet, boot, objective;
  2046. GetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
  2047. if(lights == 1) lights = 0; else lights = 1;
  2048. SetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
  2049. }
  2050. case 2:
  2051. {
  2052. new vehicleid = GetPlayerVehicleID(playerid);
  2053. new engine, lights, alarm, doors, bonnet, boot, objective;
  2054. GetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
  2055. if(bonnet == 1) bonnet = 0; else bonnet = 1;
  2056. SetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
  2057. }
  2058. case 3:
  2059. {
  2060. new vehicleid = GetPlayerVehicleID(playerid);
  2061. new engine, lights, alarm, doors, bonnet, boot, objective;
  2062. GetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
  2063. if(boot == 1) boot = 0; else boot = 1;
  2064. SetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
  2065. }
  2066. case 4:
  2067. {
  2068. if(!GetPVarInt(playerid, "GasCan"))
  2069. {
  2070. ShowErrorDialog(playerid, "You don't have a gas can!");
  2071. return 1;
  2072. }
  2073. new vehicleid = GetPlayerVehicleID(playerid);
  2074. if(Fuel[vehicleid] < 80.0) Fuel[vehicleid] += 20.0;
  2075. else Fuel[vehicleid] = 100.0;
  2076. SetPVarInt(playerid, "GasCan", 0);
  2077. SendClientMessage(playerid, COLOR_WHITE, "You have filled the fuel tank with 20 fuel");
  2078. }
  2079. case 5:
  2080. {
  2081. new id = GetPVarInt(playerid, "DialogValue1");
  2082. if(GetPlayerVehicleAccess(playerid, id) != 1)
  2083. {
  2084. ShowErrorDialog(playerid, "You are not the owner of this vehicle!");
  2085. return 1;
  2086. }
  2087. new msg[128];
  2088. VehicleCreated[id] = 0;
  2089. new money = VehicleValue[id]/2;
  2090. GivePlayerMoney(playerid, money);
  2091. format(msg, sizeof(msg), "You have sold your vehicle for $%d", money);
  2092. SendClientMessage(playerid, COLOR_WHITE, msg);
  2093. RemovePlayerFromVehicle(playerid);
  2094. DestroyVehicle(VehicleID[id]);
  2095. SaveVehicle(id);
  2096. }
  2097. case 6:
  2098. {
  2099. new vehicleid = GetPVarInt(playerid, "DialogValue1");
  2100. if(GetPlayerVehicleAccess(playerid, vehicleid) != 1 && GetPlayerVehicleAccess(playerid, vehicleid) != 3)
  2101. {
  2102. ShowErrorDialog(playerid, "You are not the owner of this vehicle!");
  2103. return 1;
  2104. }
  2105. GetVehiclePos(VehicleID[vehicleid], VehiclePos[vehicleid][0], VehiclePos[vehicleid][1], VehiclePos[vehicleid][2]);
  2106. GetVehicleZAngle(VehicleID[vehicleid], VehiclePos[vehicleid][3]);
  2107. SendClientMessage(playerid, COLOR_WHITE, "You have parked this vehicle here");
  2108. UpdateVehicle(vehicleid, 1);
  2109. PutPlayerInVehicle(playerid, VehicleID[vehicleid], 0);
  2110. SaveVehicle(vehicleid);
  2111. }
  2112. case 7:
  2113. {
  2114. ShowDialog(playerid, DIALOG_VEHICLE_PLATE);
  2115. }
  2116. }
  2117. }
  2118. return 1;
  2119. }
  2120. if(dialogid == DIALOG_VEHICLE_BUY)
  2121. {
  2122. if(response)
  2123. {
  2124. if(GetPlayerVehicles(playerid) >= MAX_PLAYER_VEHICLES)
  2125. {
  2126. ShowErrorDialog(playerid, "You can't buy any more vehicles! Max: " #MAX_PLAYER_VEHICLES );
  2127. return 1;
  2128. }
  2129. new id = GetPVarInt(playerid, "DialogValue1");
  2130. if(GetPlayerMoney(playerid) < VehicleValue[id])
  2131. {
  2132. ShowErrorDialog(playerid, "You don't have enough money to buy this vehicle!");
  2133. return 1;
  2134. }
  2135. new freeid;
  2136. for(new i=1; i < MAX_DVEHICLES; i++)
  2137. {
  2138. if(!VehicleCreated[i])
  2139. {
  2140. freeid = i; break;
  2141. }
  2142. }
  2143. if(!freeid)
  2144. {
  2145. ShowErrorDialog(playerid, "Vehicle dealership is out of stock!");
  2146. return 1;
  2147. }
  2148. GivePlayerMoney(playerid, -VehicleValue[id]);
  2149. new dealerid = strval(VehicleOwner[id]);
  2150. VehicleCreated[freeid] = VEHICLE_PLAYER;
  2151. VehicleModel[freeid] = VehicleModel[id];
  2152. VehiclePos[freeid] = DealershipPos[dealerid];
  2153. VehicleColor[freeid] = VehicleColor[id];
  2154. VehicleInterior[freeid] = VehicleInterior[id];
  2155. VehicleWorld[freeid] = VehicleWorld[id];
  2156. VehicleValue[freeid] = VehicleValue[id];
  2157. VehicleOwner[freeid] = PlayerName(playerid);
  2158. VehicleNumberPlate[freeid] = DEFAULT_NUMBER_PLATE;
  2159. for(new d=0; d < sizeof(VehicleTrunk[]); d++)
  2160. {
  2161. VehicleTrunk[freeid][d][0] = 0;
  2162. VehicleTrunk[freeid][d][1] = 0;
  2163. }
  2164. for(new d=0; d < sizeof(VehicleMods[]); d++)
  2165. {
  2166. VehicleMods[freeid][d] = 0;
  2167. }
  2168. VehiclePaintjob[freeid] = 255;
  2169. UpdateVehicle(freeid, 0);
  2170. SaveVehicle(freeid);
  2171. new msg[128];
  2172. format(msg, sizeof(msg), "You have bought this vehicle for $%d", VehicleValue[id]);
  2173. SendClientMessage(playerid, COLOR_WHITE, msg);
  2174. }
  2175. else
  2176. {
  2177. new vehicleid = GetPVarInt(playerid, "DialogValue1");
  2178. if(GetPlayerVehicleAccess(playerid, vehicleid) != 3)
  2179. {
  2180. RemovePlayerFromVehicle(playerid);
  2181. }
  2182. }
  2183. return 1;
  2184. }
  2185. if(dialogid == DIALOG_VEHICLE_SELL)
  2186. {
  2187. if(response)
  2188. {
  2189. if(GetPlayerVehicles(playerid) >= MAX_PLAYER_VEHICLES)
  2190. {
  2191. ShowErrorDialog(playerid, "You can't buy any more vehicles! Max: " #MAX_PLAYER_VEHICLES );
  2192. return 1;
  2193. }
  2194. new targetid = GetPVarInt(playerid, "DialogValue1");
  2195. new vehicleid = GetPVarInt(playerid, "DialogValue2");
  2196. new price = GetPVarInt(playerid, "DialogValue3");
  2197. if(GetPlayerMoney(playerid) < price)
  2198. {
  2199. ShowErrorDialog(playerid, "You don't have enough money to buy this vehicle!");
  2200. return 1;
  2201. }
  2202. new msg[128];
  2203. VehicleOwner[vehicleid] = PlayerName(playerid);
  2204. GivePlayerMoney(playerid, -price);
  2205. GivePlayerMoney(targetid, price);
  2206. SaveVehicle(vehicleid);
  2207. format(msg, sizeof(msg), "You have bought this vehicle for $%d", price);
  2208. SendClientMessage(playerid, COLOR_WHITE, msg);
  2209. format(msg, sizeof(msg), "%s (%d) has accepted your offer and bought the vehicle", PlayerName(playerid), playerid);
  2210. SendClientMessage(targetid, COLOR_WHITE, msg);
  2211. }
  2212. else
  2213. {
  2214. new targetid = GetPVarInt(playerid, "DialogValue1");
  2215. new msg[128];
  2216. format(msg, sizeof(msg), "%s (%d) refused your offer", PlayerName(playerid), playerid);
  2217. SendClientMessage(targetid, COLOR_WHITE, msg);
  2218. }
  2219. return 1;
  2220. }
  2221. if(dialogid == DIALOG_FINDVEHICLE)
  2222. {
  2223. if(response)
  2224. {
  2225. new id;
  2226. sscanf(inputtext[4], "d", id);
  2227. if(IsValidVehicle(id))
  2228. {
  2229. TrackCar[playerid] = VehicleID[id];
  2230. SendClientMessage(playerid, COLOR_WHITE, "You vehicle's location is shown on your radar");
  2231. }
  2232. }
  2233. return 1;
  2234. }
  2235. if(dialogid == DIALOG_TRUNK)
  2236. {
  2237. if(response)
  2238. {
  2239. SetPVarInt(playerid, "DialogValue2", listitem);
  2240. ShowDialog(playerid, DIALOG_TRUNK_ACTION);
  2241. }
  2242. else
  2243. {
  2244. new vehicleid = GetPVarInt(playerid, "DialogValue1");
  2245. new engine, lights, alarm, doors, bonnet, boot, objective;
  2246. GetVehicleParamsEx(VehicleID[vehicleid], engine, lights, alarm, doors, bonnet, boot, objective);
  2247. SetVehicleParamsEx(VehicleID[vehicleid], engine, lights, alarm, doors, bonnet, 0, objective);
  2248. }
  2249. return 1;
  2250. }
  2251. if(dialogid == DIALOG_TRUNK_ACTION)
  2252. {
  2253. if(response)
  2254. {
  2255. new vehicleid = GetPVarInt(playerid, "DialogValue1");
  2256. new slot = GetPVarInt(playerid, "DialogValue2");
  2257. switch(listitem)
  2258. {
  2259. case 0:
  2260. {
  2261. new weaponid = GetPlayerWeapon(playerid);
  2262. if(weaponid == 0)
  2263. {
  2264. ShowPlayerDialog(playerid, DIALOG_ERROR, DIALOG_STYLE_MSGBOX, "ERROR", "You don't have a weapon in your hands!", "OK", "");
  2265. return 1;
  2266. }
  2267. VehicleTrunk[vehicleid][slot][0] = weaponid;
  2268. if(IsMeleeWeapon(weaponid)) VehicleTrunk[vehicleid][slot][1] = 1;
  2269. else VehicleTrunk[vehicleid][slot][1] = GetPlayerAmmo(playerid);
  2270. RemovePlayerWeapon(playerid, weaponid);
  2271. SaveVehicle(vehicleid);
  2272. }
  2273. case 1:
  2274. {
  2275. if(VehicleTrunk[vehicleid][slot][1] <= 0)
  2276. {
  2277. ShowPlayerDialog(playerid, DIALOG_ERROR, DIALOG_STYLE_MSGBOX, "ERROR", "This slot is empty!", "OK", "");
  2278. return 1;
  2279. }
  2280. GivePlayerWeapon(playerid, VehicleTrunk[vehicleid][slot][0], VehicleTrunk[vehicleid][slot][1]);
  2281. VehicleTrunk[vehicleid][slot][0] = 0;
  2282. VehicleTrunk[vehicleid][slot][1] = 0;
  2283. SaveVehicle(vehicleid);
  2284. }
  2285. }
  2286. }
  2287. ShowDialog(playerid, DIALOG_TRUNK);
  2288. return 1;
  2289. }
  2290. if(dialogid == DIALOG_VEHICLE_PLATE)
  2291. {
  2292. if(response)
  2293. {
  2294. if(strlen(inputtext) < 1 || strlen(inputtext) >= sizeof(VehicleNumberPlate[]))
  2295. {
  2296. ShowErrorDialog(playerid, "Invalid length!");
  2297. return 1;
  2298. }
  2299. new id = GetPVarInt(playerid, "DialogValue1");
  2300. new vehicleid = VehicleID[id];
  2301. strmid(VehicleNumberPlate[id], inputtext, 0, sizeof(VehicleNumberPlate[]));
  2302. SaveVehicle(id);
  2303. SetVehicleNumberPlate(vehicleid, inputtext);
  2304. SetVehicleToRespawn(vehicleid);
  2305. new msg[128];
  2306. format(msg, sizeof(msg), "You have changed vehicle number plate to %s", inputtext);
  2307. SendClientMessage(playerid, COLOR_WHITE, msg);
  2308. }
  2309. else ShowDialog(playerid, DIALOG_VEHICLE);
  2310. return 1;
  2311. }
  2312. if(dialogid == DIALOG_FUEL)
  2313. {
  2314. if(response)
  2315. {
  2316. switch(listitem)
  2317. {
  2318. case 0:
  2319. {
  2320. if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER)
  2321. {
  2322. ShowErrorDialog(playerid, "You are not driving a vehicle!");
  2323. return 1;
  2324. }
  2325. new vehicleid = GetPlayerVehicleID(playerid);
  2326. if(IsBicycle(vehicleid))
  2327. {
  2328. ShowErrorDialog(playerid, "Your vehicle doesn't have a fuel tank!");
  2329. return 1;
  2330. }
  2331. if(Fuel[vehicleid] >= 100.0)
  2332. {
  2333. ShowErrorDialog(playerid, "Your vehicle fuel tank is full!");
  2334. return 1;
  2335. }
  2336. if(GetPlayerMoney(playerid) < FUEL_PRICE)
  2337. {
  2338. ShowErrorDialog(playerid, "You don't have enough money!");
  2339. return 1;
  2340. }
  2341. RefuelTime[playerid] = 5;
  2342. SetPVarFloat(playerid, "Fuel", Fuel[vehicleid]);
  2343. GameTextForPlayer(playerid, "~w~refueling...", 2000, 3);
  2344. }
  2345. case 1:
  2346. {
  2347. if(GetPVarInt(playerid, "GasCan"))
  2348. {
  2349. ShowErrorDialog(playerid, "You already have a gas can!");
  2350. return 1;
  2351. }
  2352. if(GetPlayerMoney(playerid) < GAS_CAN_PRICE)
  2353. {
  2354. ShowErrorDialog(playerid, "You don't have enough money!");
  2355. return 1;
  2356. }
  2357. GivePlayerMoney(playerid, -GAS_CAN_PRICE);
  2358. SetPVarInt(playerid, "GasCan", 1);
  2359. SendClientMessage(playerid, COLOR_WHITE, "You have bought a gas can for $" #GAS_CAN_PRICE );
  2360. }
  2361. }
  2362. }
  2363. return 1;
  2364. }
  2365. if(dialogid == DIALOG_EDITVEHICLE)
  2366. {
  2367. if(response)
  2368. {
  2369. new id = GetPVarInt(playerid, "DialogValue1");
  2370. new nr, params[128];
  2371. sscanf(inputtext, "ds", nr, params);
  2372. switch(nr)
  2373. {
  2374. case 1:
  2375. {
  2376. new value = strval(params);
  2377. if(value < 0) value = 0;
  2378. VehicleValue[id] = value;
  2379. UpdateVehicleLabel(id, 1);
  2380. SaveVehicle(id);
  2381. ShowDialog(playerid, DIALOG_EDITVEHICLE);
  2382. }
  2383. case 2:
  2384. {
  2385. new value;
  2386. if(IsNumeric(params)) value = strval(params);
  2387. else value = GetVehicleModelIDFromName(params);
  2388. if(value < 400 || value > 611)
  2389. {
  2390. ShowErrorDialog(playerid, "Invalid vehicle model!");
  2391. return 1;
  2392. }
  2393. VehicleModel[id] = value;
  2394. for(new i=0; i < sizeof(VehicleMods[]); i++)
  2395. {
  2396. VehicleMods[id][i] = 0;
  2397. }
  2398. VehiclePaintjob[id] = 255;
  2399. UpdateVehicle(id, 1);
  2400. SaveVehicle(id);
  2401. ShowDialog(playerid, DIALOG_EDITVEHICLE);
  2402. }
  2403. case 3:
  2404. {
  2405. new color1, color2;
  2406. sscanf(params, "dd", color1, color2);
  2407. VehicleColor[id][0] = color1;
  2408. VehicleColor[id][1] = color2;
  2409. SaveVehicle(id);
  2410. ChangeVehicleColor(VehicleID[id], color1, color2);
  2411. ShowDialog(playerid, DIALOG_EDITVEHICLE);
  2412. }
  2413. case 4:
  2414. {
  2415. if(strlen(params) < 1 || strlen(params) > 8)
  2416. {
  2417. ShowErrorDialog(playerid, "Invalid length!");
  2418. return 1;
  2419. }
  2420. strmid(VehicleNumberPlate[id], params, 0, sizeof(params));
  2421. SaveVehicle(id);
  2422. SetVehicleNumberPlate(VehicleID[id], params);
  2423. SetVehicleToRespawn(VehicleID[id]);
  2424. ShowDialog(playerid, DIALOG_EDITVEHICLE);
  2425. }
  2426. case 5:
  2427. {
  2428. DestroyVehicle(VehicleID[id]);
  2429. if(VehicleCreated[id] == VEHICLE_DEALERSHIP)
  2430. {
  2431. Delete3DTextLabel(VehicleLabel[id]);
  2432. }
  2433. VehicleCreated[id] = 0;
  2434. SaveVehicle(id);
  2435. new msg[128];
  2436. format(msg, sizeof(msg), "You have deleted vehicle id %d", id);
  2437. SendClientMessage(playerid, COLOR_WHITE, msg);
  2438. }
  2439. case 6:
  2440. {
  2441. if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER)
  2442. {
  2443. ShowErrorDialog(playerid, "You are not driving the vehicle!");
  2444. return 1;
  2445. }
  2446. GetVehiclePos(VehicleID[id], VehiclePos[id][0], VehiclePos[id][1], VehiclePos[id][2]);
  2447. GetVehicleZAngle(VehicleID[id], VehiclePos[id][3]);
  2448. SendClientMessage(playerid, COLOR_WHITE, "You have parked this vehicle here");
  2449. UpdateVehicle(id, 1);
  2450. PutPlayerInVehicle(playerid, VehicleID[id], 0);
  2451. SaveVehicle(id);
  2452. ShowDialog(playerid, DIALOG_EDITVEHICLE);
  2453. }
  2454. case 7:
  2455. {
  2456. new Float:x, Float:y, Float:z;
  2457. GetVehiclePos(VehicleID[id], x, y, z);
  2458. SetPlayerPos(playerid, x, y, z+1);
  2459. new msg[128];
  2460. format(msg, sizeof(msg), "You have teleported to vehicle id %d", id);
  2461. SendClientMessage(playerid, COLOR_WHITE, msg);
  2462. }
  2463. }
  2464. }
  2465. return 1;
  2466. }
  2467. return 0;
  2468. }
  2469.  
  2470. stock sscanf(string[], format[], {Float,_}:...)
  2471. {
  2472. #if defined isnull
  2473. if (isnull(string))
  2474. #else
  2475. if (string[0] == 0 || (string[0] == 1 && string[1] == 0))
  2476. #endif
  2477. {
  2478. return format[0];
  2479. }
  2480. new
  2481. formatPos = 0,
  2482. stringPos = 0,
  2483. paramPos = 2,
  2484. paramCount = numargs(),
  2485. delim = ' ';
  2486. while (string[stringPos] && string[stringPos] <= ' ')
  2487. {
  2488. stringPos++;
  2489. }
  2490. while (paramPos < paramCount && string[stringPos])
  2491. {
  2492. switch (format[formatPos++])
  2493. {
  2494. case '\0':
  2495. {
  2496. return 0;
  2497. }
  2498. case 'i', 'd':
  2499. {
  2500. new
  2501. neg = 1,
  2502. num = 0,
  2503. ch = string[stringPos];
  2504. if (ch == '-')
  2505. {
  2506. neg = -1;
  2507. ch = string[++stringPos];
  2508. }
  2509. do
  2510. {
  2511. stringPos++;
  2512. if ('0' <= ch <= '9')
  2513. {
  2514. num = (num * 10) + (ch - '0');
  2515. }
  2516. else
  2517. {
  2518. return -1;
  2519. }
  2520. }
  2521. while ((ch = string[stringPos]) > ' ' && ch != delim);
  2522. setarg(paramPos, 0, num * neg);
  2523. }
  2524. case 'h', 'x':
  2525. {
  2526. new
  2527. num = 0,
  2528. ch = string[stringPos];
  2529. do
  2530. {
  2531. stringPos++;
  2532. switch (ch)
  2533. {
  2534. case 'x', 'X':
  2535. {
  2536. num = 0;
  2537. continue;
  2538. }
  2539. case '0' .. '9':
  2540. {
  2541. num = (num << 4) | (ch - '0');
  2542. }
  2543. case 'a' .. 'f':
  2544. {
  2545. num = (num << 4) | (ch - ('a' - 10));
  2546. }
  2547. case 'A' .. 'F':
  2548. {
  2549. num = (num << 4) | (ch - ('A' - 10));
  2550. }
  2551. default:
  2552. {
  2553. return -1;
  2554. }
  2555. }
  2556. }
  2557. while ((ch = string[stringPos]) > ' ' && ch != delim);
  2558. setarg(paramPos, 0, num);
  2559. }
  2560. case 'c':
  2561. {
  2562. setarg(paramPos, 0, string[stringPos++]);
  2563. }
  2564. case 'f':
  2565. {
  2566. new
  2567. end = stringPos - 1,
  2568. ch;
  2569. while ((ch = string[++end]) && ch != delim) {}
  2570. string[end] = '\0';
  2571. setarg(paramPos,0,_:floatstr(string[stringPos]));
  2572. string[end] = ch;
  2573. stringPos = end;
  2574. }
  2575. case 'p':
  2576. {
  2577. delim = format[formatPos++];
  2578. continue;
  2579. }
  2580. case '\'':
  2581. {
  2582. new
  2583. end = formatPos - 1,
  2584. ch;
  2585. while ((ch = format[++end]) && ch != '\'') {}
  2586. if (!ch)
  2587. {
  2588. return -1;
  2589. }
  2590. format[end] = '\0';
  2591. if ((ch = strfind(string, format[formatPos], false, stringPos)) == -1)
  2592. {
  2593. if (format[end + 1])
  2594. {
  2595. return -1;
  2596. }
  2597. return 0;
  2598. }
  2599. format[end] = '\'';
  2600. stringPos = ch + (end - formatPos);
  2601. formatPos = end + 1;
  2602. }
  2603. case 'u':
  2604. {
  2605. new
  2606. end = stringPos - 1,
  2607. id = 0,
  2608. bool:num = true,
  2609. ch;
  2610. while ((ch = string[++end]) && ch != delim)
  2611. {
  2612. if (num)
  2613. {
  2614. if ('0' <= ch <= '9')
  2615. {
  2616. id = (id * 10) + (ch - '0');
  2617. }
  2618. else
  2619. {
  2620. num = false;
  2621. }
  2622. }
  2623. }
  2624. if (num && IsPlayerConnected(id))
  2625. {
  2626. setarg(paramPos, 0, id);
  2627. }
  2628. else
  2629. {
  2630. #if !defined foreach
  2631. #define foreach(%1,%2) for (new %2 = 0; %2 < MAX_PLAYERS; %2++) if (IsPlayerConnected(%2))
  2632. #define __SSCANF_FOREACH__
  2633. #endif
  2634. string[end] = '\0';
  2635. num = false;
  2636. new
  2637. name[MAX_PLAYER_NAME];
  2638. id = end - stringPos;
  2639. foreach (Player, playerid)
  2640. {
  2641. GetPlayerName(playerid, name, sizeof (name));
  2642. if (!strcmp(name, string[stringPos], true, id))
  2643. {
  2644. setarg(paramPos, 0, playerid);
  2645. num = true;
  2646. break;
  2647. }
  2648. }
  2649. if (!num)
  2650. {
  2651. setarg(paramPos, 0, INVALID_PLAYER_ID);
  2652. }
  2653. string[end] = ch;
  2654. #if defined __SSCANF_FOREACH__
  2655. #undef foreach
  2656. #undef __SSCANF_FOREACH__
  2657. #endif
  2658. }
  2659. stringPos = end;
  2660. }
  2661. case 's', 'z':
  2662. {
  2663. new
  2664. i = 0,
  2665. ch;
  2666. if (format[formatPos])
  2667. {
  2668. while ((ch = string[stringPos++]) && ch != delim)
  2669. {
  2670. setarg(paramPos, i++, ch);
  2671. }
  2672. if (!i)
  2673. {
  2674. return -1;
  2675. }
  2676. }
  2677. else
  2678. {
  2679. while ((ch = string[stringPos++]))
  2680. {
  2681. setarg(paramPos, i++, ch);
  2682. }
  2683. }
  2684. stringPos--;
  2685. setarg(paramPos, i, '\0');
  2686. }
  2687. default:
  2688. {
  2689. continue;
  2690. }
  2691. }
  2692. while (string[stringPos] && string[stringPos] != delim && string[stringPos] > ' ')
  2693. {
  2694. stringPos++;
  2695. }
  2696. while (string[stringPos] && (string[stringPos] == delim || string[stringPos] <= ' '))
  2697. {
  2698. stringPos++;
  2699. }
  2700. paramPos++;
  2701. }
  2702. do
  2703. {
  2704. if ((delim = format[formatPos++]) > ' ')
  2705. {
  2706. if (delim == '\'')
  2707. {
  2708. while ((delim = format[formatPos++]) && delim != '\'') {}
  2709. }
  2710. else if (delim != 'z')
  2711. {
  2712. return delim;
  2713. }
  2714. }
  2715. }
  2716. while (delim > ' ');
  2717. return 0;
  2718. }
  2719.  
Advertisement
Add Comment
Please, Sign In to add comment